drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From daveoshinsky <...@git.apache.org>
Subject [GitHub] drill issue #517: DRILL-4704 fix
Date Mon, 20 Jun 2016 03:41:55 GMT
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 <notifications@github.com> 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 infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message