Github user daveoshinsky commented on the issue:
https://github.com/apache/drill/pull/517
In the mean time, I switched over to a Mac, where all 6 existing
TestDecimal unit tests worked. Â I added a new unit test testCastFromInt
patterned after testCastFromFloat, with some code to print the query that it's
sending to the DrillBit. Â It's failing as shown below. Â What did I do wrong?
Query: { "head" : {  "version" : 1,  "generator" : {  Â
"type" : "org.apache.drill.exec.planner.logical.DrillImplementor",  Â
"info" : ""  },  "type" : "APACHE_DRILL_PHYSICAL",  "resultMode" :
"EXEC" }, graph:[ {   @id:1,   pop:"fs-scan",   format:
{type: "json"},   storage:{type: "file", connection: "classpath:///"},Â
  files:["/input_simple_decimal.json"] }, {  "pop" : "project", Â
"@id" : 2,  "exprs" : [ {   "ref" : "I4",   "expr" : "
(cast(DEC9 as INTEGER)) "  },  { "ref" : "I8", "expr": "(cast(DEC18 as
INTEGER))" }Â Â ],
  "child" : 1 },{  "pop" : "project",  "@id" : 4, Â
"exprs" : [ {   "ref" : "DECIMAL_9",   "expr" : " cast(I4 as
decimal9(9, 0)) "  },  {"ref": "DECIMAL38", "expr" : "cast(I8 as
decimal38sparse(38, 0))"}Â Â ],
  "child" : 2 },{  "pop" : "screen",  "@id" : 5,  "child"
: 4Â } ]}
org.apache.drill.exec.rpc.RpcException:
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
ExpressionParsingException: Expression has syntax error! line 1:15:no viable
alternative at input 'INTEGER'
[Error Id: a7d6acc9-70ee-4e6d-9002-90715b8de351 on 10.0.0.211:31010] at
org.apache.drill.exec.rpc.RpcException.mapException(RpcException.java:60) at
org.apache.drill.exec.client.DrillClient$ListHoldingResultsListener.getResults(DrillClient.java:479)
at org.apache.drill.exec.client.DrillClient.runQuery(DrillClient.java:329) at
org.apache.drill.exec.physical.impl.TestDecimal.runQuery(TestDecimal.java:58)
at
org.apache.drill.exec.physical.impl.TestDecimal.testCastFromInt(TestDecimal.java:180)
Here's the new function in TestDecimal.java:
   @Test  public void testCastFromInt() throws Exception {
    // Function checks for casting from Float, Double to Decimal
data types    try (RemoteServiceSet serviceSet =
RemoteServiceSet.getLocalServiceSet();Â Â Â Â Â Â Â Drillbit bit = new
Drillbit(CONFIG, serviceSet);Â Â Â Â Â Â Â DrillClient client = new
DrillClient(CONFIG, serviceSet.getCoordinator())) {
      // run query.      bit.run();     Â
client.connect();Â Â Â Â Â Â enableDecimalDataType(client);Â Â Â Â Â
 List<QueryDataBatch> results = runQuery(client,
"/decimal/cast_int_decimal.json", "/input_simple_decimal.json");
      RecordBatchLoader batchLoader = new
RecordBatchLoader(bit.getContext().getAllocator());
      QueryDataBatch batch = results.get(0);     Â
assertTrue(batchLoader.load(batch.getHeader().getDef(), batch.getData()));
      // the first pair of values in the input consists of
integers. ignore the rest.      String decimal9Output[] =
{"99.0000"};Â Â Â Â Â Â String decimal38Output[] = {"123456789.0000"};
      Iterator<VectorWrapper<?>> itr = batchLoader.iterator();
      // Check the output of decimal9     Â
ValueVector.Accessor dec9Accessor = itr.next().getValueVector().getAccessor();Â
     ValueVector.Accessor dec38Accessor =
itr.next().getValueVector().getAccessor();
      for (int i = 0; i < decimal9Output.length; i++) {  Â
     assertEquals(dec9Accessor.getObject(i).toString(),
decimal9Output[i]);Â Â Â Â Â Â Â Â
assertEquals(dec38Accessor.getObject(i).toString(), decimal38Output[i]);Â Â Â
   }      assertEquals(6, dec9Accessor.getValueCount()); Â
    assertEquals(6, dec38Accessor.getValueCount());
      batchLoader.clear();      for (QueryDataBatch
result : results) {Â Â Â Â Â Â Â result.release();Â Â Â Â Â Â }Â
   }  }
   public List<QueryDataBatch> runQuery(DrillClient client, String
cast, String input) throws Exception {Â Â Â Â String s1 =
Files.toString(FileUtils.getResourceAsFile(cast), Charsets.UTF_8);Â Â Â Â
String s2 = s1.replace("#{TEST_FILE}", input);Â Â Â Â if (isWindows()) {Â
     s2 = s2.replace("\n", "\r\n");   Â
}System.out.println("Query: " + s2);Â // DAO DEBUGÂ Â Â Â
List<QueryDataBatch> results;Â Â Â Â try {Â Â Â Â Â Â results =
client.runQuery(org.apache.drill.exec.proto.UserBitShared.QueryType.PHYSICAL,
s2);Â Â Â Â }Â Â Â Â catch (Exception ex) {Â Â Â Â Â Â
ex.printStackTrace();Â Â Â Â Â Â Throwable cause = ex.getCause();Â Â Â
   if (cause != null) {        System.out.println("Caused
by: " + cause.toString());Â Â Â Â Â Â Â Â cause.printStackTrace();Â Â
     }       throw ex;    }    return
results;Â Â }
Here's the accompanying new json file cast_int_decimal.json:
{ "head" : {  "version" : 1,  "generator" : {   "type" :
"org.apache.drill.exec.planner.logical.DrillImplementor",   "info" : ""Â
 },  "type" : "APACHE_DRILL_PHYSICAL",  "resultMode" : "EXEC" },Â
graph:[ {   @id:1,   pop:"fs-scan",   format: {type:
"json"},   storage:{type: "file", connection: "classpath:///"},  Â
files:["#{TEST_FILE}"] }, {  "pop" : "project",  "@id" : 2, Â
"exprs" : [ {   "ref" : "I4",   "expr" : " (cast(DEC9 as INTEGER))
"  },  { "ref" : "I8", "expr": "(cast(DEC18 as INTEGER))" }  ],
  "child" : 1 },{  "pop" : "project",  "@id" : 4, Â
"exprs" : [ {   "ref" : "DECIMAL_9",   "expr" : " cast(I4 as
decimal9(9, 0)) "  },  {"ref": "DECIMAL38", "expr" : "cast(I8 as
decimal38sparse(38, 0))"}Â Â ],
  "child" : 2 },{  "pop" : "screen",  "@id" : 5,  "child"
: 4Â } ]}
On Sunday, June 19, 2016 11:08 PM, Aman Sinha
<[email protected]> wrote:
Sorry for the delay. Can you force the following flag to TRUE to get the
more detailed stack trace ?
https://github.com/apache/drill/blob/master/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java#L262
(normally, one would do an 'alter session ...' but TestDecimal is doing a
plan submission instead of sql string). â
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---