Skip to content

Commit

Permalink
重构 Scx Data (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
scx567888 committed Aug 28, 2024
1 parent 8082852 commit 68fde4e
Show file tree
Hide file tree
Showing 44 changed files with 572 additions and 1,824 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public FieldFilter deserializeFieldFilter(JsonNode objectNode) {
if (filterMode == INCLUDED) {
return new IncludedFieldFilter().addIncluded(fieldNames).ignoreNullValue(ignoreNullValue);
} else if (filterMode == EXCLUDED) {
return new ExcludedFieldFilter().addIncluded(fieldNames).ignoreNullValue(ignoreNullValue);
return new ExcludedFieldFilter().addExcluded(fieldNames).ignoreNullValue(ignoreNullValue);
} else {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class FieldFilterSerializer {
public Object serialize(Object obj) {
return switch (obj) {
case FieldFilter s -> serializeFieldFilter(s);
case null, default -> null;
default -> null;
};
}

Expand Down
32 changes: 16 additions & 16 deletions scx-data-jdbc/src/main/java/cool/scx/data/jdbc/JDBCDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,8 @@ private SQL buildInsertBatchSQL(Collection<? extends Entity> entityList, FieldFi

private String _buildSelectSQL0(Query query, FieldFilter selectFilter, WhereClause whereClause) {
var selectColumns = filter(selectFilter, tableInfo);
var groupByColumns = groupByParser.parseGroupBy(query.getGroupBy());
var orderByClauses = orderByParser.parseOrderBy(query.getOrderBy());
var groupByColumns = groupByParser.parse(query.getGroupBy());
var orderByClauses = orderByParser.parse(query.getOrderBy());
return Select(selectColumns)
.From(tableInfo)
.Where(whereClause.whereClause())
Expand Down Expand Up @@ -264,7 +264,7 @@ private String _buildSelectSQL0(Query query, FieldFilter selectFilter, WhereClau
* @return selectSQL
*/
public final SQL buildSelectSQL(Query query, FieldFilter selectFilter) {
var whereClause = whereParser.parseWhere(query.getWhere());
var whereClause = whereParser.parse(query.getWhere());
var sql = _buildSelectSQL0(query, selectFilter, whereClause);
return sql(sql, whereClause.params());
}
Expand All @@ -278,7 +278,7 @@ public final SQL buildSelectSQL(Query query, FieldFilter selectFilter) {
* @return a
*/
public final SQL buildSelectSQLWithAlias(Query query, FieldFilter selectFilter) {
var whereClause = whereParser.parseWhere(query.getWhere());
var whereClause = whereParser.parse(query.getWhere());
var sql0 = _buildSelectSQL0(query, selectFilter, whereClause);
var sql = Select("*")
.From("(" + sql0 + ")")
Expand All @@ -288,8 +288,8 @@ public final SQL buildSelectSQLWithAlias(Query query, FieldFilter selectFilter)

private String _buildGetSQL0(Query query, FieldFilter selectFilter, WhereClause whereClause) {
var selectColumns = filter(selectFilter, tableInfo);
var groupByColumns = groupByParser.parseGroupBy(query.getGroupBy());
var orderByClauses = orderByParser.parseOrderBy(query.getOrderBy());
var groupByColumns = groupByParser.parse(query.getGroupBy());
var orderByClauses = orderByParser.parse(query.getOrderBy());
return Select(selectColumns)
.From(tableInfo)
.Where(whereClause.whereClause())
Expand All @@ -300,7 +300,7 @@ private String _buildGetSQL0(Query query, FieldFilter selectFilter, WhereClause
}

public final SQL buildGetSQL(Query query, FieldFilter selectFilter) {
var whereClause = whereParser.parseWhere(query.getWhere());
var whereClause = whereParser.parse(query.getWhere());
var sql = _buildGetSQL0(query, selectFilter, whereClause);
return sql(sql, whereClause.params());
}
Expand All @@ -314,7 +314,7 @@ public final SQL buildGetSQL(Query query, FieldFilter selectFilter) {
* @return a
*/
public final SQL buildGetSQLWithAlias(Query query, FieldFilter selectFilter) {
var whereClause = whereParser.parseWhere(query.getWhere());
var whereClause = whereParser.parse(query.getWhere());
var sql0 = _buildGetSQL0(query, selectFilter, whereClause);
var sql = Select("*")
.From("(" + sql0 + ")")
Expand All @@ -323,13 +323,13 @@ public final SQL buildGetSQLWithAlias(Query query, FieldFilter selectFilter) {
}

private SQL buildUpdateSQL(Entity entity, Query query, FieldFilter updateFilter) {
if (query.getWhere().isEmpty()) {
if (query.getWhere().length == 0) {
throw new IllegalArgumentException("更新数据时 必须指定 删除条件 或 自定义的 where 语句 !!!");
}
var updateSetColumnInfos = filter(updateFilter, entity, tableInfo);
var updateSetColumns = Arrays.stream(updateSetColumnInfos).map(c -> c.name() + " = ?").toArray(String[]::new);
var whereClause = whereParser.parseWhere(query.getWhere());
var orderByClauses = orderByParser.parseOrderBy(query.getOrderBy());
var whereClause = whereParser.parse(query.getWhere());
var orderByClauses = orderByParser.parse(query.getOrderBy());
var sql = Update(tableInfo)
.Set(updateSetColumns)
.Where(whereClause.whereClause())
Expand All @@ -341,11 +341,11 @@ private SQL buildUpdateSQL(Entity entity, Query query, FieldFilter updateFilter)
}

private SQL buildDeleteSQL(Query query) {
if (query.getWhere().isEmpty()) {
if (query.getWhere().length == 0) {
throw new IllegalArgumentException("删除数据时 必须指定 删除条件 或 自定义的 where 语句 !!!");
}
var whereClause = whereParser.parseWhere(query.getWhere());
var orderByClauses = orderByParser.parseOrderBy(query.getOrderBy());
var whereClause = whereParser.parse(query.getWhere());
var orderByClauses = orderByParser.parse(query.getOrderBy());
var sql = Delete(tableInfo)
.Where(whereClause.whereClause())
.OrderBy(orderByClauses)
Expand All @@ -355,8 +355,8 @@ private SQL buildDeleteSQL(Query query) {
}

private SQL buildCountSQL(Query query) {
var whereClause = whereParser.parseWhere(query.getWhere());
var groupByColumns = groupByParser.parseGroupBy(query.getGroupBy());
var whereClause = whereParser.parse(query.getWhere());
var groupByColumns = groupByParser.parse(query.getGroupBy());
var sql = Select("COUNT(*) AS count")
.From(tableInfo)
.Where(whereClause.whereClause())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cool.scx.data.jdbc.parser;

import cool.scx.data.jdbc.AnnotationConfigTable;
import cool.scx.data.query.GroupByBody;
import cool.scx.data.query.GroupBy;
import cool.scx.data.query.parser.GroupByParser;

import static cool.scx.data.jdbc.parser.ColumnNameParser.parseColumnName;
Expand All @@ -15,8 +15,8 @@ public JDBCDaoGroupByParser(AnnotationConfigTable tableInfo) {
}

@Override
public String parseGroupByBody(GroupByBody body) {
return parseColumnName(tableInfo, body.name(), body.info().useJsonExtract(), body.info().useOriginalName());
protected String[] parseGroupBy(GroupBy g) {
return new String[]{parseColumnName(tableInfo, g.name(), g.info().useJsonExtract(), g.info().useOriginalName())};
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package cool.scx.data.jdbc.parser;

import cool.scx.data.jdbc.AnnotationConfigTable;
import cool.scx.data.query.OrderByBody;
import cool.scx.data.query.OrderBy;
import cool.scx.data.query.parser.OrderByParser;

import static cool.scx.data.jdbc.parser.ColumnNameParser.parseColumnName;
Expand All @@ -15,9 +15,9 @@ public JDBCDaoOrderByParser(AnnotationConfigTable tableInfo) {
}

@Override
protected String parseOrderByBody(OrderByBody body) {
var columnName = parseColumnName(tableInfo, body.name(), body.info().useJsonExtract(), body.info().useOriginalName());
return columnName + " " + body.orderByType().name();
protected String[] parseOrderBy(OrderBy o) {
var columnName = parseColumnName(tableInfo, o.name(), o.info().useJsonExtract(), o.info().useOriginalName());
return new String[]{columnName + " " + o.orderByType().name()};
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
import cool.scx.common.util.ObjectUtils;
import cool.scx.common.util.StringUtils;
import cool.scx.data.jdbc.AnnotationConfigTable;
import cool.scx.data.query.Where;
import cool.scx.data.query.WhereClause;
import cool.scx.data.query.WhereOption.Info;
import cool.scx.data.query.WhereType;
import cool.scx.data.query.exception.ValidParamListIsEmptyException;
import cool.scx.data.query.parser.WhereParser;
import cool.scx.jdbc.dialect.Dialect;
Expand All @@ -33,116 +32,116 @@ public JDBCDaoWhereParser(AnnotationConfigTable tableInfo, Dialect dialect) {
}

@Override
public WhereClause parseIsNull(String name, WhereType whereType, Object value1, Object value2, Info info) {
var columnName = parseColumnName(tableInfo, name, info.useJsonExtract(), info.useOriginalName());
public WhereClause parseIsNull(Where w) {
var columnName = parseColumnName(tableInfo, w.name(), w.info().useJsonExtract(), w.info().useOriginalName());
var whereParams = new Object[]{};
var whereClause = columnName + " " + getWhereKeyWord(whereType);
var whereClause = columnName + " " + getWhereKeyWord(w.whereType());
return new WhereClause(whereClause, whereParams);
}

@Override
public WhereClause parseEqual(String name, WhereType whereType, Object value1, Object value2, Info info) {
var columnName = parseColumnName(tableInfo, name, info.useJsonExtract(), info.useOriginalName());
public WhereClause parseEqual(Where w) {
var columnName = parseColumnName(tableInfo, w.name(), w.info().useJsonExtract(), w.info().useOriginalName());
String v1;
Object[] whereParams;
//针对 参数类型是 AbstractPlaceholderSQL 的情况进行特殊处理 下同
if (value1 instanceof SQL a) {
if (w.value1() instanceof SQL a) {
v1 = "(" + a.sql() + ")";
whereParams = a.params();
} else {
v1 = "?";
whereParams = new Object[]{value1};
whereParams = new Object[]{w.value1()};
}
var whereClause = columnName + " " + getWhereKeyWord(whereType) + " " + v1;
var whereClause = columnName + " " + getWhereKeyWord(w.whereType()) + " " + v1;
return new WhereClause(whereClause, whereParams);
}

@Override
public WhereClause parseLike(String name, WhereType whereType, Object value1, Object value2, Info info) {
var columnName = parseColumnName(tableInfo, name, info.useJsonExtract(), info.useOriginalName());
public WhereClause parseLike(Where w) {
var columnName = parseColumnName(tableInfo, w.name(), w.info().useJsonExtract(), w.info().useOriginalName());
String v1;
Object[] whereParams;
if (value1 instanceof SQL a) {
if (w.value1() instanceof SQL a) {
v1 = "(" + a.sql() + ")";
whereParams = a.params();
} else {
v1 = "?";
whereParams = new Object[]{value1};
whereParams = new Object[]{w.value1()};
}
var whereClause = columnName + " " + getWhereKeyWord(whereType) + " CONCAT('%'," + v1 + ",'%')";
var whereClause = columnName + " " + getWhereKeyWord(w.whereType()) + " CONCAT('%'," + v1 + ",'%')";
return new WhereClause(whereClause, whereParams);
}

@Override
public WhereClause parseIn(String name, WhereType whereType, Object value1, Object value2, Info info) {
var columnName = parseColumnName(tableInfo, name, info.useJsonExtract(), info.useOriginalName());
public WhereClause parseIn(Where w) {
var columnName = parseColumnName(tableInfo, w.name(), w.info().useJsonExtract(), w.info().useOriginalName());
String v1;
Object[] whereParams;
if (value1 instanceof SQL a) {
if (w.value1() instanceof SQL a) {
v1 = "(" + a.sql() + ")";
whereParams = a.params();
} else {
//移除空值并去重
whereParams = Arrays.stream(toObjectArray(value1)).filter(Objects::nonNull).distinct().toArray();
whereParams = Arrays.stream(toObjectArray(w.value1())).filter(Objects::nonNull).distinct().toArray();
//长度为空是抛异常
if (whereParams.length == 0) {
throw new ValidParamListIsEmptyException(whereType);
throw new ValidParamListIsEmptyException(w.whereType());
}
v1 = "(" + StringUtils.repeat("?", ", ", whereParams.length) + ")";
}
var whereClause = columnName + " " + getWhereKeyWord(whereType) + " " + v1;
var whereClause = columnName + " " + getWhereKeyWord(w.whereType()) + " " + v1;
return new WhereClause(whereClause, whereParams);
}

@Override
public WhereClause parseBetween(String name, WhereType whereType, Object value1, Object value2, Info info) {
var columnName = parseColumnName(tableInfo, name, info.useJsonExtract(), info.useOriginalName());
public WhereClause parseBetween(Where w) {
var columnName = parseColumnName(tableInfo, w.name(), w.info().useJsonExtract(), w.info().useOriginalName());
String v1;
String v2;
var whereParams = new ArrayList<>();
if (value1 instanceof SQL a) {
if (w.value1() instanceof SQL a) {
v1 = "(" + a.sql() + ")";
addAll(whereParams, a.params());
} else {
v1 = "?";
whereParams.add(value1);
whereParams.add(w.value1());
}
if (value2 instanceof SQL a) {
if (w.value2() instanceof SQL a) {
v2 = "(" + a.sql() + ")";
addAll(whereParams, a.params());
} else {
v2 = "?";
whereParams.add(value2);
whereParams.add(w.value2());
}
var whereClause = columnName + " " + getWhereKeyWord(whereType) + " " + v1 + " AND " + v2;
var whereClause = columnName + " " + getWhereKeyWord(w.whereType()) + " " + v1 + " AND " + v2;
return new WhereClause(whereClause, whereParams.toArray());
}

@Override
public WhereClause parseJsonContains(String name, WhereType whereType, Object value1, Object value2, Info info) {
var c = splitIntoColumnNameAndFieldPath(name);
var columnName = info.useOriginalName() ? c.columnName() : tableInfo.getColumn(c.columnName()).name();
public WhereClause parseJsonContains(Where w) {
var c = splitIntoColumnNameAndFieldPath(w.name());
var columnName = w.info().useOriginalName() ? c.columnName() : tableInfo.getColumn(c.columnName()).name();
if (StringUtils.isBlank(c.columnName())) {
throw new IllegalArgumentException("使用 JSON_CONTAINS 时, 查询名称不合法 !!! 字段名 : " + name);
throw new IllegalArgumentException("使用 JSON_CONTAINS 时, 查询名称不合法 !!! 字段名 : " + w.name());
}
String v1;
Object[] whereParams;
if (value1 instanceof SQL a) {
if (w.value1() instanceof SQL a) {
v1 = "(" + a.sql() + ")";
whereParams = a.params();
} else {
v1 = "?";
if (info.useOriginalValue()) {
whereParams = new Object[]{value1};
if (w.info().useOriginalValue()) {
whereParams = new Object[]{w.value1()};
} else {
try {
whereParams = new Object[]{toJson(value1, new ObjectUtils.Options().setIgnoreJsonIgnore(true).setIgnoreNullValue(true))};
whereParams = new Object[]{toJson(w.value1(), new ObjectUtils.Options().setIgnoreJsonIgnore(true).setIgnoreNullValue(true))};
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("使用 JSON_CONTAINS 时, 查询参数不合法(无法正确转换为 JSON) !!! 字段名 : " + name, e);
throw new IllegalArgumentException("使用 JSON_CONTAINS 时, 查询参数不合法(无法正确转换为 JSON) !!! 字段名 : " + w.name(), e);
}
}
}
var whereClause = getWhereKeyWord(whereType) + "(" + columnName;
var whereClause = getWhereKeyWord(w.whereType()) + "(" + columnName;
if (StringUtils.notBlank(c.fieldPath())) {
whereClause = whereClause + ", " + v1 + ", '$" + c.fieldPath() + "')";
} else {
Expand All @@ -159,7 +158,7 @@ public WhereClause parse(Object obj) {
return super.parse(obj);
}

public final WhereClause parseSQL(SQL sql) {
private WhereClause parseSQL(SQL sql) {
return new WhereClause("(" + sql.sql() + ")", sql.params());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public List<String> add(Collection<Entity> entityList, FieldFilter updateFilter)

@Override
public List<Entity> find(Query query, FieldFilter selectFilter) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var findStatement = this.collection
.find(whereClause.whereClause())
.bind(whereClause.params());
Expand All @@ -103,7 +103,7 @@ public List<Entity> find(Query query, FieldFilter selectFilter) {

@Override
public void find(Query query, FieldFilter fieldFilter, Consumer<Entity> consumer) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var findStatement = this.collection
.find(whereClause.whereClause())
.bind(whereClause.params());
Expand All @@ -121,7 +121,7 @@ public void find(Query query, FieldFilter fieldFilter, Consumer<Entity> consumer

@Override
public Entity get(Query query, FieldFilter fieldFilter) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var findStatement = this.collection
.find(whereClause.whereClause())
.bind(whereClause.params())
Expand All @@ -135,7 +135,7 @@ public Entity get(Query query, FieldFilter fieldFilter) {

@Override
public long update(Entity entity, Query query, FieldFilter updateFilter) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var newDoc = toDbDoc(entity, updateFilter.addExcluded("_id"));
var result = this.collection
.modify(whereClause.whereClause())
Expand All @@ -147,7 +147,7 @@ public long update(Entity entity, Query query, FieldFilter updateFilter) {

@Override
public long delete(Query query) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var result = this.collection
.remove(whereClause.whereClause())
.bind(whereClause.params())
Expand All @@ -157,7 +157,7 @@ public long delete(Query query) {

@Override
public long count(Query query) {
var whereClause = WHERE_PARSER.parseWhere(query.getWhere());
var whereClause = WHERE_PARSER.parse(query.getWhere());
var docResult = this.collection
.find(whereClause.whereClause())
.bind(whereClause.params())
Expand Down
Loading

0 comments on commit 68fde4e

Please sign in to comment.