This commit is contained in:
@@ -562,7 +562,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
try {
|
try {
|
||||||
if (!info.isVirtualEntity()) {
|
if (!info.isVirtualEntity()) {
|
||||||
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
||||||
CharSequence join = node.createSQLJoin(this, joinTabalis, info);
|
CharSequence join = node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
||||||
String sql = "DELETE " + (this.readPool.isMysql() ? "a" : "") + " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
String sql = "DELETE " + (this.readPool.isMysql() ? "a" : "") + " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
||||||
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(info.getType().getSimpleName() + " delete sql=" + sql);
|
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(info.getType().getSimpleName() + " delete sql=" + sql);
|
||||||
@@ -755,7 +755,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
int c = -1;
|
int c = -1;
|
||||||
if (!info.isVirtualEntity()) {
|
if (!info.isVirtualEntity()) {
|
||||||
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
||||||
CharSequence join = node.createSQLJoin(this, joinTabalis, info);
|
CharSequence join = node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
||||||
|
|
||||||
String sql = "UPDATE " + info.getTable(node) + " a SET " + info.getSQLColumn("a", column) + " = "
|
String sql = "UPDATE " + info.getTable(node) + " a SET " + info.getSQLColumn("a", column) + " = "
|
||||||
@@ -909,7 +909,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
int c = -1;
|
int c = -1;
|
||||||
if (!virtual) {
|
if (!virtual) {
|
||||||
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
||||||
CharSequence join = node.createSQLJoin(this, joinTabalis, info);
|
CharSequence join = node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
||||||
|
|
||||||
String sql = "UPDATE " + info.getTable(node) + " a SET " + setsql + (join == null ? "" : join)
|
String sql = "UPDATE " + info.getTable(node) + " a SET " + setsql + (join == null ? "" : join)
|
||||||
@@ -1034,7 +1034,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
int c = -1;
|
int c = -1;
|
||||||
if (!virtual) {
|
if (!virtual) {
|
||||||
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
Map<Class, String> joinTabalis = node.getJoinTabalis();
|
||||||
CharSequence join = node.createSQLJoin(this, joinTabalis, info);
|
CharSequence join = node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
CharSequence where = node.createSQLExpress(info, joinTabalis);
|
||||||
|
|
||||||
String sql = "UPDATE " + info.getTable(node) + " a SET " + setsql
|
String sql = "UPDATE " + info.getTable(node) + " a SET " + setsql
|
||||||
@@ -1119,7 +1119,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
||||||
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, info);
|
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
||||||
final String sql = "SELECT " + func.getColumn((column == null || column.isEmpty() ? "*" : ("a." + column))) + " FROM " + info.getTable(node) + " a"
|
final String sql = "SELECT " + func.getColumn((column == null || column.isEmpty() ? "*" : ("a." + column))) + " 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));
|
||||||
@@ -1166,7 +1166,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
}
|
}
|
||||||
final String sqlkey = info.getSQLColumn(null, keyColumn);
|
final String sqlkey = info.getSQLColumn(null, keyColumn);
|
||||||
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
||||||
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, info);
|
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
||||||
final String sql = "SELECT a." + sqlkey + ", " + func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : ("a." + funcColumn)))
|
final String sql = "SELECT a." + sqlkey + ", " + func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : ("a." + funcColumn)))
|
||||||
+ " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + " GROUP BY a." + sqlkey;
|
+ " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + " GROUP BY a." + sqlkey;
|
||||||
@@ -1265,7 +1265,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
try {
|
try {
|
||||||
final SelectColumn sels = selects;
|
final SelectColumn sels = selects;
|
||||||
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
||||||
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, info);
|
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
||||||
final String sql = "SELECT a.* FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
final String sql = "SELECT a.* FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
||||||
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " find sql=" + sql);
|
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " find sql=" + sql);
|
||||||
@@ -1328,7 +1328,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
final Connection conn = createReadSQLConnection();
|
final Connection conn = createReadSQLConnection();
|
||||||
try {
|
try {
|
||||||
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
||||||
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, info);
|
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
||||||
final String sql = "SELECT COUNT(" + info.getPrimarySQLColumn("a") + ") FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
final String sql = "SELECT COUNT(" + info.getPrimarySQLColumn("a") + ") FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where));
|
||||||
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " exists sql=" + sql);
|
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " exists sql=" + sql);
|
||||||
@@ -1561,7 +1561,7 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
|
|||||||
final SelectColumn sels = selects;
|
final SelectColumn sels = selects;
|
||||||
final List<T> list = new ArrayList();
|
final List<T> list = new ArrayList();
|
||||||
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
|
||||||
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, info);
|
final CharSequence join = node == null ? null : node.createSQLJoin(this, joinTabalis, new HashSet<>(), info);
|
||||||
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
|
||||||
final String sql = "SELECT a.* FROM " + info.getTable(node) + " a" + (join == null ? "" : join)
|
final String sql = "SELECT a.* FROM " + info.getTable(node) + " a" + (join == null ? "" : join)
|
||||||
+ ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + info.createSQLOrderby(flipper);
|
+ ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + info.createSQLOrderby(flipper);
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ public class FilterJoinNode extends FilterNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final EntityInfo<T> info) {
|
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final Set<String> haset, final EntityInfo<T> info) {
|
||||||
boolean morejoin = false;
|
boolean morejoin = false;
|
||||||
if (this.joinEntity == null) {
|
if (this.joinEntity == null) {
|
||||||
if (this.joinClass != null) this.joinEntity = func.apply(this.joinClass);
|
if (this.joinClass != null) this.joinEntity = func.apply(this.joinClass);
|
||||||
@@ -261,7 +261,8 @@ public class FilterJoinNode extends FilterNode {
|
|||||||
}
|
}
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (this.joinClass != null) {
|
if (this.joinClass != null) {
|
||||||
sb.append(createElementSQLJoin(joinTabalis, info, this));
|
CharSequence cs = createElementSQLJoin(joinTabalis, haset, info, this);
|
||||||
|
if (cs != null) sb.append(cs);
|
||||||
}
|
}
|
||||||
if (morejoin) {
|
if (morejoin) {
|
||||||
Set<Class> set = new HashSet<>();
|
Set<Class> set = new HashSet<>();
|
||||||
@@ -270,7 +271,7 @@ public class FilterJoinNode extends FilterNode {
|
|||||||
if (node instanceof FilterJoinNode) {
|
if (node instanceof FilterJoinNode) {
|
||||||
FilterJoinNode joinNode = ((FilterJoinNode) node);
|
FilterJoinNode joinNode = ((FilterJoinNode) node);
|
||||||
if (!set.contains(joinNode.joinClass)) {
|
if (!set.contains(joinNode.joinClass)) {
|
||||||
CharSequence cs = createElementSQLJoin(joinTabalis, info, joinNode);
|
CharSequence cs = createElementSQLJoin(joinTabalis, haset, info, joinNode);
|
||||||
if (cs != null) {
|
if (cs != null) {
|
||||||
sb.append(cs);
|
sb.append(cs);
|
||||||
set.add(joinNode.joinClass);
|
set.add(joinNode.joinClass);
|
||||||
@@ -282,8 +283,8 @@ public class FilterJoinNode extends FilterNode {
|
|||||||
return sb;
|
return sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CharSequence createElementSQLJoin(final Map<Class, String> joinTabalis, final EntityInfo info, final FilterJoinNode node) {
|
private static CharSequence createElementSQLJoin(final Map<Class, String> joinTabalis, final Set<String> haset, final EntityInfo info, final FilterJoinNode node) {
|
||||||
if (node.joinClass == null) return null;
|
if (node.joinClass == null || haset.contains(joinTabalis.get(node.joinClass))) return null;
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
String[] joinColumns = node.joinColumns;
|
String[] joinColumns = node.joinColumns;
|
||||||
int pos = joinColumns[0].indexOf('=');
|
int pos = joinColumns[0].indexOf('=');
|
||||||
@@ -293,6 +294,7 @@ public class FilterJoinNode extends FilterNode {
|
|||||||
pos = joinColumns[i].indexOf('=');
|
pos = joinColumns[i].indexOf('=');
|
||||||
sb.append(" AND ").append(info.getSQLColumn("a", pos > 0 ? joinColumns[i].substring(0, pos) : joinColumns[i])).append(" = ").append(node.joinEntity.getSQLColumn(joinTabalis.get(node.joinClass), pos > 0 ? joinColumns[i].substring(pos + 1) : joinColumns[i]));
|
sb.append(" AND ").append(info.getSQLColumn("a", pos > 0 ? joinColumns[i].substring(0, pos) : joinColumns[i])).append(" = ").append(node.joinEntity.getSQLColumn(joinTabalis.get(node.joinClass), pos > 0 ? joinColumns[i].substring(pos + 1) : joinColumns[i]));
|
||||||
}
|
}
|
||||||
|
if (haset != null) haset.add(joinTabalis.get(node.joinClass));
|
||||||
return sb;
|
return sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,11 +178,11 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则
|
|||||||
*
|
*
|
||||||
* @return SQL的join语句 不存在返回null
|
* @return SQL的join语句 不存在返回null
|
||||||
*/
|
*/
|
||||||
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final EntityInfo<T> info) {
|
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final Set<String> haset, final EntityInfo<T> info) {
|
||||||
if (joinTabalis == null || this.nodes == null) return null;
|
if (joinTabalis == null || this.nodes == null) return null;
|
||||||
StringBuilder sb = null;
|
StringBuilder sb = null;
|
||||||
for (FilterNode node : this.nodes) {
|
for (FilterNode node : this.nodes) {
|
||||||
CharSequence cs = node.createSQLJoin(func, joinTabalis, info);
|
CharSequence cs = node.createSQLJoin(func, joinTabalis, haset, info);
|
||||||
if (cs == null) continue;
|
if (cs == null) continue;
|
||||||
if (sb == null) sb = new StringBuilder();
|
if (sb == null) sb = new StringBuilder();
|
||||||
sb.append(cs);
|
sb.append(cs);
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ public class FilterNodeTest {
|
|||||||
System.out.println("bean.string = " + beanNode);
|
System.out.println("bean.string = " + beanNode);
|
||||||
Map<Class, String> nodeJoinTabalis = node.getJoinTabalis();
|
Map<Class, String> nodeJoinTabalis = node.getJoinTabalis();
|
||||||
Map<Class, String> beanJoinTabalis = beanNode.getJoinTabalis();
|
Map<Class, String> beanJoinTabalis = beanNode.getJoinTabalis();
|
||||||
CharSequence nodeJoinsql = node.createSQLJoin(func, nodeJoinTabalis, carEntity);
|
CharSequence nodeJoinsql = node.createSQLJoin(func, nodeJoinTabalis, new HashSet<>(), carEntity);
|
||||||
CharSequence beanJoinsql = beanNode.createSQLJoin(func, beanJoinTabalis, carEntity);
|
CharSequence beanJoinsql = beanNode.createSQLJoin(func, beanJoinTabalis, new HashSet<>(), carEntity);
|
||||||
CharSequence nodeWhere = node.createSQLExpress(carEntity, nodeJoinTabalis);
|
CharSequence nodeWhere = node.createSQLExpress(carEntity, nodeJoinTabalis);
|
||||||
CharSequence beanWhere = beanNode.createSQLExpress(carEntity, beanJoinTabalis);
|
CharSequence beanWhere = beanNode.createSQLExpress(carEntity, beanJoinTabalis);
|
||||||
System.out.println("node.sql = SELECT a.* FROM " + CarTestTable.class.getSimpleName().toLowerCase() + " a" + (nodeJoinsql == null ? "" : nodeJoinsql) + " WHERE " + nodeWhere);
|
System.out.println("node.sql = SELECT a.* FROM " + CarTestTable.class.getSimpleName().toLowerCase() + " a" + (nodeJoinsql == null ? "" : nodeJoinsql) + " WHERE " + nodeWhere);
|
||||||
|
|||||||
Reference in New Issue
Block a user