DRILL-575: Modify rpad, lpad functions in DrillOptiq to add default padding parameter if one isn't specified.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/9d3f95df Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/9d3f95df Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/9d3f95df Branch: refs/heads/master Commit: 9d3f95dfe2d227e9dc60e79bf7065d443e19cb3a Parents: 3168986 Author: Mehant Baid <[email protected]> Authored: Wed Jun 4 13:09:58 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Wed Jun 4 16:39:22 2014 -0700 ---------------------------------------------------------------------- .../apache/drill/exec/planner/logical/DrillOptiq.java | 7 +++++++ .../apache/drill/jdbc/test/TestFunctionsQuery.java | 14 ++++++++++++++ 2 files changed, 21 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9d3f95df/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java index 8966f18..3576622 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java @@ -329,6 +329,13 @@ public class DrillOptiq { } else if ((functionName.equals("convert_from") || functionName.equals("convert_to")) && args.get(1) instanceof QuotedString) { return FunctionCallFactory.createConvert(functionName, ((QuotedString)args.get(1)).value, args.get(0), ExpressionPosition.UNKNOWN); + } else if ((functionName.equalsIgnoreCase("rpad")) || functionName.equalsIgnoreCase("lpad")) { + // If we have only two arguments for rpad/lpad append a default QuotedExpression as an argument which will be used to pad the string + if (args.size() == 2) { + String spaceFill = " "; + LogicalExpression fill = ValueExpressions.getChar(spaceFill); + args.add(fill); + } } return FunctionCallFactory.createExpression(functionName, args); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9d3f95df/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java index ac1b289..c8f0d85 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java @@ -501,4 +501,18 @@ public class TestFunctionsQuery { "DEC38_TS=" + f.print(result1)+ "; " + "INT_TS=" + f.print(result2) + "\n"); } + + @Test + public void testPadFunctions() throws Exception { + String query = "select rpad(first_name, 10) as RPAD_DEF, rpad(first_name, 10, '*') as RPAD_STAR, lpad(first_name, 10) as LPAD_DEF, lpad(first_name, 10, '*') as LPAD_STAR " + + "from cp.`employee.json` where employee_id = 1"; + + JdbcAssert.withNoDefaultSchema() + .sql(query) + .returns( + "RPAD_DEF=Sheri ; " + + "RPAD_STAR=Sheri*****; " + + "LPAD_DEF= Sheri; " + + "LPAD_STAR=*****Sheri\n"); + } }
