Skip to content

Commit aff3362

Browse files
Merge pull request #47 from vertical-blank/fix-quote-operator
fix quote operator and test
2 parents cea92a6 + 8bcdba5 commit aff3362

File tree

2 files changed

+21
-9
lines changed
  • src
    • main/java/com/github/vertical_blank/sqlformatter/languages
    • test/kotlin/com/github/vertical_blank/sqlformatter/features

2 files changed

+21
-9
lines changed

src/main/java/com/github/vertical_blank/sqlformatter/languages/StringLiteral.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@ private enum Preset {
5151
/** q'' */
5252
Q_SINGLE_QUOTE(
5353
StringLiteral.Q_SINGLE_QUOTE,
54-
"(?i)((n?q'\\[.*($|\\]'))+)|((n?q'\\{.*($|\\}'))+)|((n?q'\\<.*($|\\>'))+)|((n?q'\\(.*($|\\)'))+)"),
54+
"(?i)"
55+
+ String.join(
56+
"|",
57+
"((n?q'\\{(?:(?!\\}'|\\\\).)*\\}')+)",
58+
"((n?q'\\[(?:(?!\\]'|\\\\).)*\\]')+)",
59+
"((n?q'<(?:(?!>'|\\\\).)*>')+)",
60+
"((n?q'\\((?:(?!\\)'|\\\\).)*\\)')+)")),
5561
// single_quote("((^'((?:''|[^'])*)')+)"),
5662
E_SINGLE_QUOTE(StringLiteral.E_SINGLE_QUOTE, "((E'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"),
5763
/** U&amp;'' */

src/test/kotlin/com/github/vertical_blank/sqlformatter/features/Strings.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,20 @@ fun Suite.supportsStrings(formatter: SqlFormatter.Formatter, stringTypes: List<S
6868

6969
if (stringTypes.contains(StringLiteral.Q_SINGLE_QUOTE)) {
7070
it("supports Oracle quotation operator") {
71-
expect(format("Q'[I'm boy]'")).toBe("Q'[I'm boy]'")
72-
expect(format("Q'{I'm boy}'")).toBe("Q'{I'm boy}'")
73-
expect(format("Q'<I'm boy>'")).toBe("Q'<I'm boy>'")
74-
expect(format("Q'(I'm boy)'")).toBe("Q'(I'm boy)'")
75-
expect(format("NQ'[I'm boy]'")).toBe("NQ'[I'm boy]'")
76-
expect(format("NQ'{I'm boy}'")).toBe("NQ'{I'm boy}'")
77-
expect(format("NQ'<I'm boy>'")).toBe("NQ'<I'm boy>'")
78-
expect(format("NQ'(I'm boy)'")).toBe("NQ'(I'm boy)'")
71+
expect(format("Q'[I'm boy]',Q'{I'm boy}',Q'<I'm boy>',Q'(I'm boy)',1"))
72+
.toBe(
73+
"""Q'[I'm boy]',
74+
|Q'{I'm boy}',
75+
|Q'<I'm boy>',
76+
|Q'(I'm boy)',
77+
|1""".trimMargin())
78+
expect(format("NQ'[I'm boy]',NQ'{I'm boy}',NQ'<I'm boy>',NQ'(I'm boy)',1"))
79+
.toBe(
80+
"""NQ'[I'm boy]',
81+
|NQ'{I'm boy}',
82+
|NQ'<I'm boy>',
83+
|NQ'(I'm boy)',
84+
|1""".trimMargin())
7985
}
8086
}
8187
}

0 commit comments

Comments
 (0)