Skip to content

Commit d807a2d

Browse files
refactor sql formatter
1 parent dff1628 commit d807a2d

File tree

3 files changed

+30
-68
lines changed

3 files changed

+30
-68
lines changed

ktorm-core/src/main/kotlin/org/ktorm/expression/SqlFormatter.kt

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -540,36 +540,38 @@ public abstract class SqlFormatter(
540540
override fun visitInsert(expr: InsertExpression): InsertExpression {
541541
writeKeyword("insert into ")
542542
visitTable(expr.table)
543-
write("(")
544-
545-
for ((i, assignment) in expr.assignments.withIndex()) {
546-
if (i > 0) write(", ")
547-
checkColumnName(assignment.column.name)
548-
write(assignment.column.name.quoted)
549-
}
550-
551-
writeKeyword(") values (")
552-
visitExpressionList(expr.assignments.map { it.expression as ArgumentExpression })
553-
removeLastBlank()
554-
write(") ")
543+
writeInsertColumnNames(expr.assignments.map { it.column })
544+
writeKeyword("values ")
545+
writeInsertValues(expr.assignments)
555546
return expr
556547
}
557548

558549
override fun visitInsertFromQuery(expr: InsertFromQueryExpression): InsertFromQueryExpression {
559550
writeKeyword("insert into ")
560551
visitTable(expr.table)
552+
writeInsertColumnNames(expr.columns)
553+
newLine(Indentation.SAME)
554+
visitQuery(expr.query)
555+
return expr
556+
}
557+
558+
protected fun writeInsertColumnNames(columns: List<ColumnExpression<*>>) {
561559
write("(")
562560

563-
for ((i, column) in expr.columns.withIndex()) {
561+
for ((i, column) in columns.withIndex()) {
564562
if (i > 0) write(", ")
565563
checkColumnName(column.name)
566564
write(column.name.quoted)
567565
}
568566

569567
write(") ")
570-
newLine(Indentation.SAME)
571-
visitQuery(expr.query)
572-
return expr
568+
}
569+
570+
protected fun writeInsertValues(assignments: List<ColumnAssignmentExpression<*>>) {
571+
write("(")
572+
visitExpressionList(assignments.map { it.expression as ArgumentExpression })
573+
removeLastBlank()
574+
write(") ")
573575
}
574576

575577
override fun visitUpdate(expr: UpdateExpression): UpdateExpression {

ktorm-support-mysql/src/main/kotlin/org/ktorm/support/mysql/MySqlDialect.kt

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,9 @@ public open class MySqlFormatter(
7777
protected open fun visitInsertOrUpdate(expr: InsertOrUpdateExpression): InsertOrUpdateExpression {
7878
writeKeyword("insert into ")
7979
visitTable(expr.table)
80-
write("(")
81-
82-
for ((i, assignment) in expr.assignments.withIndex()) {
83-
if (i > 0) write(", ")
84-
checkColumnName(assignment.column.name)
85-
write(assignment.column.name.quoted)
86-
}
87-
88-
writeKeyword(") values ")
89-
writeValues(expr.assignments)
80+
writeInsertColumnNames(expr.assignments.map { it.column })
81+
writeKeyword("values ")
82+
writeInsertValues(expr.assignments)
9083

9184
if (expr.updateAssignments.isNotEmpty()) {
9285
writeKeyword("on duplicate key update ")
@@ -99,22 +92,15 @@ public open class MySqlFormatter(
9992
protected open fun visitBulkInsert(expr: BulkInsertExpression): BulkInsertExpression {
10093
writeKeyword("insert into ")
10194
visitTable(expr.table)
102-
write("(")
103-
104-
for ((i, assignment) in expr.assignments[0].withIndex()) {
105-
if (i > 0) write(", ")
106-
checkColumnName(assignment.column.name)
107-
write(assignment.column.name.quoted)
108-
}
109-
110-
writeKeyword(") values ")
95+
writeInsertColumnNames(expr.assignments[0].map { it.column })
96+
writeKeyword("values ")
11197

11298
for ((i, assignments) in expr.assignments.withIndex()) {
11399
if (i > 0) {
114100
removeLastBlank()
115101
write(", ")
116102
}
117-
writeValues(assignments)
103+
writeInsertValues(assignments)
118104
}
119105

120106
if (expr.updateAssignments.isNotEmpty()) {
@@ -125,13 +111,6 @@ public open class MySqlFormatter(
125111
return expr
126112
}
127113

128-
private fun writeValues(assignments: List<ColumnAssignmentExpression<*>>) {
129-
write("(")
130-
visitExpressionList(assignments.map { it.expression as ArgumentExpression })
131-
removeLastBlank()
132-
write(") ")
133-
}
134-
135114
protected open fun visitNaturalJoin(expr: NaturalJoinExpression): NaturalJoinExpression {
136115
visitQuerySource(expr.left)
137116
newLine(Indentation.SAME)

ktorm-support-postgresql/src/main/kotlin/org/ktorm/support/postgresql/PostgreSqlDialect.kt

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,13 @@ public open class PostgreSqlFormatter(
149149
protected open fun visitInsertOrUpdate(expr: InsertOrUpdateExpression): InsertOrUpdateExpression {
150150
writeKeyword("insert into ")
151151
visitTable(expr.table)
152-
writeColumnNames(expr.assignments.map { it.column })
152+
writeInsertColumnNames(expr.assignments.map { it.column })
153153
writeKeyword("values ")
154-
writeValues(expr.assignments)
154+
writeInsertValues(expr.assignments)
155155

156156
if (expr.updateAssignments.isNotEmpty()) {
157157
writeKeyword("on conflict ")
158-
writeColumnNames(expr.conflictColumns)
158+
writeInsertColumnNames(expr.conflictColumns)
159159
writeKeyword("do update set ")
160160
visitColumnAssignments(expr.updateAssignments)
161161
}
@@ -166,45 +166,26 @@ public open class PostgreSqlFormatter(
166166
protected open fun visitBulkInsert(expr: BulkInsertExpression): BulkInsertExpression {
167167
writeKeyword("insert into ")
168168
visitTable(expr.table)
169-
writeColumnNames(expr.assignments[0].map { it.column })
169+
writeInsertColumnNames(expr.assignments[0].map { it.column })
170170
writeKeyword("values ")
171171

172172
for ((i, assignments) in expr.assignments.withIndex()) {
173173
if (i > 0) {
174174
removeLastBlank()
175175
write(", ")
176176
}
177-
writeValues(assignments)
177+
writeInsertValues(assignments)
178178
}
179179

180180
if (expr.updateAssignments.isNotEmpty()) {
181181
writeKeyword("on conflict ")
182-
writeColumnNames(expr.conflictColumns)
182+
writeInsertColumnNames(expr.conflictColumns)
183183
writeKeyword("do update set ")
184184
visitColumnAssignments(expr.updateAssignments)
185185
}
186186

187187
return expr
188188
}
189-
190-
private fun writeColumnNames(columns: List<ColumnExpression<*>>) {
191-
write("(")
192-
193-
for ((i, column) in columns.withIndex()) {
194-
if (i > 0) write(", ")
195-
checkColumnName(column.name)
196-
write(column.name.quoted)
197-
}
198-
199-
write(") ")
200-
}
201-
202-
private fun writeValues(assignments: List<ColumnAssignmentExpression<*>>) {
203-
write("(")
204-
visitExpressionList(assignments.map { it.expression as ArgumentExpression })
205-
removeLastBlank()
206-
write(") ")
207-
}
208189
}
209190

210191
/**

0 commit comments

Comments
 (0)