Skip to content

Commit cea92a6

Browse files
Merge pull request #46 from vertical-blank/oracle-quotation-operator
Oracle quotation operator
2 parents ce91c60 + 6fb6753 commit cea92a6

File tree

4 files changed

+23
-1
lines changed

4 files changed

+23
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ public DialectConfig dialectConfig() {
434434
Arrays.asList(
435435
StringLiteral.DOUBLE_QUOTE,
436436
StringLiteral.N_SINGLE_QUOTE,
437+
StringLiteral.Q_SINGLE_QUOTE,
437438
StringLiteral.SINGLE_QUOTE,
438439
StringLiteral.BACK_QUOTE))
439440
.openParens(Arrays.asList("(", "CASE"))

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class StringLiteral {
1212
public static final String U_SINGLE_QUOTE = "U&''";
1313
public static final String E_SINGLE_QUOTE = "E''";
1414
public static final String N_SINGLE_QUOTE = "N''";
15+
public static final String Q_SINGLE_QUOTE = "Q''";
1516
public static final String SINGLE_QUOTE = "''";
1617
public static final String BRACE = "{}";
1718
public static final String DOLLAR = "$$";
@@ -47,6 +48,10 @@ private enum Preset {
4748
"(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"), // "((^'((?:''|[^'])*)')+)"),
4849
/** N'' */
4950
N_SINGLE_QUOTE(StringLiteral.N_SINGLE_QUOTE, "((N'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"),
51+
/** q'' */
52+
Q_SINGLE_QUOTE(
53+
StringLiteral.Q_SINGLE_QUOTE,
54+
"(?i)((n?q'\\[.*($|\\]'))+)|((n?q'\\{.*($|\\}'))+)|((n?q'\\<.*($|\\>'))+)|((n?q'\\(.*($|\\)'))+)"),
5055
// single_quote("((^'((?:''|[^'])*)')+)"),
5156
E_SINGLE_QUOTE(StringLiteral.E_SINGLE_QUOTE, "((E'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)"),
5257
/** U&amp;'' */

src/test/kotlin/com/github/vertical_blank/sqlformatter/PlSqlFormatterTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ object PlSqlFormatterTest :
2828
supportsStrings(
2929
formatter,
3030
listOf(
31-
StringLiteral.DOUBLE_QUOTE, StringLiteral.SINGLE_QUOTE, StringLiteral.BACK_QUOTE))
31+
StringLiteral.DOUBLE_QUOTE,
32+
StringLiteral.SINGLE_QUOTE,
33+
StringLiteral.BACK_QUOTE,
34+
StringLiteral.Q_SINGLE_QUOTE))
3235
supportsBetween(formatter)
3336
supportsSchema(formatter)
3437
supportsOperators(formatter, listOf("||", "**", "!=", ":="))

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,18 @@ fun Suite.supportsStrings(formatter: SqlFormatter.Formatter, stringTypes: List<S
6565
expect(format("N'foo \\' JOIN bar'")).toBe("N'foo \\' JOIN bar'")
6666
}
6767
}
68+
69+
if (stringTypes.contains(StringLiteral.Q_SINGLE_QUOTE)) {
70+
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)'")
79+
}
80+
}
6881
}
6982
}

0 commit comments

Comments
 (0)