[jOOQ/jOOQ#12501] Added ParserCLI support for

Settings.parseUnsupportedSyntax etc.
This commit is contained in:
Lukas Eder 2021-10-18 18:05:23 +02:00
parent b1b58541a2
commit 8aa2189316

View File

@ -45,6 +45,9 @@ import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jooq.conf.ParseNameCase;
import org.jooq.conf.ParseUnknownFunctions;
import org.jooq.conf.ParseUnsupportedSyntax;
import org.jooq.conf.RenderKeywordCase;
import org.jooq.conf.RenderNameCase;
import org.jooq.conf.RenderOptionalKeyword;
@ -103,12 +106,16 @@ public final class ParserCLI {
settings.setRenderQuotedNames(a.quoted);
if (a.fromDialect != null)
settings.setParseDialect(a.fromDialect);
if (a.parseLocale != null)
settings.setParseLocale(a.parseLocale);
if (a.parseDateFormat != null)
settings.setParseDateFormat(a.parseDateFormat);
if (a.parseLocale != null)
settings.setParseLocale(a.parseLocale);
if (a.parseNameCase != null)
settings.setParseNameCase(a.parseNameCase);
if (a.parseTimestampFormat != null)
settings.setParseTimestampFormat(a.parseTimestampFormat);
if (a.parseUnknownFunctions != null)
settings.setParseUnknownFunctions(a.parseUnknownFunctions);
if (a.renderCoalesceToEmptyStringInConcat)
settings.setRenderCoalesceToEmptyStringInConcat(true);
if (a.renderOptionalInnerKeyword != null)
@ -131,10 +138,17 @@ public final class ParserCLI {
settings.setTransformRownum(a.transformRownum);
}
private static final <E extends Enum<E>> void parseInteractive(Class<E> type, String arg, Consumer<? super E> onSuccess) {
private static final <E extends Enum<E>> void parseInteractive(
Class<E> type,
String arg,
Consumer<? super E> onSuccess,
Runnable display
) {
try {
if (arg != null)
onSuccess.accept(Enum.valueOf(type, arg.toUpperCase()));
display.run();
}
catch (IllegalArgumentException e) {
invalid(arg, type);
@ -179,45 +193,51 @@ public final class ParserCLI {
displayFormatted(a);
}
else if ("k".equals(flag) || "keyword".equals(flag))
parseInteractive(RenderKeywordCase.class, arg, e -> { a.keywords = e; displayKeywords(a); });
parseInteractive(RenderKeywordCase.class, arg, e -> { a.keywords = e; }, () -> displayKeywords(a));
else if ("i".equals(flag) || "identifier".equals(flag))
parseInteractive(RenderNameCase.class, arg, e -> { a.name = e; displayIdentifiers(a); });
parseInteractive(RenderNameCase.class, arg, e -> { a.name = e; }, () -> displayIdentifiers(a));
else if ("Q".equals(flag) || "quoted".equals(flag))
parseInteractive(RenderQuotedNames.class, arg, e -> { a.quoted = e; displayQuoted(a); });
parseInteractive(RenderQuotedNames.class, arg, e -> { a.quoted = e; }, () -> displayQuoted(a));
else if ("F".equals(flag) || "from-dialect".equals(flag))
parseInteractive(SQLDialect.class, arg, e -> { a.fromDialect = e; displayFromDialect(a); });
parseInteractive(SQLDialect.class, arg, e -> { a.fromDialect = e; }, () -> displayFromDialect(a));
else if ("render-coalesce-to-empty-string-in-concat".equals(flag)) {
if (arg != null)
a.renderCoalesceToEmptyStringInConcat = Boolean.parseBoolean(arg.toLowerCase());
displayRenderCoalesceToEmptyStringInConcat(a);
}
else if ("parse-locale".equals(flag)) {
if (arg != null)
a.parseLocale = Locale.forLanguageTag(arg);
displayParseLocale(a);
}
else if ("parse-date-format".equals(flag)) {
if (arg != null)
a.parseDateFormat = arg;
displayParseDateFormat(a);
}
else if ("parse-locale".equals(flag)) {
if (arg != null)
a.parseLocale = Locale.forLanguageTag(arg);
displayParseLocale(a);
}
else if ("parse-name-case".equals(flag))
parseInteractive(ParseNameCase.class, arg, e -> { a.parseNameCase = e; }, () -> displayParseNameCase(a));
else if ("parse-timestamp-format".equals(flag)) {
if (arg != null)
a.parseTimestampFormat = arg;
displayParseTimestampFormat(a);
}
else if ("parse-unknown-functions".equals(flag))
parseInteractive(ParseUnknownFunctions.class, arg, e -> { a.parseUnknownFunctions = e; }, () -> displayParseUnknownFunctions(a));
else if ("parse-unsupported-syntax".equals(flag))
parseInteractive(ParseUnsupportedSyntax.class, arg, e -> { a.parseUnsupportedSyntax = e; }, () -> displayParseUnsupportedSyntax(a));
else if ("render-optional-inner-keyword".equals(flag))
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalInnerKeyword = e; displayRenderOptionalInnerKeyword(a); });
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalInnerKeyword = e; }, () -> displayRenderOptionalInnerKeyword(a));
else if ("render-optional-outer-keyword".equals(flag))
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalOuterKeyword = e; displayRenderOptionalOuterKeyword(a); });
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalOuterKeyword = e; }, () -> displayRenderOptionalOuterKeyword(a));
else if ("render-optional-as-keyword-for-field-aliases".equals(flag))
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalAsKeywordForFieldAliases = e; displayRenderOptionalAsKeywordForFieldAliases(a); });
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalAsKeywordForFieldAliases = e; }, () -> displayRenderOptionalAsKeywordForFieldAliases(a));
else if ("render-optional-as-keyword-for-table-aliases".equals(flag))
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalAsKeywordForTableAliases = e; displayRenderOptionalAsKeywordForTableAliases(a); });
parseInteractive(RenderOptionalKeyword.class, arg, e -> { a.renderOptionalAsKeywordForTableAliases = e; }, () -> displayRenderOptionalAsKeywordForTableAliases(a));
else if ("transform-ansi-join-to-table-lists".equals(flag)) {
if (arg != null)
a.transformAnsiJoinToTableLists = Boolean.parseBoolean(arg.toLowerCase());
@ -225,9 +245,9 @@ public final class ParserCLI {
displayTransformAnsiJoinToTablesLists(a);
}
else if ("transform-qualify".equals(flag))
parseInteractive(Transformation.class, arg, e -> { a.transformQualify = e; displayTransformQualify(a); });
parseInteractive(Transformation.class, arg, e -> { a.transformQualify = e; }, () -> displayTransformQualify(a));
else if ("transform-rownum".equals(flag))
parseInteractive(Transformation.class, arg, e -> { a.transformRownum = e; displayTransformRownum(a); });
parseInteractive(Transformation.class, arg, e -> { a.transformRownum = e; }, () -> displayTransformRownum(a));
else if ("transform-table-lists-to-ansi-join".equals(flag)) {
if (arg != null)
a.transformTableListsToAnsiJoin = Boolean.parseBoolean(arg.toLowerCase());
@ -235,11 +255,11 @@ public final class ParserCLI {
displayTransformTableListsToAnsiJoin(a);
}
else if ("transform-unneeded-arithmetic".equals(flag))
parseInteractive(TransformUnneededArithmeticExpressions.class, arg, e -> { a.transformUnneededArithmetic = e; displayTransformUnneededArithmetic(a); });
parseInteractive(TransformUnneededArithmeticExpressions.class, arg, e -> { a.transformUnneededArithmetic = e; }, () -> { displayTransformUnneededArithmetic(a); });
// [#9144] /t maintained for backwards compatibility
else if ("t".equals(flag) || "T".equals(flag) || "to-dialect".equals(flag))
parseInteractive(SQLDialect.class, arg, e -> { a.toDialect = e; displayToDialect(a); });
parseInteractive(SQLDialect.class, arg, e -> { a.toDialect = e; }, () -> displayToDialect(a));
}
}
else {
@ -308,18 +328,30 @@ public final class ParserCLI {
System.out.println("Formatted : " + a.formatted);
}
private static void displayParseLocale(Args a) {
System.out.println("Parse locale : " + a.parseLocale);
}
private static void displayParseDateFormat(Args a) {
System.out.println("Parse date format : " + a.parseDateFormat);
}
private static void displayParseNameCase(Args a) {
System.out.println("Parse name case : " + a.parseNameCase);
}
private static void displayParseLocale(Args a) {
System.out.println("Parse locale : " + a.parseLocale);
}
private static void displayParseTimestampFormat(Args a) {
System.out.println("Parse timestamp format : " + a.parseTimestampFormat);
}
private static void displayParseUnknownFunctions(Args a) {
System.out.println("Parse unknown functions : " + a.parseUnknownFunctions);
}
private static void displayParseUnsupportedSyntax(Args a) {
System.out.println("Parse unsupported syntax : " + a.parseUnsupportedSyntax);
}
private static void displayRenderCoalesceToEmptyStringInConcat(Args a) {
System.out.println("Render COALESCE(X, '') in CONCAT : " + a.renderCoalesceToEmptyStringInConcat);
}
@ -421,12 +453,18 @@ public final class ParserCLI {
// [#9144] -t maintained for backwards compatibility
else if ("-t".equals(args[i]) || "-T".equals(args[i]) || "--to-dialect".equals(args[i]))
result.toDialect = parse((Class<SQLDialect>) (enumArgument = SQLDialect.class), args[++i]);
else if ("--parse-locale".equals(args[i]))
result.parseLocale = Locale.forLanguageTag(args[++i]);
else if ("--parse-date-format".equals(args[i]))
result.parseDateFormat = args[++i];
else if ("--parse-locale".equals(args[i]))
result.parseLocale = Locale.forLanguageTag(args[++i]);
else if ("--parse-name-case".equals(args[i]))
result.parseNameCase = parse((Class<ParseNameCase>) (enumArgument = ParseNameCase.class), args[++i]);
else if ("--parse-timestamp-format".equals(args[i]))
result.parseTimestampFormat = args[++i];
else if ("--parse-unknown-functions".equals(args[i]))
result.parseUnknownFunctions = parse((Class<ParseUnknownFunctions>) (enumArgument = ParseUnknownFunctions.class), args[++i]);
else if ("--parse-unsupported-syntax".equals(args[i]))
result.parseUnsupportedSyntax = parse((Class<ParseUnsupportedSyntax>) (enumArgument = ParseUnsupportedSyntax.class), args[++i]);
else if ("--render-coalesce-to-empty-string-in-concat".equals(args[i]))
result.renderCoalesceToEmptyStringInConcat = true;
else if ("--render-optional-inner-keyword".equals(args[i]))
@ -491,7 +529,10 @@ public final class ParserCLI {
System.out.println("Additional flags:");
System.out.println(" --parse-date-format <String>");
System.out.println(" --parse-locale <Locale>");
System.out.println(" --parse-name-case <ParseNameCase>");
System.out.println(" --parse-timestamp-format <String>");
System.out.println(" --parse-unknown-functions <ParseUnknownFunctions>");
System.out.println(" --parse-unsupported-syntax <ParseUnsupportedSyntax>");
System.out.println(" --render-optional-inner-keyword <RenderOptionalKeyword>");
System.out.println(" --render-optional-outer-keyword <RenderOptionalKeyword>");
System.out.println(" --render-optional-as-keyword-for-field-aliases <RenderOptionalKeyword>");
@ -523,7 +564,10 @@ public final class ParserCLI {
System.out.println("Additional flags:");
System.out.println(" /parse-date-format <String>");
System.out.println(" /parse-locale <Locale>");
System.out.println(" /parse-name-case <ParseNameCase>");
System.out.println(" /parse-timestamp-format <String>");
System.out.println(" /parse-unknown-functions <ParseUnknownFunctions>");
System.out.println(" /parse-unsupported-syntax <ParseUnsupportedSyntax>");
System.out.println(" /render-optional-inner-keyword <RenderOptionalKeyword>");
System.out.println(" /render-optional-outer-keyword <RenderOptionalKeyword>");
System.out.println(" /render-optional-as-keyword-for-field-aliases <RenderOptionalKeyword>");
@ -558,9 +602,12 @@ public final class ParserCLI {
RenderOptionalKeyword renderOptionalOuterKeyword = RenderOptionalKeyword.DEFAULT;
RenderOptionalKeyword renderOptionalAsKeywordForFieldAliases = RenderOptionalKeyword.DEFAULT;
RenderOptionalKeyword renderOptionalAsKeywordForTableAliases = RenderOptionalKeyword.DEFAULT;
Locale parseLocale = d.getParseLocale();
String parseDateFormat = d.getParseDateFormat();
Locale parseLocale = d.getParseLocale();
ParseNameCase parseNameCase = d.getParseNameCase();
String parseTimestampFormat = d.getParseTimestampFormat();
ParseUnknownFunctions parseUnknownFunctions = d.getParseUnknownFunctions();
ParseUnsupportedSyntax parseUnsupportedSyntax = d.getParseUnsupportedSyntax();
boolean transformAnsiJoinToTableLists;
Transformation transformQualify;
Transformation transformRownum;