FilterFuncColumn支持多字段名

This commit is contained in:
Redkale
2017-02-23 19:26:13 +08:00
parent 178226b730
commit 9ae847d392
2 changed files with 35 additions and 23 deletions

View File

@@ -1162,7 +1162,9 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) { if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) {
if (node == null || node.isCacheUseable(this)) { if (node == null || node.isCacheUseable(this)) {
for (FilterFuncColumn ffc : columns) { for (FilterFuncColumn ffc : columns) {
map.put(ffc.col(), cache.getNumberResult(ffc.func, ffc.defvalue, ffc.column, node)); for (String col : ffc.cols()) {
map.put(ffc.col(col), cache.getNumberResult(ffc.func, ffc.defvalue, col, node));
}
} }
return map; return map;
} }
@@ -1172,8 +1174,10 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis); final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (FilterFuncColumn ffc : columns) { for (FilterFuncColumn ffc : columns) {
if (sb.length() > 0) sb.append(", "); for (String col : ffc.cols()) {
sb.append(ffc.func.getColumn((ffc.column == null || ffc.column.isEmpty() ? "*" : ("a." + ffc.column)))); if (sb.length() > 0) sb.append(", ");
sb.append(ffc.func.getColumn((col == null || col.isEmpty() ? "*" : ("a." + col))));
}
} }
final String sql = "SELECT " + sb + " FROM " + info.getTable(node) + " a" final String sql = "SELECT " + sb + " FROM " + info.getTable(node) + " a"
+ (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
@@ -1184,10 +1188,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
if (set.next()) { if (set.next()) {
int index = 0; int index = 0;
for (FilterFuncColumn ffc : columns) { for (FilterFuncColumn ffc : columns) {
Object o = set.getObject(++index); for (String col : ffc.cols()) {
Number rs = ffc.defvalue; Object o = set.getObject(++index);
if (o != null) rs = (Number) o; Number rs = ffc.defvalue;
map.put(ffc.col(), rs); if (o != null) rs = (Number) o;
map.put(ffc.col(col), rs);
}
} }
} }
set.close(); set.close();
@@ -1196,7 +1202,9 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
} catch (SQLException e) { } catch (SQLException e) {
if (info.tableStrategy != null && info.tablenotexistSqlstates.contains(';' + e.getSQLState() + ';')) { if (info.tableStrategy != null && info.tablenotexistSqlstates.contains(';' + e.getSQLState() + ';')) {
for (FilterFuncColumn ffc : columns) { for (FilterFuncColumn ffc : columns) {
map.put(ffc.col(), ffc.defvalue); for (String col : ffc.cols()) {
map.put(ffc.col(col), ffc.defvalue);
}
} }
return map; return map;
} }

View File

@@ -18,7 +18,7 @@ public class FilterFuncColumn implements java.io.Serializable {
FilterFunc func; FilterFunc func;
String column; //为null将使用*代替 String[] columns; //为null将使用*代替
Number defvalue; Number defvalue;
@@ -29,30 +29,34 @@ public class FilterFuncColumn implements java.io.Serializable {
return new FilterFuncColumn(func); return new FilterFuncColumn(func);
} }
public static FilterFuncColumn create(final FilterFunc func, final String column) { public static FilterFuncColumn create(final FilterFunc func, final String... columns) {
return new FilterFuncColumn(func, column); return new FilterFuncColumn(func, columns);
} }
public static FilterFuncColumn create(final FilterFunc func, final String column, final Number defvalue) { public static FilterFuncColumn create(final FilterFunc func, final Number defvalue, final String... columns) {
return new FilterFuncColumn(func, column, defvalue); return new FilterFuncColumn(func, defvalue, columns);
} }
String col() { String[] cols() {
return columns == null || columns.length == 0 ? new String[]{COLUMN_NULL} : columns;
}
String col(String column) {
return column == null || column.isEmpty() ? COLUMN_NULL : column; return column == null || column.isEmpty() ? COLUMN_NULL : column;
} }
public FilterFuncColumn(final FilterFunc func) { public FilterFuncColumn(final FilterFunc func) {
this(func, null, null); this(func, (Number) null);
} }
public FilterFuncColumn(final FilterFunc func, final String column) { public FilterFuncColumn(final FilterFunc func, final String... columns) {
this(func, column, null); this(func, null, columns);
} }
public FilterFuncColumn(final FilterFunc func, final String column, final Number defvalue) { public FilterFuncColumn(final FilterFunc func, final Number defvalue, final String... columns) {
this.func = func; this.func = func;
this.column = column;
this.defvalue = defvalue; this.defvalue = defvalue;
this.columns = columns;
} }
public FilterFunc getFunc() { public FilterFunc getFunc() {
@@ -63,12 +67,12 @@ public class FilterFuncColumn implements java.io.Serializable {
this.func = func; this.func = func;
} }
public String getColumn() { public String[] getColumns() {
return column; return columns;
} }
public void setColumn(String column) { public void setColumns(String[] columns) {
this.column = column; this.columns = columns;
} }
public Number getDefvalue() { public Number getDefvalue() {