Skip to content

Commit 41813f1

Browse files
committed
refines sql updateCascadedEntities
1 parent bcb84a3 commit 41813f1

4 files changed

Lines changed: 33 additions & 17 deletions

File tree

hyperquery/src/main/java/org/slowcoders/hyperquery/impl/SqlBuilder.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@ public <E extends QEntity<E>> String buildUpdateCascaded2(Object baseId, QJoin j
451451
if (subEntities.isEmpty()) {
452452
sbQuery.write("select * from ").write(rootSchema.getTableName()).write(" where false");
453453
} else {
454-
sbQuery.incTab();
455454
sbQuery.write("select ");
456455
sbQuery.incTab();
457456
for (ColumnMapping mapping : columnMappings) {
@@ -473,7 +472,6 @@ public <E extends QEntity<E>> String buildUpdateCascaded2(Object baseId, QJoin j
473472
sbQuery.decTab();
474473
}
475474
sbQuery.decTab();
476-
sbQuery.decTab();
477475
sbQuery.write("\n), _UPSERT as (\n");
478476
sbQuery.incTab();
479477
sbQuery.write("INSERT INTO ").write(rootSchema.getTableName()).write(" (\n");
@@ -496,7 +494,9 @@ public <E extends QEntity<E>> String buildUpdateCascaded2(Object baseId, QJoin j
496494
sbQuery.write(col).write(", ");
497495
}
498496
sbQuery.shrinkLength(2);
497+
sbQuery.incTab();
499498
sbQuery.replaceTrailingComma(")\nDO UPDATE SET\n");
499+
sbQuery.incTab();
500500
for (ColumnMapping mapping : columnMappings) {
501501
if (mapping.columnName.equals("id")) continue;
502502
String value = mapping.columnConfig == null ? "EXCLUDED." + mapping.columnName :
@@ -507,28 +507,34 @@ public <E extends QEntity<E>> String buildUpdateCascaded2(Object baseId, QJoin j
507507
sbQuery.shrinkLength(2);
508508
sbQuery.decTab();
509509
sbQuery.decTab();
510-
sbQuery.write("\n)\nDELETE FROM hql_demo.bookstore.book_order t_0\n");
510+
sbQuery.write("\nRETURNING *");
511+
sbQuery.decTab();
512+
sbQuery.write("\n), _DELETE as (");
511513
sbQuery.incTab();
512-
sbQuery.write("WHERE NOT EXISTS (\n");
514+
sbQuery.write("\nDELETE FROM hql_demo.bookstore.book_order t_0");
515+
sbQuery.write("\nWHERE ");
516+
String joinOn = join.getJoinCriteria();
517+
joinOn = joinOn.replaceAll("#", "t_0");
518+
joinOn = joinOn.replaceAll("@\\.(\\w+)", "#{parent.$1}");
519+
sbQuery.write(joinOn);
520+
521+
sbQuery.incTab();
522+
sbQuery.write("\nAND NOT EXISTS (\n");
513523
sbQuery.incTab();
514524
sbQuery.write("SELECT 1\n");
515-
sbQuery.write("FROM _DATA\n");
525+
sbQuery.write("FROM _UPSERT\n");
516526
sbQuery.write("WHERE ");
517527
sbQuery.incTab();
518528
for (String col : rootSchema.getPrimaryKeys()) {
519-
sbQuery.write("t_0.").write(col).write(" = _DATA.").write(col).write("\n AND ");
529+
sbQuery.write("t_0.").write(col).write(" = _UPSERT.").write(col).write("\n AND ");
520530
}
521531
sbQuery.decTab();
522-
sbQuery.shrinkLength(5);
532+
sbQuery.shrinkLength(6).trim();
523533
sbQuery.decTab().write("\n)");
524-
String joinOn = join.getJoinCriteria();
525-
joinOn = joinOn.replaceAll("#", "t_0");
526-
joinOn = joinOn.replaceAll("@\\.(\\w+)", "#{parent.$1}");
527-
sbQuery.write("AND ").write(joinOn);
528-
529534
sbQuery.decTab();
530-
sbQuery.write(";\nselect * from ").write(rootSchema.getTableName());
531-
sbQuery.write("\nwhere ").write(joinOn);
535+
sbQuery.decTab();
536+
sbQuery.write("\n)");
537+
sbQuery.write("\nselect * from _UPSERT");
532538
return sbQuery.toString();
533539
}
534540

hyperquery/src/main/java/org/slowcoders/hyperquery/impl/jdbc/JdbcSchemaLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private JdbcColumn getColumnByPhysicalName(ArrayList<JdbcColumn> columns, String
176176
public ArrayList<JdbcColumn> getColumns(Connection conn, Map<String, String> comments, TablePath tablePath, List<String> primaryKeys) throws SQLException {
177177
//HashMap<String, JqlIndex> indexes = getUniqueConstraints(conn, dbSchema, tableName);
178178
ArrayList<JdbcColumn> columns = new ArrayList<>();
179-
String sql = "select * from " + tablePath.getQualifiedName() + " " +" limit 1";
179+
String sql = "select * from " + tablePath.getQualifiedName() + " where false";
180180
ResultSet rs = conn.createStatement().executeQuery(sql);
181181
ResultSetMetaData md = rs.getMetaData();
182182
int cntColumn = md.getColumnCount();

hyperquery/src/main/java/org/slowcoders/hyperquery/util/SourceWriter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,16 @@ public Self shrinkLength(int len) {
158158
return (Self)this;
159159
}
160160

161+
public Self trim() {
162+
int len = sb.length();
163+
for (; len > 0; len --) {
164+
char ch = sb.charAt(len - 1);
165+
if (ch > ' ') break;
166+
}
167+
sb.setLength(len);
168+
return (Self)this;
169+
}
170+
161171
public String reset() {
162172
String s = sb.toString();
163173
sb.setLength(0);

sample-app/src/main/resources/logback-spring.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@
6161
</logger>
6262

6363
<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문 출력 -->
64-
<logger name="jdbc.sqlonly" level="DEBUG" additivity="false">
64+
<logger name="jdbc.sqlonly" level="INFO" additivity="false">
6565
<appender-ref ref="STDOUT" />
6666
</logger>
6767

6868
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함하여 출력. -->
69-
<logger name="jdbc.sqltiming" level="INFO" additivity="false">
69+
<logger name="jdbc.sqltiming" level="OFF" additivity="false">
7070
<appender-ref ref="STDOUT" />
7171
</logger>
7272

0 commit comments

Comments
 (0)