diff --git a/jOOQ/src/main/java/org/jooq/ParserCLI.java b/jOOQ/src/main/java/org/jooq/ParserCLI.java index 1fdfa4133e..9a2acfcfad 100644 --- a/jOOQ/src/main/java/org/jooq/ParserCLI.java +++ b/jOOQ/src/main/java/org/jooq/ParserCLI.java @@ -47,6 +47,7 @@ import org.jooq.conf.RenderKeywordCase; import org.jooq.conf.RenderNameCase; import org.jooq.conf.RenderQuotedNames; import org.jooq.conf.Settings; +import org.jooq.conf.TransformUnneededArithmeticExpressions; import org.jooq.impl.DSL; import org.jooq.impl.ParserException; @@ -97,6 +98,12 @@ public final class ParserCLI { settings.setRenderQuotedNames(a.quoted); if (a.fromDialect != null) settings.setParseDialect(a.fromDialect); + if (a.transformAnsiJoinToTableLists) + settings.setTransformAnsiJoinToTableLists(true); + if (a.transformTableListsToAnsiJoin) + settings.setTransformTableListsToAnsiJoin(true); + if (a.transformUnneededArithmetic != null) + settings.setTransformUnneededArithmeticExpressions(a.transformUnneededArithmetic); } private static final void interactiveMode(DSLContext ctx, Args a) { @@ -180,6 +187,29 @@ public final class ParserCLI { invalid(arg, SQLDialect.class); } } + else if ("transform-ansi-join-to-table-lists".equals(flag)) { + if (arg != null) + a.transformAnsiJoinToTableLists = Boolean.parseBoolean(arg.toLowerCase()); + + displayTransformAnsiJoinToTablesLists(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)) { + try { + if (arg != null) + a.transformUnneededArithmetic = TransformUnneededArithmeticExpressions.valueOf(arg.toUpperCase()); + + displayTransformUnneededArithmetic(a); + } + catch (IllegalArgumentException e) { + invalid(arg, TransformUnneededArithmeticExpressions.class); + } + } // [#9144] /t maintained for backwards compatibility else if ("t".equals(flag) || "T".equals(flag) || "to-dialect".equals(flag)) { @@ -230,30 +260,45 @@ public final class ParserCLI { displayKeywords(a); displayIdentifiers(a); displayQuoted(a); + displayTransformAnsiJoinToTablesLists(a); + displayTransformTableListsToAnsiJoin(a); + displayTransformUnneededArithmetic(a); } private static void displayIdentifiers(Args a) { - System.out.println("Identifiers : " + a.name); + System.out.println("Identifiers : " + a.name); } private static void displayQuoted(Args a) { - System.out.println("Quoted : " + a.quoted); + System.out.println("Quoted : " + a.quoted); } private static void displayKeywords(Args a) { - System.out.println("Keywords : " + a.keywords); + System.out.println("Keywords : " + a.keywords); } private static void displayToDialect(Args a) { - System.out.println("To dialect : " + a.toDialect); + System.out.println("To dialect : " + a.toDialect); } private static void displayFromDialect(Args a) { - System.out.println("From dialect : " + a.fromDialect); + System.out.println("From dialect : " + a.fromDialect); } private static void displayFormatted(Args a) { - System.out.println("Formatted : " + a.formatted); + System.out.println("Formatted : " + a.formatted); + } + + private static void displayTransformAnsiJoinToTablesLists(Args a) { + System.out.println("Transform ANSI join to table lists : " + a.transformAnsiJoinToTableLists); + } + + private static void displayTransformTableListsToAnsiJoin(Args a) { + System.out.println("Transform table lists to ANSI join : " + a.transformTableListsToAnsiJoin); + } + + private static void displayTransformUnneededArithmetic(Args a) { + System.out.println("Transform unneeded arithmetic : " + a.transformUnneededArithmetic); } private static final void render(DSLContext ctx, Args a) { @@ -365,6 +410,26 @@ public final class ParserCLI { throw e; } } + else if ("--transform-ansi-join-to-table-lists".equals(args[i])) { + result.transformAnsiJoinToTableLists = true; + } + else if ("--transform-table-lists-to-ansi-join".equals(args[i])) { + result.transformTableListsToAnsiJoin = true; + } + else if ("--transform-unneeded-arithmetic".equals(args[i])) { + try { + result.transformUnneededArithmetic = TransformUnneededArithmeticExpressions.valueOf(args[++i].toUpperCase()); + continue argsLoop; + } + catch (IllegalArgumentException e) { + invalid(args[i], TransformUnneededArithmeticExpressions.class); + throw e; + } + catch (ArrayIndexOutOfBoundsException e) { + System.out.println("Flag --transform-unneeded-arithmetic requires argument"); + throw e; + } + } else if ("-s".equals(args[i]) || "--sql".equals(args[i])) { try { result.sql = args[++i]; @@ -401,44 +466,57 @@ 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 Specify the output keyword case (org.jooq.conf.RenderKeywordCase)"); - System.out.println(" -i / --identifier Specify the output identifier case (org.jooq.conf.RenderNameCase)"); - System.out.println(" -Q / --quoted Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)"); - System.out.println(" -F / --from-dialect Specify the input dialect (org.jooq.SQLDialect)"); - System.out.println(" -T / --to-dialect Specify the output dialect (org.jooq.SQLDialect)"); - System.out.println(" -s / --sql 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 Specify the output keyword case (org.jooq.conf.RenderKeywordCase)"); + System.out.println(" -i / --identifier Specify the output identifier case (org.jooq.conf.RenderNameCase)"); + System.out.println(" -Q / --quoted Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)"); + System.out.println(" -F / --from-dialect Specify the input dialect (org.jooq.SQLDialect)"); + System.out.println(" -T / --to-dialect Specify the output dialect (org.jooq.SQLDialect)"); + System.out.println(" -s / --sql Specify the input SQL string"); System.out.println(""); - System.out.println(" -I / --interactive Start interactive mode"); + System.out.println("Commercial distribution only features:"); + System.out.println(" --transform-ansi-join-to-table-lists"); + System.out.println(" --transform-table-lists-to-ansi-join"); + System.out.println(" --transform-unneeded-arithmetic "); + 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 Format output SQL"); - System.out.println(" /h or /help Display this help"); - System.out.println(" /k or /keyword Specify the output keyword case (org.jooq.conf.RenderKeywordCase)"); - System.out.println(" /i or /identifier Specify the output identifier case (org.jooq.conf.RenderNameCase)"); - System.out.println(" /Q or /quoted Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)"); - System.out.println(" /F or /from-dialect Specify the input dialect (org.jooq.SQLDialect)"); - System.out.println(" /T or /to-dialect Specify the output dialect (org.jooq.SQLDialect)"); - System.out.println(" Specify the input SQL string"); + System.out.println(" /d or /display Display arguments"); + System.out.println(" /f or /formatted Format output SQL"); + System.out.println(" /h or /help Display this help"); + System.out.println(" /k or /keyword Specify the output keyword case (org.jooq.conf.RenderKeywordCase)"); + System.out.println(" /i or /identifier Specify the output identifier case (org.jooq.conf.RenderNameCase)"); + System.out.println(" /Q or /quoted Specify the output identifier quoting (org.jooq.conf.RenderQuotedNames)"); + System.out.println(" /F or /from-dialect Specify the input dialect (org.jooq.SQLDialect)"); + System.out.println(" /T or /to-dialect Specify the output dialect (org.jooq.SQLDialect)"); + System.out.println(" Specify the input SQL string"); System.out.println(""); - System.out.println(" /q or /quit Quit"); - System.out.println(" /e or /exit Also quit"); + System.out.println("Commercial distribution only features:"); + System.out.println(" /transform-ansi-join-to-table-lists"); + System.out.println(" /transform-table-lists-to-ansi-join"); + System.out.println(" /transform-unneeded-arithmetic "); + System.out.println(""); + System.out.println(" /q or /quit Quit"); + System.out.println(" /e or /exit Also quit"); } public static final class Args { - List history = new ArrayList<>(); - String sql; - RenderKeywordCase keywords = RenderKeywordCase.LOWER; - RenderNameCase name = RenderNameCase.LOWER; - RenderQuotedNames quoted = RenderQuotedNames.EXPLICIT_DEFAULT_UNQUOTED; - SQLDialect toDialect = SQLDialect.DEFAULT; - SQLDialect fromDialect = SQLDialect.DEFAULT; - boolean formatted; - boolean interactive; - boolean done; + List history = new ArrayList<>(); + String sql; + RenderKeywordCase keywords = RenderKeywordCase.LOWER; + RenderNameCase name = RenderNameCase.LOWER; + RenderQuotedNames quoted = RenderQuotedNames.EXPLICIT_DEFAULT_UNQUOTED; + SQLDialect toDialect = SQLDialect.DEFAULT; + SQLDialect fromDialect = SQLDialect.DEFAULT; + boolean formatted; + boolean interactive; + boolean done; + boolean transformAnsiJoinToTableLists; + boolean transformTableListsToAnsiJoin; + TransformUnneededArithmeticExpressions transformUnneededArithmetic = TransformUnneededArithmeticExpressions.NEVER; } }