| Upsert
- | Replace
@@ -834,65 +831,6 @@ The EBNF and Railroad Diagrams for JSQLParser-|JSQLPARSER_VERSION|.
|
Replace ::= 'REPLACE' 'INTO'? Table ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | ( '(' Column ( ',' Column )* ')' )? ( ( 'VALUES' | 'VALUE' )? '(' PrimaryExpression ( ',' PrimaryExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SubSelect ) ) |
- Referenced by:
- |
Upsert ::= 'UPSERT' 'INTO'? Table ( '(' Column ( ',' Column )* ')' )? ( ( ( 'VALUES' | 'VALUE' )? '(' SimpleExpression ( ',' SimpleExpression )* ( ')' ',' '(' SimpleExpression ( ',' SimpleExpression )* )* | '(' SelectWithWithItems ) ')' | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )?
|
::= ( UserVariable ( '=' | ':=' ) )? ConcatExpression
|
Referenced by:
-
|
Drop ::= 'DROP' ( S_IDENTIFIER | 'TABLE' | 'INDEX' | 'VIEW' | 'SCHEMA' | 'SEQUENCE' | 'FUNCTION' ) ( 'IF' 'EXISTS'
- )? Table FuncArgsList? ( S_IDENTIFIER | 'CASCADE' | 'RESTRICT' | 'ON' )*
|
Nl ::= [#x16EE-#x16F0#x2160-#x2182#x2185-#x2188#x3007#x3021-#x3029#x3038-#x303A#xA6E6-#xA6EF] |
+ Referenced by:
+ |
::= Mn
+ | Mc
+ | Nd
+ | Pc
+ | Cf |
+ Referenced by:
+ |
Cf ::= [#xAD#x600-#x605#x61C#x6DD#x70F#x890-#x891#x8E2#x180E#x200B-#x200F#x202A-#x202E#x2060-#x2064#x2066-#x206F#xFEFF#xFFF9-#xFFFB] |
+ Referenced by:
+ |
Mc ::= [#x903#x93B#x93E-#x940#x949-#x94C#x94E-#x94F#x982-#x983#x9BE-#x9C0#x9C7-#x9C8#x9CB-#x9CC#x9D7#xA03#xA3E-#xA40#xA83#xABE-#xAC0#xAC9#xACB-#xACC#xB02-#xB03#xB3E#xB40#xB47-#xB48#xB4B-#xB4C#xB57#xBBE-#xBBF#xBC1-#xBC2#xBC6-#xBC8#xBCA-#xBCC#xBD7#xC01-#xC03#xC41-#xC44#xC82-#xC83#xCBE#xCC0-#xCC4#xCC7-#xCC8#xCCA-#xCCB#xCD5-#xCD6#xCF3#xD02-#xD03#xD3E-#xD40#xD46-#xD48#xD4A-#xD4C#xD57#xD82-#xD83#xDCF-#xDD1#xDD8-#xDDF#xDF2-#xDF3#xF3E-#xF3F#xF7F#x102B-#x102C#x1031#x1038#x103B-#x103C#x1056-#x1057#x1062-#x1064#x1067-#x106D#x1083-#x1084#x1087-#x108C#x108F#x109A-#x109C#x1715#x1734#x17B6#x17BE-#x17C5#x17C7-#x17C8#x1923-#x1926#x1929-#x192B#x1930-#x1931#x1933-#x1938#x1A19-#x1A1A#x1A55#x1A57#x1A61#x1A63-#x1A64#x1A6D-#x1A72#x1B04#x1B35#x1B3B#x1B3D-#x1B41#x1B43-#x1B44#x1B82#x1BA1#x1BA6-#x1BA7#x1BAA#x1BE7#x1BEA-#x1BEC#x1BEE#x1BF2-#x1BF3#x1C24-#x1C2B#x1C34-#x1C35#x1CE1#x1CF7#x302E-#x302F#xA823-#xA824#xA827#xA880-#xA881#xA8B4-#xA8C3#xA952-#xA953#xA983#xA9B4-#xA9B5#xA9BA-#xA9BB#xA9BE-#xA9C0#xAA2F-#xAA30#xAA33-#xAA34#xAA4D#xAA7B#xAA7D#xAAEB#xAAEE-#xAAEF#xAAF5#xABE3-#xABE4#xABE6-#xABE7#xABE9-#xABEA#xABEC] |
+ Referenced by:
+ |
Mn ::= [#x300-#x36F#x483-#x487#x591-#x5BD#x5BF#x5C1-#x5C2#x5C4-#x5C5#x5C7#x610-#x61A#x64B-#x65F#x670#x6D6-#x6DC#x6DF-#x6E4#x6E7-#x6E8#x6EA-#x6ED#x711#x730-#x74A#x7A6-#x7B0#x7EB-#x7F3#x7FD#x816-#x819#x81B-#x823#x825-#x827#x829-#x82D#x859-#x85B#x898-#x89F#x8CA-#x8E1#x8E3-#x902#x93A#x93C#x941-#x948#x94D#x951-#x957#x962-#x963#x981#x9BC#x9C1-#x9C4#x9CD#x9E2-#x9E3#x9FE#xA01-#xA02#xA3C#xA41-#xA42#xA47-#xA48#xA4B-#xA4D#xA51#xA70-#xA71#xA75#xA81-#xA82#xABC#xAC1-#xAC5#xAC7-#xAC8#xACD#xAE2-#xAE3#xAFA-#xAFF#xB01#xB3C#xB3F#xB41-#xB44#xB4D#xB55-#xB56#xB62-#xB63#xB82#xBC0#xBCD#xC00#xC04#xC3C#xC3E-#xC40#xC46-#xC48#xC4A-#xC4D#xC55-#xC56#xC62-#xC63#xC81#xCBC#xCBF#xCC6#xCCC-#xCCD#xCE2-#xCE3#xD00-#xD01#xD3B-#xD3C#xD41-#xD44#xD4D#xD62-#xD63#xD81#xDCA#xDD2-#xDD4#xDD6#xE31#xE34-#xE3A#xE47-#xE4E#xEB1#xEB4-#xEBC#xEC8-#xECE#xF18-#xF19#xF35#xF37#xF39#xF71-#xF7E#xF80-#xF84#xF86-#xF87#xF8D-#xF97#xF99-#xFBC#xFC6#x102D-#x1030#x1032-#x1037#x1039-#x103A#x103D-#x103E#x1058-#x1059#x105E-#x1060#x1071-#x1074#x1082#x1085-#x1086#x108D#x109D#x135D-#x135F#x1712-#x1714#x1732-#x1733#x1752-#x1753#x1772-#x1773#x17B4-#x17B5#x17B7-#x17BD#x17C6#x17C9-#x17D3#x17DD#x180B-#x180D#x180F#x1885-#x1886#x18A9#x1920-#x1922#x1927-#x1928#x1932#x1939-#x193B#x1A17-#x1A18#x1A1B#x1A56#x1A58-#x1A5E#x1A60#x1A62#x1A65-#x1A6C#x1A73-#x1A7C#x1A7F#x1AB0-#x1ABD#x1ABF-#x1ACE#x1B00-#x1B03#x1B34#x1B36-#x1B3A#x1B3C#x1B42#x1B6B-#x1B73#x1B80-#x1B81#x1BA2-#x1BA5#x1BA8-#x1BA9#x1BAB-#x1BAD#x1BE6#x1BE8-#x1BE9#x1BED#x1BEF-#x1BF1#x1C2C-#x1C33#x1C36-#x1C37#x1CD0-#x1CD2#x1CD4-#x1CE0#x1CE2-#x1CE8#x1CED#x1CF4#x1CF8-#x1CF9#x1DC0-#x1DFF#x20D0-#x20DC#x20E1#x20E5-#x20F0#x2CEF-#x2CF1#x2D7F#x2DE0-#x2DFF#x302A-#x302D#x3099-#x309A#xA66F#xA674-#xA67D#xA69E-#xA69F#xA6F0-#xA6F1#xA802#xA806#xA80B#xA825-#xA826#xA82C#xA8C4-#xA8C5#xA8E0-#xA8F1#xA8FF#xA926-#xA92D#xA947-#xA951#xA980-#xA982#xA9B3#xA9B6-#xA9B9#xA9BC-#xA9BD#xA9E5#xAA29-#xAA2E#xAA31-#xAA32#xAA35-#xAA36#xAA43#xAA4C#xAA7C#xAAB0#xAAB2-#xAAB4#xAAB7-#xAAB8#xAABE-#xAABF#xAAC1#xAAEC-#xAAED#xAAF6#xABE5#xABE8#xABED#xFB1E#xFE00-#xFE0F#xFE20-#xFE2F] |
+ Referenced by:
+ |
Nd ::= [0-9#x660-#x669#x6F0-#x6F9#x7C0-#x7C9#x966-#x96F#x9E6-#x9EF#xA66-#xA6F#xAE6-#xAEF#xB66-#xB6F#xBE6-#xBEF#xC66-#xC6F#xCE6-#xCEF#xD66-#xD6F#xDE6-#xDEF#xE50-#xE59#xED0-#xED9#xF20-#xF29#x1040-#x1049#x1090-#x1099#x17E0-#x17E9#x1810-#x1819#x1946-#x194F#x19D0-#x19D9#x1A80-#x1A89#x1A90-#x1A99#x1B50-#x1B59#x1BB0-#x1BB9#x1C40-#x1C49#x1C50-#x1C59#xA620-#xA629#xA8D0-#xA8D9#xA900-#xA909#xA9D0-#xA9D9#xA9F0-#xA9F9#xAA50-#xAA59#xABF0-#xABF9#xFF10-#xFF19] |
+ Referenced by:
+ |
Pc ::= [#x203F-#x2040#x2054#xFE33-#xFE34#xFE4D-#xFE4F#xFF3F] |
+ Referenced by:
+ |
ESC ::= '\' [ntbrf\"] |
+ Referenced by:
+ |
|
ESC ::= '\' [ntbrf\'"] |
- Referenced by:
- |
null
, otherwise the outcome cannot be compared
+ * empty {@link Collection}'s should be printed as null
, otherwise the outcome
+ * cannot be compared
*/
@Override
- protected void appendDetail(final StringBuffer buffer, final String fieldName, final Collection> coll) {
+ protected void appendDetail(final StringBuffer buffer, final String fieldName,
+ final Collection> coll) {
if (coll.isEmpty()) {
appendNullText(buffer, fieldName);
} else {
@@ -217,10 +271,12 @@ protected void appendDetail(final StringBuffer buffer, final String fieldName, f
}
/**
- * empty {@link Map}'s should be printed as null
, otherwise the outcome cannot be compared
+ * empty {@link Map}'s should be printed as null
, otherwise the outcome cannot
+ * be compared
*/
@Override
- protected void appendDetail(final StringBuffer buffer, final String fieldName, final Map, ?> coll) {
+ protected void appendDetail(final StringBuffer buffer, final String fieldName,
+ final Map, ?> coll) {
if (coll.isEmpty()) {
appendNullText(buffer, fieldName);
} else {
@@ -248,8 +304,8 @@ public boolean isNotANode(Class> clazz) {
*
* @param stmt
* @param statement
- * @param laxDeparsingCheck removes all linefeeds from the original and removes all double spaces. The check is
- * caseinsensitive.
+ * @param laxDeparsingCheck removes all line feeds from the original and removes all double
+ * spaces. The check is case-insensitive.
*/
public static void assertDeparse(Statement stmt, String statement, boolean laxDeparsingCheck) {
StatementDeParser deParser = new StatementDeParser(new StringBuilder());
@@ -268,7 +324,18 @@ public static String buildSqlString(final String originalSql, boolean laxDeparsi
// assure spacing around Syntax Characters
sanitizedSqlStr = SQL_SANITATION_PATTERN2.matcher(sanitizedSqlStr).replaceAll("$1");
- return sanitizedSqlStr.trim().toLowerCase();
+
+ sanitizedSqlStr = sanitizedSqlStr.trim().toLowerCase();
+
+ // Rewrite statement separators "/" and "GO"
+ if (sanitizedSqlStr.endsWith("/")) {
+ sanitizedSqlStr = sanitizedSqlStr.substring(0, sanitizedSqlStr.length() - 1) + ";";
+ } else if (sanitizedSqlStr.endsWith("go")) {
+ sanitizedSqlStr = sanitizedSqlStr.substring(0, sanitizedSqlStr.length() - 2) + ";";
+ }
+
+ return sanitizedSqlStr;
+
} else {
// remove comments only
return SQL_COMMENT_PATTERN.matcher(originalSql).replaceAll("");
@@ -277,7 +344,8 @@ public static String buildSqlString(final String originalSql, boolean laxDeparsi
@Test
public void testBuildSqlString() {
- assertEquals("select col from test", buildSqlString(" SELECT col FROM \r\n \t TEST \n", true));
+ assertEquals("select col from test",
+ buildSqlString(" SELECT col FROM \r\n \t TEST \n", true));
assertEquals("select col from test", buildSqlString("select col from test", false));
}
@@ -292,7 +360,8 @@ public static void assertExpressionCanBeDeparsedAs(final Expression parsed, Stri
assertEquals(expression, stringBuilder.toString());
}
- public static void assertExpressionCanBeParsedAndDeparsed(String expressionStr, boolean laxDeparsingCheck) throws JSQLParserException {
+ public static void assertExpressionCanBeParsedAndDeparsed(String expressionStr,
+ boolean laxDeparsingCheck) throws JSQLParserException {
Expression expression = CCJSqlParserUtil.parseExpression(expressionStr);
assertEquals(buildSqlString(expressionStr, laxDeparsingCheck),
buildSqlString(expression.toString(), laxDeparsingCheck));
diff --git a/src/test/resources/net/sf/jsqlparser/statement/select/large-sql-issue-923-2.txt b/src/test/resources/net/sf/jsqlparser/statement/select/large-sql-issue-923-2.txt
index 080412b8f..45f061cb5 100644
--- a/src/test/resources/net/sf/jsqlparser/statement/select/large-sql-issue-923-2.txt
+++ b/src/test/resources/net/sf/jsqlparser/statement/select/large-sql-issue-923-2.txt
@@ -292,7 +292,6 @@ AP_CLAIMS AS
--MAIN QUERY SELECT STARTS HERE
-
SELECT
--ORIGINAL
@@ -349,7 +348,6 @@ ALL_KINAL_NET_PENALTY,
ALL_KINAL_NET_INTEREST,
ALL_KINAL_STATUS,
-
-- DUP 5
CASE WHEN ALL_KINAL_STATUS = 'CLEAN' THEN NULL ELSE TRIM(REPLACE(ALL_KINAL_EOB,',',''))END AS ALL_KINAL_EOB,
@@ -368,8 +366,6 @@ CRM_SUBTOPIC
,INFO_CODE3
,INFO_CODE3_ENTRY_DATE
-
-
FROM
--MAIN QUERY TABLE BEGINS TEST3