FilterFuncColumn支持多字段名
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user