diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index 35b065ddb..a28a9845c 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -259,7 +259,8 @@ public abstract class AbstractDataSource extends AbstractService implements Data * * @return EntityInfo */ - protected EntityInfo loadEntityInfo(Class clazz, final boolean cacheForbidden, final Properties props, BiFunction> fullloader) { + protected EntityInfo loadEntityInfo(Class clazz, final boolean cacheForbidden, + final Properties props, BiFunction> fullloader) { return EntityInfo.load(clazz, cacheForbidden, props, this, fullloader); } @@ -402,7 +403,8 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture> getNumberMapAsync(final Class entityClass, final FilterBean bean, final FilterFuncColumn... columns) { + public CompletableFuture> getNumberMapAsync(final Class entityClass, + final FilterBean bean, final FilterFuncColumn... columns) { return getNumberMapAsync(entityClass, FilterNodeBean.createFilterNode(bean), columns); } @@ -452,68 +454,81 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture getNumberResultAsync(final Class entityClass, final FilterFunc func, final Number defVal, final String column, FilterBean bean) { + public CompletableFuture getNumberResultAsync(final Class entityClass, final FilterFunc func, + final Number defVal, final String column, FilterBean bean) { return getNumberResultAsync(entityClass, func, defVal, column, FilterNodeBean.createFilterNode(bean)); } //------------------------ queryColumnMapCompose ------------------------ @Override - public Map queryColumnMap(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn) { + public Map queryColumnMap(final Class entityClass, final String keyColumn, + final FilterFunc func, final String funcColumn) { return queryColumnMap(entityClass, keyColumn, func, funcColumn, (FilterNode) null); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final String keyColumn, final FilterFunc func, final String funcColumn) { return queryColumnMapAsync(entityClass, keyColumn, func, funcColumn, (FilterNode) null); } @Override - public Map queryColumnMap(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) { + public Map queryColumnMap(final Class entityClass, final String keyColumn, + final FilterFunc func, final String funcColumn, final FilterBean bean) { return queryColumnMap(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) { return queryColumnMapAsync(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn) { return queryColumnMap(entityClass, funcNodes, groupByColumn, (FilterNode) null); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn) { return queryColumnMapAsync(entityClass, funcNodes, groupByColumn, (FilterNode) null); } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn, final FilterBean bean) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn, final FilterBean bean) { return queryColumnMap(entityClass, funcNodes, groupByColumn, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn, final FilterBean bean) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn, final FilterBean bean) { return queryColumnMapAsync(entityClass, funcNodes, groupByColumn, FilterNodeBean.createFilterNode(bean)); } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns) { return queryColumnMap(entityClass, funcNodes, groupByColumns, (FilterNode) null); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns) { return queryColumnMapAsync(entityClass, funcNodes, groupByColumns, (FilterNode) null); } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterBean bean) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterBean bean) { return queryColumnMap(entityClass, funcNodes, groupByColumns, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterBean bean) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterBean bean) { return queryColumnMapAsync(entityClass, funcNodes, groupByColumns, FilterNodeBean.createFilterNode(bean)); } @@ -613,7 +628,8 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture findColumnAsync(final Class clazz, final String column, final Serializable defValue, final FilterBean bean) { + public CompletableFuture findColumnAsync(final Class clazz, final String column, + final Serializable defValue, final FilterBean bean) { return findColumnAsync(clazz, column, defValue, FilterNodeBean.createFilterNode(bean)); } @@ -629,12 +645,14 @@ public abstract class AbstractDataSource extends AbstractService implements Data //-----------------------list set---------------------------- @Override - public Set queryColumnSet(final String selectedColumn, final Class clazz, final String column, final Serializable colval) { + public Set queryColumnSet(final String selectedColumn, final Class clazz, + final String column, final Serializable colval) { return queryColumnSet(selectedColumn, clazz, null, FilterNodes.create(column, colval)); } @Override - public CompletableFuture> queryColumnSetAsync(final String selectedColumn, final Class clazz, final String column, final Serializable colval) { + public CompletableFuture> queryColumnSetAsync(final String selectedColumn, + final Class clazz, final String column, final Serializable colval) { return queryColumnSetAsync(selectedColumn, clazz, null, FilterNodes.create(column, colval)); } @@ -644,7 +662,8 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture> queryColumnSetAsync(final String selectedColumn, final Class clazz, final FilterBean bean) { + public CompletableFuture> queryColumnSetAsync(final String selectedColumn, + final Class clazz, final FilterBean bean) { return queryColumnSetAsync(selectedColumn, clazz, null, FilterNodeBean.createFilterNode(bean)); } @@ -654,27 +673,32 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture> queryColumnSetAsync(final String selectedColumn, final Class clazz, final FilterNode node) { + public CompletableFuture> queryColumnSetAsync(final String selectedColumn, + final Class clazz, final FilterNode node) { return queryColumnSetAsync(selectedColumn, clazz, null, node); } @Override - public Set queryColumnSet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + public Set queryColumnSet(final String selectedColumn, final Class clazz, + final Flipper flipper, final FilterBean bean) { return queryColumnSet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnSetAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + public CompletableFuture> queryColumnSetAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterBean bean) { return queryColumnSetAsync(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public List queryColumnList(final String selectedColumn, final Class clazz, final String column, final Serializable colval) { + public List queryColumnList(final String selectedColumn, final Class clazz, + final String column, final Serializable colval) { return queryColumnList(selectedColumn, clazz, null, FilterNodes.create(column, colval)); } @Override - public CompletableFuture> queryColumnListAsync(final String selectedColumn, final Class clazz, final String column, final Serializable colval) { + public CompletableFuture> queryColumnListAsync(final String selectedColumn, + final Class clazz, final String column, final Serializable colval) { return queryColumnListAsync(selectedColumn, clazz, null, FilterNodes.create(column, colval)); } @@ -684,7 +708,8 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture> queryColumnListAsync(final String selectedColumn, final Class clazz, final FilterBean bean) { + public CompletableFuture> queryColumnListAsync(final String selectedColumn, + final Class clazz, final FilterBean bean) { return queryColumnListAsync(selectedColumn, clazz, null, FilterNodeBean.createFilterNode(bean)); } @@ -694,17 +719,20 @@ public abstract class AbstractDataSource extends AbstractService implements Data } @Override - public CompletableFuture> queryColumnListAsync(final String selectedColumn, final Class clazz, final FilterNode node) { + public CompletableFuture> queryColumnListAsync(final String selectedColumn, + final Class clazz, final FilterNode node) { return queryColumnListAsync(selectedColumn, clazz, null, node); } @Override - public List queryColumnList(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + public List queryColumnList(final String selectedColumn, final Class clazz, + final Flipper flipper, final FilterBean bean) { return queryColumnList(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnListAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + public CompletableFuture> queryColumnListAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterBean bean) { return queryColumnListAsync(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @@ -721,12 +749,14 @@ public abstract class AbstractDataSource extends AbstractService implements Data * @return 字段集合 */ @Override - public Sheet queryColumnSheet(final String selectedColumn, Class clazz, final Flipper flipper, final FilterBean bean) { + public Sheet queryColumnSheet(final String selectedColumn, Class clazz, + final Flipper flipper, final FilterBean bean) { return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public CompletableFuture> queryColumnSheetAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + public CompletableFuture> queryColumnSheetAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterBean bean) { return queryColumnSheetAsync(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index 3533f9812..b69f43d72 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -710,28 +710,36 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement protected abstract CompletableFuture updateColumnDBAsync(final EntityInfo info, Flipper flipper, final UpdateSqlInfo sql); //查询Number Map数据 - protected abstract CompletableFuture> getNumberMapDBAsync(final EntityInfo info, String[] tables, final String sql, final FilterNode node, final FilterFuncColumn... columns); + protected abstract CompletableFuture> getNumberMapDBAsync(final EntityInfo info, + String[] tables, final String sql, final FilterNode node, final FilterFuncColumn... columns); //查询Number数据 - protected abstract CompletableFuture getNumberResultDBAsync(final EntityInfo info, String[] tables, final String sql, final FilterFunc func, final Number defVal, final String column, final FilterNode node); + protected abstract CompletableFuture getNumberResultDBAsync(final EntityInfo info, + String[] tables, final String sql, final FilterFunc func, final Number defVal, final String column, final FilterNode node); //查询Map数据 - protected abstract CompletableFuture> queryColumnMapDBAsync(final EntityInfo info, String[] tables, final String sql, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node); + protected abstract CompletableFuture> queryColumnMapDBAsync(final EntityInfo info, + String[] tables, final String sql, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node); //查询Map数据 - protected abstract CompletableFuture> queryColumnMapDBAsync(final EntityInfo info, String[] tables, final String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node); + protected abstract CompletableFuture> queryColumnMapDBAsync(final EntityInfo info, + String[] tables, final String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node); //查询单条记录 - protected abstract CompletableFuture findDBAsync(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, final SelectColumn selects, final Serializable pk, final FilterNode node); + protected abstract CompletableFuture findDBAsync(final EntityInfo info, String[] tables, + final String sql, final boolean onlypk, final SelectColumn selects, final Serializable pk, final FilterNode node); //查询单条记录的单个字段 - protected abstract CompletableFuture findColumnDBAsync(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, final String column, final Serializable defValue, final Serializable pk, final FilterNode node); + protected abstract CompletableFuture findColumnDBAsync(final EntityInfo info, String[] tables, + final String sql, final boolean onlypk, final String column, final Serializable defValue, final Serializable pk, final FilterNode node); //判断记录是否存在 - protected abstract CompletableFuture existsDBAsync(final EntityInfo info, final String[] tables, final String sql, final boolean onlypk, final Serializable pk, final FilterNode node); + protected abstract CompletableFuture existsDBAsync(final EntityInfo info, final String[] tables, + final String sql, final boolean onlypk, final Serializable pk, final FilterNode node); //查询一页数据 - protected abstract CompletableFuture> querySheetDBAsync(final EntityInfo info, final boolean readcache, final boolean needtotal, final boolean distinct, final SelectColumn selects, final Flipper flipper, final FilterNode node); + protected abstract CompletableFuture> querySheetDBAsync(final EntityInfo info, final boolean readcache, + final boolean needtotal, final boolean distinct, final SelectColumn selects, final Flipper flipper, final FilterNode node); //插入纪录 protected int insertDB(final EntityInfo info, T... entitys) { @@ -739,7 +747,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } //删除记录 - protected int deleteDB(final EntityInfo info, String[] tables, Flipper flipper, FilterNode node, Map> pkmap, final String... sqls) { + protected int deleteDB(final EntityInfo info, String[] tables, Flipper flipper, FilterNode node, + Map> pkmap, final String... sqls) { return deleteDBAsync(info, tables, flipper, node, pkmap, sqls).join(); } @@ -769,46 +778,55 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } //查询Number Map数据 - protected Map getNumberMapDB(final EntityInfo info, String[] tables, final String sql, final FilterNode node, final FilterFuncColumn... columns) { + protected Map getNumberMapDB(final EntityInfo info, String[] tables, + final String sql, final FilterNode node, final FilterFuncColumn... columns) { return (Map) getNumberMapDBAsync(info, tables, sql, node, columns).join(); } //查询Number数据 - protected Number getNumberResultDB(final EntityInfo info, String[] tables, final String sql, final FilterFunc func, final Number defVal, final String column, final FilterNode node) { + protected Number getNumberResultDB(final EntityInfo info, String[] tables, final String sql, + final FilterFunc func, final Number defVal, final String column, final FilterNode node) { return getNumberResultDBAsync(info, tables, sql, func, defVal, column, node).join(); } //查询Map数据 - protected Map queryColumnMapDB(final EntityInfo info, String[] tables, final String sql, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { + protected Map queryColumnMapDB(final EntityInfo info, String[] tables, + final String sql, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { return (Map) queryColumnMapDBAsync(info, tables, sql, keyColumn, func, funcColumn, node).join(); } //查询Map数据 - protected Map queryColumnMapDB(final EntityInfo info, String[] tables, final String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { + protected Map queryColumnMapDB(final EntityInfo info, String[] tables, + final String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { return (Map) queryColumnMapDBAsync(info, tables, sql, funcNodes, groupByColumns, node).join(); } //查询单条记录 - protected T findDB(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, final SelectColumn selects, final Serializable pk, final FilterNode node) { + protected T findDB(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, + final SelectColumn selects, final Serializable pk, final FilterNode node) { return findDBAsync(info, tables, sql, onlypk, selects, pk, node).join(); } //查询单条记录的单个字段 - protected Serializable findColumnDB(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, final String column, final Serializable defValue, final Serializable pk, final FilterNode node) { + protected Serializable findColumnDB(final EntityInfo info, String[] tables, final String sql, final boolean onlypk, + final String column, final Serializable defValue, final Serializable pk, final FilterNode node) { return findColumnDBAsync(info, tables, sql, onlypk, column, defValue, pk, node).join(); } //判断记录是否存在 - protected boolean existsDB(final EntityInfo info, final String[] tables, final String sql, final boolean onlypk, final Serializable pk, final FilterNode node) { + protected boolean existsDB(final EntityInfo info, final String[] tables, final String sql, final boolean onlypk, + final Serializable pk, final FilterNode node) { return existsDBAsync(info, tables, sql, onlypk, pk, node).join(); } //查询一页数据 - protected Sheet querySheetDB(final EntityInfo info, final boolean readcache, final boolean needtotal, final boolean distinct, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + protected Sheet querySheetDB(final EntityInfo info, final boolean readcache, final boolean needtotal, + final boolean distinct, final SelectColumn selects, final Flipper flipper, final FilterNode node) { return querySheetDBAsync(info, readcache, needtotal, distinct, selects, flipper, node).join(); } - protected CharSequence createSQLJoin(FilterNode node, final Function func, final boolean update, final Map joinTabalis, final Set haset, final EntityInfo info) { + protected CharSequence createSQLJoin(FilterNode node, final Function func, final boolean update, + final Map joinTabalis, final Set haset, final EntityInfo info) { return node == null ? null : node.createSQLJoin(func, update, joinTabalis, haset, info); } @@ -869,7 +887,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return new StringBuilder().append('\'').append(value.toString().replace("\\", "\\\\").replace("'", "\\'")).append('\'').toString(); } else if (!(value instanceof Number) && !(value instanceof java.util.Date) && !value.getClass().getName().startsWith("java.sql.") && !value.getClass().getName().startsWith("java.time.")) { - return new StringBuilder().append('\'').append(info.getJsonConvert().convertTo(value).replace("\\", "\\\\").replace("'", "\\'")).append('\'').toString(); + return new StringBuilder().append('\'').append(info.getJsonConvert().convertTo(value) + .replace("\\", "\\\\").replace("'", "\\'")).append('\'').toString(); } return String.valueOf(value); } else if (value != null && value instanceof CharSequence && "postgresql".equals(dbtype)) { @@ -1162,7 +1181,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement if ("postgresql".equals(dbtype()) && flipper != null && flipper.getLimit() > 0) { List sqls = new ArrayList<>(); for (String table : tables) { - String sql = "DELETE FROM " + table + " a" + (join1 == null ? "" : (", " + join1)) + " WHERE " + info.getPrimarySQLColumn() + " IN (SELECT " + info.getPrimaryField() + " FROM " + table + String sql = "DELETE FROM " + table + " a" + (join1 == null ? "" : (", " + join1)) + + " WHERE " + info.getPrimarySQLColumn() + " IN (SELECT " + info.getPrimaryField() + " FROM " + table + join2AndWhere + info.createSQLOrderby(flipper) + " OFFSET 0 LIMIT " + flipper.getLimit() + ")"; sqls.add(sql); } @@ -1171,7 +1191,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement boolean mysql = "mysql".equals(dbtype()); List sqls = new ArrayList<>(); for (String table : tables) { - String sql = "DELETE " + (mysql ? "a" : "") + " FROM " + table + " a" + (join1 == null ? "" : (", " + join1)) + join2AndWhere + info.createSQLOrderby(flipper) + String sql = "DELETE " + (mysql ? "a" : "") + " FROM " + table + " a" + + (join1 == null ? "" : (", " + join1)) + join2AndWhere + info.createSQLOrderby(flipper) + ((mysql && flipper != null && flipper.getLimit() > 0) ? (" LIMIT " + flipper.getLimit()) : ""); sqls.add(sql); } @@ -1537,10 +1558,12 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement Attribute attr = info.getAttribute(column); Serializable val = getSQLAttrValue(info, attr, colval); if (val instanceof byte[]) { - return new UpdateSqlInfo(true, "UPDATE " + info.getTable(pk) + " SET " + info.getSQLColumn(null, column) + "=" + prepareParamSign(1) + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter), (byte[]) val); + return new UpdateSqlInfo(true, "UPDATE " + info.getTable(pk) + " SET " + info.getSQLColumn(null, column) + "=" + prepareParamSign(1) + + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter), (byte[]) val); } else { return new UpdateSqlInfo(false, "UPDATE " + info.getTable(pk) + " SET " + info.getSQLColumn(null, column) + "=" - + info.formatSQLValue(column, val, sqlFormatter) + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter)); + + info.formatSQLValue(column, val, sqlFormatter) + + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter)); } } @@ -1722,7 +1745,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement if (setsql.length() < 1) { throw new SourceException("update non column-value array"); } - String sql = "UPDATE " + info.getTable(pk) + " SET " + setsql + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter); + String sql = "UPDATE " + info.getTable(pk) + " SET " + setsql + + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter); return new UpdateSqlInfo(false, sql, blobs); } @@ -1977,7 +2001,7 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } } - protected UpdateSqlInfo updateColumnSql(final EntityInfo info, final boolean needNode, final T entity, final FilterNode node, final SelectColumn selects) { + protected UpdateSqlInfo updateColumnSql(final EntityInfo info, boolean needNode, T entity, FilterNode node, final SelectColumn selects) { StringBuilder setsql = new StringBuilder(); List blobs = null; int index = 0; @@ -2171,7 +2195,7 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> getNumberMapAsync(final Class entityClass, final FilterNode node, final FilterFuncColumn... columns) { + public CompletableFuture> getNumberMapAsync(Class entityClass, FilterNode node, FilterFuncColumn... columns) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2216,7 +2240,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture> getNumberMapDBApply(EntityInfo info, CompletableFuture future, FilterFuncColumn... columns) { + protected CompletableFuture> getNumberMapDBApply(EntityInfo info, + CompletableFuture future, FilterFuncColumn... columns) { return future.thenApply((DataResultSet dataset) -> { final Map map = new HashMap<>(); if (dataset.next()) { @@ -2239,7 +2264,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement //------------------------ getNumberResultCompose ----------------------- @Override - public Number getNumberResult(final Class entityClass, final FilterFunc func, final Number defVal, final String column, final FilterNode node) { + public Number getNumberResult(final Class entityClass, final FilterFunc func, final Number defVal, + final String column, final FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2261,7 +2287,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture getNumberResultAsync(final Class entityClass, final FilterFunc func, final Number defVal, final String column, final FilterNode node) { + public CompletableFuture getNumberResultAsync(final Class entityClass, final FilterFunc func, + final Number defVal, final String column, final FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2281,7 +2308,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } } - protected String getNumberResultSql(final EntityInfo info, final Class entityClass, final String[] tables, final FilterFunc func, final Number defVal, final String column, final FilterNode node) { + protected String getNumberResultSql(final EntityInfo info, final Class entityClass, + final String[] tables, final FilterFunc func, final Number defVal, final String column, final FilterNode node) { final Map joinTabalis = node == null ? null : node.getJoinTabalis(); final Set haset = new HashSet<>(); final CharSequence join = node == null ? null : node.createSQLJoin(this, false, joinTabalis, haset, info); @@ -2291,7 +2319,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture getNumberResultDBApply(EntityInfo info, CompletableFuture future, Number defVal, String column) { + protected CompletableFuture getNumberResultDBApply(EntityInfo info, + CompletableFuture future, Number defVal, String column) { return future.thenApply((DataResultSet dataset) -> { Number rs = defVal; if (dataset.next()) { @@ -2307,7 +2336,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement //------------------------ queryColumnMapCompose ------------------------ @Override - public Map queryColumnMap(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { + public Map queryColumnMap(final Class entityClass, + final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2329,7 +2359,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2349,13 +2380,15 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } } - protected String queryColumnMapSql(final EntityInfo info, final String[] tables, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { + protected String queryColumnMapSql(final EntityInfo info, final String[] tables, final String keyColumn, + final FilterFunc func, final String funcColumn, FilterNode node) { final String keySqlColumn = info.getSQLColumn(null, keyColumn); final Map joinTabalis = node == null ? null : node.getJoinTabalis(); final Set haset = new HashSet<>(); final CharSequence join = node == null ? null : node.createSQLJoin(this, false, joinTabalis, haset, info); final CharSequence where = node == null ? null : node.createSQLExpress(this, info, joinTabalis); - final String funcSqlColumn = func == null ? info.getSQLColumn("a", funcColumn) : func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : info.getSQLColumn("a", funcColumn))); + final String funcSqlColumn = func == null ? info.getSQLColumn("a", funcColumn) + : func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : info.getSQLColumn("a", funcColumn))); String joinAndWhere = (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); String sql; @@ -2376,7 +2409,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, CompletableFuture future, final String keyColumn) { + protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, + CompletableFuture future, final String keyColumn) { return future.thenApply((DataResultSet dataset) -> { Map rs = new LinkedHashMap<>(); while (dataset.next()) { @@ -2388,7 +2422,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn, final FilterNode node) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn, final FilterNode node) { Map map = queryColumnMap(entityClass, funcNodes, Utility.ofArray(groupByColumn), node); final Map rs = new LinkedHashMap<>(); map.forEach((keys, values) -> rs.put(keys[0], values)); @@ -2396,7 +2431,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String groupByColumn, final FilterNode node) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String groupByColumn, final FilterNode node) { CompletableFuture> future = queryColumnMapAsync(entityClass, funcNodes, Utility.ofArray(groupByColumn), node); return future.thenApply(map -> { final Map rs = new LinkedHashMap<>(); @@ -2406,7 +2442,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public Map queryColumnMap(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { + public Map queryColumnMap(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2427,7 +2464,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnMapAsync(final Class entityClass, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { + public CompletableFuture> queryColumnMapAsync(final Class entityClass, + final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { final EntityInfo info = loadEntityInfo(entityClass); final EntityCache cache = info.getCache(); if (cache != null && (isOnlyCache(info) || cache.isFullLoaded())) { @@ -2447,7 +2485,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } } - protected String queryColumnMapSql(final EntityInfo info, final String[] tables, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { + protected String queryColumnMapSql(final EntityInfo info, final String[] tables, final ColumnNode[] funcNodes, + final String[] groupByColumns, final FilterNode node) { final StringBuilder groupBySqlColumns = new StringBuilder(); if (groupByColumns != null && groupByColumns.length > 0) { for (int i = 0; i < groupByColumns.length; i++) { @@ -2506,7 +2545,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, CompletableFuture future, final ColumnNode[] funcNodes, final String[] groupByColumns) { + protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, + CompletableFuture future, final ColumnNode[] funcNodes, final String[] groupByColumns) { return future.thenApply((DataResultSet dataset) -> { Map rs = new LinkedHashMap<>(); while (dataset.next()) { @@ -2644,7 +2684,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement protected String findSql(final EntityInfo info, final SelectColumn selects, Serializable pk) { String column = info.getPrimarySQLColumn(); - final String sql = "SELECT " + info.getQueryColumns(null, selects) + " FROM " + info.getTable(pk) + " WHERE " + column + "=" + info.formatSQLValue(column, pk, sqlFormatter); + final String sql = "SELECT " + info.getQueryColumns(null, selects) + " FROM " + info.getTable(pk) + + " WHERE " + column + "=" + info.formatSQLValue(column, pk, sqlFormatter); return sql; } @@ -2707,7 +2748,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture findDBApply(EntityInfo info, CompletableFuture future, boolean onlypk, SelectColumn selects) { + protected CompletableFuture findDBApply(EntityInfo info, CompletableFuture future, + boolean onlypk, SelectColumn selects) { return future.thenApply((DataResultSet pgset) -> { T rs = pgset.next() ? (onlypk && selects == null ? getEntityValue(info, null, pgset) : getEntityValue(info, selects, pgset)) : null; pgset.close(); @@ -2760,7 +2802,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } protected String findColumnSql(final EntityInfo info, String column, final Serializable defValue, final Serializable pk) { - return "SELECT " + info.getSQLColumn(null, column) + " FROM " + info.getTable(pk) + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter); + return "SELECT " + info.getSQLColumn(null, column) + " FROM " + info.getTable(pk) + + " WHERE " + info.getPrimarySQLColumn() + "=" + info.formatSQLValue(info.getPrimarySQLColumn(), pk, sqlFormatter); } @Override @@ -2828,7 +2871,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - protected CompletableFuture findColumnDBApply(EntityInfo info, CompletableFuture future, boolean onlypk, String column, Serializable defValue) { + protected CompletableFuture findColumnDBApply(EntityInfo info, + CompletableFuture future, boolean onlypk, String column, Serializable defValue) { return future.thenApply((DataResultSet dataset) -> { Serializable val = defValue; if (dataset.next()) { @@ -2980,7 +3024,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnSetAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + public CompletableFuture> queryColumnSetAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterNode node) { return querySetAsync(clazz, SelectColumn.includes(selectedColumn), flipper, node).thenApply((Set list) -> { final Set rs = new LinkedHashSet<>(); if (list.isEmpty()) { @@ -2996,7 +3041,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public List queryColumnList(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + public List queryColumnList(final String selectedColumn, final Class clazz, + final Flipper flipper, final FilterNode node) { final List list = queryList(clazz, SelectColumn.includes(selectedColumn), flipper, node); final List rs = new ArrayList<>(); if (list.isEmpty()) { @@ -3011,7 +3057,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnListAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + public CompletableFuture> queryColumnListAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterNode node) { return queryListAsync(clazz, SelectColumn.includes(selectedColumn), flipper, node).thenApply((List list) -> { final List rs = new ArrayList<>(); if (list.isEmpty()) { @@ -3027,7 +3074,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, + final Flipper flipper, final FilterNode node) { Sheet sheet = querySheet(clazz, SelectColumn.includes(selectedColumn), flipper, node); final Sheet rs = new Sheet<>(); if (sheet.isEmpty()) { @@ -3045,7 +3093,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryColumnSheetAsync(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + public CompletableFuture> queryColumnSheetAsync(final String selectedColumn, + final Class clazz, final Flipper flipper, final FilterNode node) { return querySheetAsync(clazz, SelectColumn.includes(selectedColumn), flipper, node).thenApply((Sheet sheet) -> { final Sheet rs = new Sheet<>(); if (sheet.isEmpty()) { @@ -3094,7 +3143,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryMapAsync(final Class clazz, final SelectColumn selects, final Stream keyStream) { + public CompletableFuture> queryMapAsync(final Class clazz, + final SelectColumn selects, final Stream keyStream) { if (keyStream == null) { return CompletableFuture.completedFuture(new LinkedHashMap<>()); } @@ -3140,7 +3190,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - public CompletableFuture> queryMapAsync(final Class clazz, final SelectColumn selects, final FilterNode node) { + public CompletableFuture> queryMapAsync(final Class clazz, + final SelectColumn selects, final FilterNode node) { return queryListAsync(clazz, selects, node).thenApply((List rs) -> { final EntityInfo info = loadEntityInfo(clazz); final Attribute primary = info.getPrimary(); @@ -3209,7 +3260,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } } - protected Sheet querySheet(final boolean readCache, final boolean needTotal, final boolean distinct, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + protected Sheet querySheet(final boolean readCache, final boolean needTotal, final boolean distinct, + final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { final EntityInfo info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (readCache && cache != null && cache.isFullLoaded()) { @@ -3223,7 +3275,8 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return querySheetDB(info, readCache, needTotal, distinct, selects, flipper, node); } - protected CompletableFuture> querySheetAsync(final boolean readCache, final boolean needTotal, final boolean distinct, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + protected CompletableFuture> querySheetAsync(final boolean readCache, final boolean needTotal, + final boolean distinct, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { final EntityInfo info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (readCache && cache != null && cache.isFullLoaded()) { diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index 2b078586e..c2c80b49d 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -147,7 +147,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return false; } - protected List prepareInsertEntityStatements(JdbcConnection conn, + protected List prepareInsertEntityStatements(JdbcConnection conn, EntityInfo info, Map> prepareInfos, T... entitys) throws SQLException { Attribute[] attrs = info.insertAttributes; final List prestmts = new ArrayList<>(); @@ -165,7 +165,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return prestmts; } - protected PreparedStatement prepareInsertEntityStatement(JdbcConnection conn, String sql, + protected PreparedStatement prepareInsertEntityStatement(JdbcConnection conn, String sql, EntityInfo info, T... entitys) throws SQLException { Attribute[] attrs = info.insertAttributes; final PreparedStatement prestmt = info.isAutoGenerated() @@ -178,7 +178,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return prestmt; } - protected List prepareUpdateEntityStatements(JdbcConnection conn, + protected List prepareUpdateEntityStatements(JdbcConnection conn, EntityInfo info, Map> prepareInfos, T... entitys) throws SQLException { Attribute primary = info.primary; Attribute[] attrs = info.updateAttributes; @@ -196,7 +196,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return prestmts; } - protected PreparedStatement prepareUpdateEntityStatement(JdbcConnection conn, + protected PreparedStatement prepareUpdateEntityStatement(JdbcConnection conn, String prepareSQL, EntityInfo info, T... entitys) throws SQLException { Attribute primary = info.primary; Attribute[] attrs = info.updateAttributes; @@ -209,7 +209,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return prestmt; } - protected int bindStatementParameters(JdbcConnection conn, PreparedStatement prestmt, + protected int bindStatementParameters(JdbcConnection conn, PreparedStatement prestmt, EntityInfo info, Attribute[] attrs, T entity) throws SQLException { int i = 0; for (Attribute attr : attrs) { @@ -484,7 +484,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { try { stmt = conn.createUpdateStatement(); for (String newCatalog : newCatalogs) { - stmt.addBatch(("postgresql".equals(dbtype()) + stmt.addBatch(("postgresql".equals(dbtype()) ? "CREATE SCHEMA IF NOT EXISTS " : "CREATE DATABASE IF NOT EXISTS ") + newCatalog); } @@ -655,13 +655,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture deleteDBAsync(final EntityInfo info, String[] tables, + protected CompletableFuture deleteDBAsync(final EntityInfo info, String[] tables, Flipper flipper, FilterNode node, Map> pkmap, final String... sqls) { return supplyAsync(() -> deleteDB(info, tables, flipper, node, pkmap, sqls)); } @Override - protected int deleteDB(EntityInfo info, String[] tables, Flipper flipper, + protected int deleteDB(EntityInfo info, String[] tables, Flipper flipper, FilterNode node, Map> pkmap, String... sqls) { JdbcConnection conn = null; List stmtsRef = new ArrayList<>(); @@ -679,7 +679,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } - private int deleteDBStatement(List stmtsRef, final JdbcConnection conn, final EntityInfo info, + private int deleteDBStatement(List stmtsRef, final JdbcConnection conn, final EntityInfo info, String[] tables, Flipper flipper, FilterNode node, Map> pkmap, String... sqls) throws SQLException { final long s = System.currentTimeMillis(); Statement stmt = null; @@ -741,7 +741,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } if (logger.isLoggable(Level.FINE)) { - logger.log(Level.FINE, "delete, old-tables: " + Arrays.toString(oldTables) + 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) { //分表全部不存在 @@ -918,8 +918,8 @@ 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 " + String catalogSql = ("postgresql".equals(dbtype()) + ? "CREATE SCHEMA IF NOT EXISTS " : "CREATE DATABASE IF NOT EXISTS ") + newCatalog; try { if (info.isLoggable(logger, Level.FINEST, catalogSql)) { @@ -1258,9 +1258,9 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } - private int updateColumnDBStatement(List stmtsRef, final JdbcConnection conn, + private int updateColumnDBStatement(List stmtsRef, final JdbcConnection conn, final EntityInfo info, Flipper flipper, UpdateSqlInfo sql) throws SQLException { //String sql, boolean prepared, Object... blobs) { - + final long s = System.currentTimeMillis(); int c = -1; String firstTable = null; @@ -1370,7 +1370,7 @@ 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) + logger.log(Level.FINE, "updateColumn, old-tables: " + Arrays.toString(oldTables) + ", new-tables: " + Arrays.toString(sql.tables)); } if (sql.tables.length == 0) { //分表全部不存在 @@ -1413,13 +1413,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture> getNumberMapDBAsync(EntityInfo info, + protected CompletableFuture> getNumberMapDBAsync(EntityInfo info, String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) { return supplyAsync(() -> getNumberMapDB(info, tables, sql, node, columns)); } @Override - protected Map getNumberMapDB(EntityInfo info, + protected Map getNumberMapDB(EntityInfo info, String[] tables, String sql, FilterNode node, FilterFuncColumn... columns) { JdbcConnection conn = null; final Map map = new HashMap<>(); @@ -1517,13 +1517,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture getNumberResultDBAsync(EntityInfo info, String[] tables, + protected CompletableFuture getNumberResultDBAsync(EntityInfo 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 Number getNumberResultDB(EntityInfo info, String[] tables, + protected Number getNumberResultDB(EntityInfo info, String[] tables, String sql, FilterFunc func, Number defVal, String column, FilterNode node) { JdbcConnection conn = null; final long s = System.currentTimeMillis(); @@ -1608,13 +1608,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture> queryColumnMapDBAsync(EntityInfo info, + protected CompletableFuture> queryColumnMapDBAsync(EntityInfo 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 Map queryColumnMapDB(EntityInfo info, String[] tables, + protected Map queryColumnMapDB(EntityInfo info, String[] tables, String sql, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) { JdbcConnection conn = null; final long s = System.currentTimeMillis(); @@ -1696,13 +1696,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture> queryColumnMapDBAsync(EntityInfo info, + protected CompletableFuture> queryColumnMapDBAsync(EntityInfo 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 Map queryColumnMapDB(EntityInfo info, String[] tables, + protected Map queryColumnMapDB(EntityInfo info, String[] tables, String sql, final ColumnNode[] funcNodes, final String[] groupByColumns, final FilterNode node) { JdbcConnection conn = null; Map rs = new LinkedHashMap<>(); @@ -1843,13 +1843,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture findDBAsync(EntityInfo info, String[] tables, String sql, boolean onlypk, + protected CompletableFuture findDBAsync(EntityInfo 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 findDB(EntityInfo info, String[] tables, String sql, boolean onlypk, + protected T findDB(EntityInfo info, String[] tables, String sql, boolean onlypk, SelectColumn selects, Serializable pk, FilterNode node) { JdbcConnection conn = null; final long s = System.currentTimeMillis(); @@ -1923,13 +1923,13 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture findColumnDBAsync(EntityInfo info, final String[] tables, + protected CompletableFuture findColumnDBAsync(EntityInfo 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 Serializable findColumnDB(EntityInfo info, String[] tables, + protected Serializable findColumnDB(EntityInfo info, String[] tables, String sql, boolean onlypk, String column, Serializable defValue, Serializable pk, FilterNode node) { JdbcConnection conn = null; final long s = System.currentTimeMillis(); @@ -2012,7 +2012,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected CompletableFuture existsDBAsync(EntityInfo info, final String[] tables, + protected CompletableFuture existsDBAsync(EntityInfo info, final String[] tables, String sql, boolean onlypk, Serializable pk, FilterNode node) { return supplyAsync(() -> existsDB(info, tables, sql, onlypk, pk, node)); } @@ -2187,7 +2187,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - protected Sheet querySheetDB(EntityInfo info, final boolean readCache, boolean needTotal, + protected Sheet querySheetDB(EntityInfo 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); @@ -2363,7 +2363,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } else { if (readCache && info.isLoggable(logger, Level.FINEST, listSql)) { - logger.finest(info.getType().getSimpleName() + " query sql=" + listSql + logger.finest(info.getType().getSimpleName() + " query sql=" + listSql + (flipper == null || flipper.getLimit() < 1 ? "" : (" LIMIT " + flipper.getLimit() + " OFFSET " + flipper.getOffset()))); } } @@ -2670,7 +2670,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } @Override - public CompletableFuture nativeQueryAsync(String sql, BiConsumer consumer, + public CompletableFuture nativeQueryAsync(String sql, BiConsumer consumer, Function handler, Map params) { return supplyAsync(() -> nativeQuery(sql, consumer, handler, params)); } @@ -2950,7 +2950,7 @@ 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) + } 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)) { @@ -3119,7 +3119,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } - protected class JdbcConnection extends DataJdbcConnection { + protected class JdbcConnection extends DataJdbcConnection implements AutoCloseable { public int version; @@ -3280,6 +3280,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { return conn.createBlob(); } + @Override public void close() throws SQLException { conn.close(); }