[jOOQ/jOOQ#11918] Add Settings.renderOptionalXYZ support to ParserCLI

This commit is contained in:
Lukas Eder 2021-05-27 14:41:35 +02:00
parent 516fa206af
commit c6a3a7f08d
2 changed files with 109 additions and 75 deletions

View File

@ -45,6 +45,7 @@ import java.util.regex.Pattern;
import org.jooq.conf.RenderKeywordCase;
import org.jooq.conf.RenderNameCase;
import org.jooq.conf.RenderOptionalKeyword;
import org.jooq.conf.RenderQuotedNames;
import org.jooq.conf.Settings;
import org.jooq.conf.TransformUnneededArithmeticExpressions;
@ -101,6 +102,14 @@ public final class ParserCLI {
settings.setParseDialect(a.fromDialect);
if (a.renderCoalesceToEmptyStringInConcat)
settings.setRenderCoalesceToEmptyStringInConcat(true);
if (a.renderOptionalInnerKeyword != null)
settings.setRenderOptionalInnerKeyword(a.renderOptionalInnerKeyword);
if (a.renderOptionalOuterKeyword != null)
settings.setRenderOptionalOuterKeyword(a.renderOptionalOuterKeyword);
if (a.renderOptionalAsKeywordForFieldAliases != null)
settings.setRenderOptionalAsKeywordForFieldAliases(a.renderOptionalAsKeywordForFieldAliases);
if (a.renderOptionalAsKeywordForTableAliases != null)
settings.setRenderOptionalAsKeywordForTableAliases(a.renderOptionalAsKeywordForTableAliases);
if (a.transformAnsiJoinToTableLists)
settings.setTransformAnsiJoinToTableLists(true);
if (a.transformTableListsToAnsiJoin)
@ -166,50 +175,50 @@ public final class ParserCLI {
displayFormatted(a);
}
else if ("k".equals(flag) || "keyword".equals(flag)) {
else if ("k".equals(flag) || "keyword".equals(flag))
a.keywords = parseInteractive(RenderKeywordCase.class, a.keywords, arg, () -> displayKeywords(a));
}
else if ("i".equals(flag) || "identifier".equals(flag)) {
else if ("i".equals(flag) || "identifier".equals(flag))
a.name = parseInteractive(RenderNameCase.class, a.name, arg, () -> displayIdentifiers(a));
}
else if ("Q".equals(flag) || "quoted".equals(flag)) {
else if ("Q".equals(flag) || "quoted".equals(flag))
a.quoted = parseInteractive(RenderQuotedNames.class, a.quoted, arg, () -> displayQuoted(a));
}
else if ("F".equals(flag) || "from-dialect".equals(flag)) {
else if ("F".equals(flag) || "from-dialect".equals(flag))
a.fromDialect = parseInteractive(SQLDialect.class, a.fromDialect, arg, () -> 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 ("render-optional-inner-keyword".equals(flag))
a.renderOptionalInnerKeyword = parseInteractive(RenderOptionalKeyword.class, a.renderOptionalInnerKeyword, arg, () -> displayRenderOptionalInnerKeyword(a));
else if ("render-optional-outer-keyword".equals(flag))
a.renderOptionalOuterKeyword = parseInteractive(RenderOptionalKeyword.class, a.renderOptionalOuterKeyword, arg, () -> displayRenderOptionalOuterKeyword(a));
else if ("render-optional-as-keyword-for-field-aliases".equals(flag))
a.renderOptionalAsKeywordForFieldAliases = parseInteractive(RenderOptionalKeyword.class, a.renderOptionalAsKeywordForFieldAliases, arg, () -> displayRenderOptionalAsKeywordForFieldAliases(a));
else if ("render-optional-as-keyword-for-table-aliases".equals(flag))
a.renderOptionalAsKeywordForTableAliases = parseInteractive(RenderOptionalKeyword.class, a.renderOptionalAsKeywordForTableAliases, arg, () -> displayRenderOptionalAsKeywordForTableAliases(a));
else if ("transform-ansi-join-to-table-lists".equals(flag)) {
if (arg != null)
a.transformAnsiJoinToTableLists = Boolean.parseBoolean(arg.toLowerCase());
displayTransformAnsiJoinToTablesLists(a);
}
else if ("transform-qualify".equals(flag)) {
else if ("transform-qualify".equals(flag))
a.transformQualify = parseInteractive(Transformation.class, a.transformQualify, arg, () -> displayTransformQualify(a));
}
else if ("transform-rownum".equals(flag)) {
else if ("transform-rownum".equals(flag))
a.transformRownum = parseInteractive(Transformation.class, a.transformRownum, arg, () -> displayTransformRownum(a));
}
else if ("transform-table-lists-to-ansi-join".equals(flag)) {
if (arg != null)
a.transformTableListsToAnsiJoin = Boolean.parseBoolean(arg.toLowerCase());
displayTransformTableListsToAnsiJoin(a);
}
else if ("transform-unneeded-arithmetic".equals(flag)) {
else if ("transform-unneeded-arithmetic".equals(flag))
a.transformUnneededArithmetic = parseInteractive(TransformUnneededArithmeticExpressions.class, a.transformUnneededArithmetic, arg, () -> displayTransformUnneededArithmetic(a));
}
// [#9144] /t maintained for backwards compatibility
else if ("t".equals(flag) || "T".equals(flag) || "to-dialect".equals(flag)) {
else if ("t".equals(flag) || "T".equals(flag) || "to-dialect".equals(flag))
a.toDialect = parseInteractive(SQLDialect.class, a.toDialect, arg, () -> displayToDialect(a));
}
}
}
else {
@ -282,6 +291,22 @@ public final class ParserCLI {
System.out.println("Render COALESCE(X, '') in CONCAT : " + a.renderCoalesceToEmptyStringInConcat);
}
private static void displayRenderOptionalInnerKeyword(Args a) {
System.out.println("Render INNER keyword in INNER JOIN : " + a.renderOptionalInnerKeyword);
}
private static void displayRenderOptionalOuterKeyword(Args a) {
System.out.println("Render OUTER keyword in OUTER JOIN : " + a.renderOptionalOuterKeyword);
}
private static void displayRenderOptionalAsKeywordForFieldAliases(Args a) {
System.out.println("Render AS keyword to alias fields :" + a.renderOptionalAsKeywordForFieldAliases);
}
private static void displayRenderOptionalAsKeywordForTableAliases(Args a) {
System.out.println("Render AS keyword to alias tables :" + a.renderOptionalAsKeywordForTableAliases);
}
private static void displayTransformAnsiJoinToTablesLists(Args a) {
System.out.println("Transform ANSI join to table lists : " + a.transformAnsiJoinToTableLists);
}
@ -349,50 +374,44 @@ public final class ParserCLI {
Class<? extends Enum<?>> enumArgument = null;
try {
if ("-f".equals(args[i]) || "--formatted".equals(args[i])) {
if ("-f".equals(args[i]) || "--formatted".equals(args[i]))
result.formatted = true;
}
else if ("-k".equals(args[i]) || "--keyword".equals(args[i])) {
else if ("-k".equals(args[i]) || "--keyword".equals(args[i]))
result.keywords = parse((Class<RenderKeywordCase>) (enumArgument = RenderKeywordCase.class), args[++i]);
}
else if ("-i".equals(args[i]) || "--identifier".equals(args[i])) {
else if ("-i".equals(args[i]) || "--identifier".equals(args[i]))
result.name = parse((Class<RenderNameCase>) (enumArgument = RenderNameCase.class), args[++i]);
}
else if ("-Q".equals(args[i]) || "--quoted".equals(args[i])) {
else if ("-Q".equals(args[i]) || "--quoted".equals(args[i]))
result.quoted = parse((Class<RenderQuotedNames>) (enumArgument = RenderQuotedNames.class), args[++i]);
}
else if ("-F".equals(args[i]) || "--from-dialect".equals(args[i])) {
else if ("-F".equals(args[i]) || "--from-dialect".equals(args[i]))
result.fromDialect = parse((Class<SQLDialect>) (enumArgument = SQLDialect.class), args[++i]);
}
// [#9144] -t maintained for backwards compatibility
else if ("-t".equals(args[i]) || "-T".equals(args[i]) || "--to-dialect".equals(args[i])) {
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 ("--render-coalesce-to-empty-string-in-concat".equals(args[i])) {
else if ("--render-coalesce-to-empty-string-in-concat".equals(args[i]))
result.renderCoalesceToEmptyStringInConcat = true;
}
else if ("--transform-ansi-join-to-table-lists".equals(args[i])) {
else if ("--render-optional-inner-keyword".equals(args[i]))
result.renderOptionalInnerKeyword = parse((Class<RenderOptionalKeyword>) (enumArgument = RenderOptionalKeyword.class), args[++i]);
else if ("--render-optional-outer-keyword".equals(args[i]))
result.renderOptionalOuterKeyword = parse((Class<RenderOptionalKeyword>) (enumArgument = RenderOptionalKeyword.class), args[++i]);
else if ("--render-optional-as-keyword-for-field-aliases".equals(args[i]))
result.renderOptionalAsKeywordForFieldAliases = parse((Class<RenderOptionalKeyword>) (enumArgument = RenderOptionalKeyword.class), args[++i]);
else if ("--render-optional-as-keyword-for-table-aliases".equals(args[i]))
result.renderOptionalAsKeywordForTableAliases = parse((Class<RenderOptionalKeyword>) (enumArgument = RenderOptionalKeyword.class), args[++i]);
else if ("--transform-ansi-join-to-table-lists".equals(args[i]))
result.transformAnsiJoinToTableLists = true;
}
else if ("--transform-qualify".equals(args[i])) {
else if ("--transform-qualify".equals(args[i]))
result.transformQualify = parse((Class<Transformation>) (enumArgument = Transformation.class), args[++i]);
}
else if ("--transform-rownum".equals(args[i])) {
else if ("--transform-rownum".equals(args[i]))
result.transformRownum = parse((Class<Transformation>) (enumArgument = Transformation.class), args[++i]);
}
else if ("--transform-table-lists-to-ansi-join".equals(args[i])) {
else if ("--transform-table-lists-to-ansi-join".equals(args[i]))
result.transformTableListsToAnsiJoin = true;
}
else if ("--transform-unneeded-arithmetic".equals(args[i])) {
else if ("--transform-unneeded-arithmetic".equals(args[i]))
result.transformUnneededArithmetic = parse((Class<TransformUnneededArithmeticExpressions>) (enumArgument = TransformUnneededArithmeticExpressions.class), args[++i]);
}
else if ("-s".equals(args[i]) || "--sql".equals(args[i])) {
else if ("-s".equals(args[i]) || "--sql".equals(args[i]))
result.sql = args[++i];
}
else if ("-I".equals(args[i]) || "--interactive".equals(args[i])) {
else if ("-I".equals(args[i]) || "--interactive".equals(args[i]))
result.interactive = true;
}
else if ("-h".equals(args[i]) || "--help".equals(args[i])) {
help();
result.done = true;
@ -421,48 +440,56 @@ public final class ParserCLI {
private static final void help() {
System.out.println("Usage:");
System.out.println(" -f / --formatted Format output SQL");
System.out.println(" -h / --help Display this help");
System.out.println(" -k / --keyword <RenderKeywordCase> Specify the output keyword case (org.jooq.conf.RenderKeywordCase)");
System.out.println(" -i / --identifier <RenderNameCase> Specify the output identifier case (org.jooq.conf.RenderNameCase)");
System.out.println(" -Q / --quoted <RenderQuotedNames> Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)");
System.out.println(" -F / --from-dialect <SQLDialect> Specify the input dialect (org.jooq.SQLDialect)");
System.out.println(" -T / --to-dialect <SQLDialect> Specify the output dialect (org.jooq.SQLDialect)");
System.out.println(" -s / --sql <String> Specify the input SQL string");
System.out.println(" -f / --formatted Format output SQL");
System.out.println(" -h / --help Display this help");
System.out.println(" -k / --keyword <RenderKeywordCase> Specify the output keyword case (org.jooq.conf.RenderKeywordCase)");
System.out.println(" -i / --identifier <RenderNameCase> Specify the output identifier case (org.jooq.conf.RenderNameCase)");
System.out.println(" -Q / --quoted <RenderQuotedNames> Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)");
System.out.println(" -F / --from-dialect <SQLDialect> Specify the input dialect (org.jooq.SQLDialect)");
System.out.println(" -T / --to-dialect <SQLDialect> Specify the output dialect (org.jooq.SQLDialect)");
System.out.println(" -s / --sql <String> Specify the input SQL string");
System.out.println("");
System.out.println("Commercial distribution only features:");
System.out.println(" --render-coalesce-to-empty-string-in-concat <boolean>");
System.out.println(" --transform-ansi-join-to-table-lists <boolean>");
System.out.println(" --transform-qualify <Transformation>");
System.out.println(" --transform-rownum <Transformation>");
System.out.println(" --transform-table-lists-to-ansi-join <boolean>");
System.out.println(" --transform-unneeded-arithmetic <TransformUnneededArithmeticExpressions>");
System.out.println(" --render-coalesce-to-empty-string-in-concat <boolean>");
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>");
System.out.println(" --render-optional-as-keyword-for-table-aliases <RenderOptionalKeyword>");
System.out.println(" --transform-ansi-join-to-table-lists <boolean>");
System.out.println(" --transform-qualify <Transformation>");
System.out.println(" --transform-rownum <Transformation>");
System.out.println(" --transform-table-lists-to-ansi-join <boolean>");
System.out.println(" --transform-unneeded-arithmetic <TransformUnneededArithmeticExpressions>");
System.out.println("");
System.out.println(" -I / --interactive Start interactive mode");
}
private static final void helpInteractive() {
System.out.println("Usage:");
System.out.println(" /d or /display Display arguments");
System.out.println(" /f or /formatted <boolean> Format output SQL");
System.out.println(" /h or /help Display this help");
System.out.println(" /k or /keyword <RenderKeywordCase> Specify the output keyword case (org.jooq.conf.RenderKeywordCase)");
System.out.println(" /i or /identifier <RenderNameCase> Specify the output identifier case (org.jooq.conf.RenderNameCase)");
System.out.println(" /Q or /quoted <RenderQuotedNames> Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)");
System.out.println(" /F or /from-dialect <SQLDialect> Specify the input dialect (org.jooq.SQLDialect)");
System.out.println(" /T or /to-dialect <SQLDialect> Specify the output dialect (org.jooq.SQLDialect)");
System.out.println(" <String> Specify the input SQL string");
System.out.println(" /d or /display Display arguments");
System.out.println(" /f or /formatted <boolean> Format output SQL");
System.out.println(" /h or /help Display this help");
System.out.println(" /k or /keyword <RenderKeywordCase> Specify the output keyword case (org.jooq.conf.RenderKeywordCase)");
System.out.println(" /i or /identifier <RenderNameCase> Specify the output identifier case (org.jooq.conf.RenderNameCase)");
System.out.println(" /Q or /quoted <RenderQuotedNames> Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)");
System.out.println(" /F or /from-dialect <SQLDialect> Specify the input dialect (org.jooq.SQLDialect)");
System.out.println(" /T or /to-dialect <SQLDialect> Specify the output dialect (org.jooq.SQLDialect)");
System.out.println(" <String> Specify the input SQL string");
System.out.println("");
System.out.println("Commercial distribution only features:");
System.out.println(" /render-coalesce-to-empty-string-in-concat <boolean>");
System.out.println(" /transform-ansi-join-to-table-lists <boolean>");
System.out.println(" /transform-qualify <Transformation>");
System.out.println(" /transform-rownum <Transformation>");
System.out.println(" /transform-table-lists-to-ansi-join <boolean>");
System.out.println(" /transform-unneeded-arithmetic <TransformUnneededArithmeticExpressions>");
System.out.println(" /render-coalesce-to-empty-string-in-concat <boolean>");
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>");
System.out.println(" /render-optional-as-keyword-for-table-aliases <RenderOptionalKeyword>");
System.out.println(" /transform-ansi-join-to-table-lists <boolean>");
System.out.println(" /transform-qualify <Transformation>");
System.out.println(" /transform-rownum <Transformation>");
System.out.println(" /transform-table-lists-to-ansi-join <boolean>");
System.out.println(" /transform-unneeded-arithmetic <TransformUnneededArithmeticExpressions>");
System.out.println("");
System.out.println(" /q or /quit Quit");
System.out.println(" /e or /exit Also quit");
System.out.println(" /q or /quit Quit");
System.out.println(" /e or /exit Also quit");
}
public static final class Args {
@ -477,6 +504,10 @@ public final class ParserCLI {
boolean interactive;
boolean done;
boolean renderCoalesceToEmptyStringInConcat;
RenderOptionalKeyword renderOptionalInnerKeyword = RenderOptionalKeyword.DEFAULT;
RenderOptionalKeyword renderOptionalOuterKeyword = RenderOptionalKeyword.DEFAULT;
RenderOptionalKeyword renderOptionalAsKeywordForFieldAliases = RenderOptionalKeyword.DEFAULT;
RenderOptionalKeyword renderOptionalAsKeywordForTableAliases = RenderOptionalKeyword.DEFAULT;
boolean transformAnsiJoinToTableLists;
Transformation transformQualify;
Transformation transformRownum;

View File

@ -356,6 +356,9 @@ implements