@@ -42,19 +42,26 @@ import org.domaframework.doma.intellij.formatter.block.group.column.SqlColumnRaw
4242import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlInlineGroupBlock
4343import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlInlineSecondGroupBlock
4444import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlJoinGroupBlock
45+ import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlJoinQueriesGroupBlock
4546import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlKeywordGroupBlock
47+ import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlSecondKeywordBlock
48+ import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlSecondOptionKeywordGroupBlock
49+ import org.domaframework.doma.intellij.formatter.block.group.keyword.SqlValuesGroupBlock
4650import org.domaframework.doma.intellij.formatter.block.group.keyword.condition.SqlConditionKeywordGroupBlock
47- import org.domaframework.doma.intellij.formatter.block.group.keyword.condition.SqlConditionalExpressionGroupBlock
4851import org.domaframework.doma.intellij.formatter.block.group.keyword.create.SqlCreateKeywordGroupBlock
4952import org.domaframework.doma.intellij.formatter.block.group.keyword.create.SqlCreateTableColumnDefinitionGroupBlock
5053import org.domaframework.doma.intellij.formatter.block.group.keyword.create.SqlCreateTableColumnDefinitionRawGroupBlock
5154import org.domaframework.doma.intellij.formatter.block.group.keyword.create.SqlCreateViewGroupBlock
5255import org.domaframework.doma.intellij.formatter.block.group.keyword.insert.SqlInsertQueryGroupBlock
56+ import org.domaframework.doma.intellij.formatter.block.group.keyword.top.SqlDeleteQueryGroupBlock
5357import org.domaframework.doma.intellij.formatter.block.group.keyword.top.SqlSelectQueryGroupBlock
5458import org.domaframework.doma.intellij.formatter.block.group.keyword.update.SqlUpdateQueryGroupBlock
5559import org.domaframework.doma.intellij.formatter.block.group.keyword.update.SqlUpdateSetGroupBlock
60+ import org.domaframework.doma.intellij.formatter.block.group.keyword.with.SqlWithCommonTableGroupBlock
61+ import org.domaframework.doma.intellij.formatter.block.group.keyword.with.SqlWithQueryGroupBlock
5662import org.domaframework.doma.intellij.formatter.block.group.subgroup.SqlDataTypeParamBlock
5763import org.domaframework.doma.intellij.formatter.block.group.subgroup.SqlFunctionParamBlock
64+ import org.domaframework.doma.intellij.formatter.block.group.subgroup.SqlSubGroupBlock
5865import org.domaframework.doma.intellij.formatter.block.group.subgroup.SqlSubQueryGroupBlock
5966import org.domaframework.doma.intellij.formatter.builder.SqlCustomSpacingBuilder
6067import org.domaframework.doma.intellij.psi.SqlCustomElCommentExpr
@@ -168,6 +175,12 @@ class SqlBlockUtil(
168175
169176 IndentType .TOP -> {
170177 return when (keywordText) {
178+ " with" ->
179+ SqlWithQueryGroupBlock (
180+ child,
181+ sqlBlockFormattingCtx,
182+ )
183+
171184 " select" ->
172185 SqlSelectQueryGroupBlock (
173186 child,
@@ -198,6 +211,17 @@ class SqlBlockUtil(
198211 sqlBlockFormattingCtx,
199212 )
200213
214+ " delete" ->
215+ SqlDeleteQueryGroupBlock (
216+ child,
217+ sqlBlockFormattingCtx,
218+ )
219+ " union" , " intersect" , " except" ->
220+ SqlJoinQueriesGroupBlock (
221+ child,
222+ sqlBlockFormattingCtx,
223+ )
224+
201225 else ->
202226 SqlKeywordGroupBlock (
203227 child,
@@ -208,17 +232,39 @@ class SqlBlockUtil(
208232 }
209233
210234 IndentType .SECOND -> {
211- return if (keywordText == " set" ) {
212- SqlUpdateSetGroupBlock (
213- child,
214- sqlBlockFormattingCtx,
215- )
216- } else {
217- SqlKeywordGroupBlock (
218- child,
219- indentLevel,
220- sqlBlockFormattingCtx,
221- )
235+ return when (keywordText) {
236+ " set" -> {
237+ if (lastGroupBlock is SqlUpdateQueryGroupBlock ) {
238+ SqlUpdateSetGroupBlock (
239+ child,
240+ sqlBlockFormattingCtx,
241+ )
242+ } else {
243+ WithClauseUtil
244+ .getWithClauseKeywordGroup(lastGroupBlock, child, sqlBlockFormattingCtx)
245+ ?.let { return it }
246+ return SqlSecondKeywordBlock (
247+ child,
248+ sqlBlockFormattingCtx,
249+ )
250+ }
251+ }
252+
253+ " values" ->
254+ SqlValuesGroupBlock (
255+ child,
256+ sqlBlockFormattingCtx,
257+ )
258+
259+ else -> {
260+ WithClauseUtil
261+ .getWithClauseKeywordGroup(lastGroupBlock, child, sqlBlockFormattingCtx)
262+ ?.let { return it }
263+ SqlSecondKeywordBlock (
264+ child,
265+ sqlBlockFormattingCtx,
266+ )
267+ }
222268 }
223269 }
224270
@@ -234,9 +280,8 @@ class SqlBlockUtil(
234280 sqlBlockFormattingCtx,
235281 )
236282 } else {
237- SqlKeywordGroupBlock (
283+ SqlSecondOptionKeywordGroupBlock (
238284 child,
239- indentLevel,
240285 sqlBlockFormattingCtx,
241286 )
242287 }
@@ -272,21 +317,16 @@ class SqlBlockUtil(
272317 lastGroup : SqlBlock ? ,
273318 child : ASTNode ,
274319 ): SqlBlock {
275- if (PsiTreeUtil .prevLeaf(child.psi)?.elementType == SqlTypes .WORD ) {
276- return SqlFunctionParamBlock (child, sqlBlockFormattingCtx)
277- }
278-
279320 when (lastGroup) {
280321 is SqlKeywordGroupBlock -> {
281- // List-type test data for IN clause
282- NotQueryGroupUtil
283- .getSubGroup(lastGroup, child, sqlBlockFormattingCtx)
284- ?.let { return it }
285-
286322 CreateTableUtil
287323 .getCreateTableClauseSubGroup(lastGroup, child, sqlBlockFormattingCtx)
288324 ?.let { return it }
289325
326+ WithClauseUtil
327+ .getWithClauseSubGroup(lastGroup, child, sqlBlockFormattingCtx)
328+ ?.let { return it }
329+
290330 InsertClauseUtil
291331 .getInsertClauseSubGroup(lastGroup, child, sqlBlockFormattingCtx)
292332 ?.let { return it }
@@ -298,21 +338,30 @@ class SqlBlockUtil(
298338 sqlBlockFormattingCtx,
299339 )?.let { return it }
300340
301- if (lastGroup is SqlConditionKeywordGroupBlock ) {
302- return SqlConditionalExpressionGroupBlock (
303- child,
304- sqlBlockFormattingCtx,
305- )
306- }
341+ // List-type test data for IN clause
342+ NotQueryGroupUtil
343+ .getSubGroup(lastGroup, child, sqlBlockFormattingCtx)
344+ ?.let { return it }
307345
308346 return SqlSubQueryGroupBlock (child, sqlBlockFormattingCtx)
309347 }
310348
311349 is SqlColumnDefinitionRawGroupBlock ->
312350 return SqlDataTypeParamBlock (child, sqlBlockFormattingCtx)
313351
314- else ->
352+ else -> {
353+ if (lastGroup is SqlSubGroupBlock ) {
354+ WithClauseUtil
355+ .getWithClauseSubGroup(lastGroup, child, sqlBlockFormattingCtx)
356+ ?.let { return it }
357+ }
358+
359+ if (PsiTreeUtil .prevLeaf(child.psi)?.elementType == SqlTypes .WORD ) {
360+ return SqlFunctionParamBlock (child, sqlBlockFormattingCtx)
361+ }
362+
315363 return SqlSubQueryGroupBlock (child, sqlBlockFormattingCtx)
364+ }
316365 }
317366 }
318367
@@ -333,6 +382,8 @@ class SqlBlockUtil(
333382 }
334383 }
335384
385+ is SqlWithCommonTableGroupBlock -> SqlWithCommonTableGroupBlock (child, sqlBlockFormattingCtx)
386+
336387 else -> SqlCommaBlock (child, sqlBlockFormattingCtx)
337388 }
338389 }
@@ -351,6 +402,8 @@ class SqlBlockUtil(
351402 )
352403 }
353404
405+ lastGroup is SqlWithQueryGroupBlock -> SqlWithCommonTableGroupBlock (child, sqlBlockFormattingCtx)
406+
354407 else -> SqlWordBlock (child, sqlBlockFormattingCtx)
355408 }
356409 }
0 commit comments