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");
+  }
 }

Reply via email to