drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Barclay (Drill) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DRILL-3863) TestBuilder.baseLineColumns(...) doesn't take net strings; parses somehow--can't test some names
Date Tue, 29 Sep 2015 23:39:04 GMT
Daniel Barclay (Drill) created DRILL-3863:
---------------------------------------------

             Summary: TestBuilder.baseLineColumns(...) doesn't take net strings; parses somehow--can't
test some names
                 Key: DRILL-3863
                 URL: https://issues.apache.org/jira/browse/DRILL-3863
             Project: Apache Drill
          Issue Type: Bug
          Components: Tools, Build & Test
            Reporter: Daniel Barclay (Drill)
            Assignee: Jason Altekruse


{{TestBuilder}}'s {{baseLineColumns(String...)}} method doesn't take the given strings as
net column names, and instead tries to parse them somehow, but doesn't parse them as the SQL
parser would (and that method's Javadoc documentation doesn't seem to say how the strings
are parsed/interpreted or indicate any third way of specifying arbitrary net column names).

That means that certain column names _cannot be checked_ for (cannot be used in the result
set being checked).

For example, in Drill, the SQL delimited identifier  "{{`Column B`}}"  specifies a net column
name of "{{Column B}}".  However, passing that net column name (that is, a {{String}} representing
that net column name) to {{baseLineColumns}} results in a strange parsing error.  (See Test
Class 1 and the error in Failure Trace 1.)

Checking whether {{baseLineColumns}} takes SQL-level syntax for column names rather than net
column names (by passing a string including the back-quote characters of the delimited identifier)
seems to indicate that {{baseLineColumns}} doesn't take that syntax that either.  (See Test
Class 2 and the three expected/returned records in Failure Trace 2.)

That seems to mean that it's impossible to use {{baseLineColumns}} to validate certain column
names (including the fairly simple/common case of alias names containing spaces for output
formatting purposes).


Test Class 1:
{noformat}
import org.junit.Test;

public class TestTEMPFileNameBugs extends BaseTestQuery {

  @Test
  public void test1() throws Exception {
    testBuilder()
    .sqlQuery( "SELECT * FROM ( VALUES (1, 2) ) AS T(column_a, `Column B`)" )
    .unOrdered()
    .baselineColumns("column_a", "Column B")
    .baselineValues(1, 2)
    .go();
  }
}
{noformat}

Failure Trace 1:
{noformat}
org.apache.drill.common.exceptions.ExpressionParsingException: Expression has syntax error!
line 1:0:no viable alternative at input 'Column'
	at org.apache.drill.common.expression.parser.ExprParser.displayRecognitionError(ExprParser.java:169)
	at org.antlr.runtime.BaseRecognizer.reportError(BaseRecognizer.java:186)
	at org.apache.drill.common.expression.parser.ExprParser.lookup(ExprParser.java:5163)
	at org.apache.drill.common.expression.parser.ExprParser.atom(ExprParser.java:4370)
	at org.apache.drill.common.expression.parser.ExprParser.unaryExpr(ExprParser.java:4252)
	at org.apache.drill.common.expression.parser.ExprParser.xorExpr(ExprParser.java:3954)
	at org.apache.drill.common.expression.parser.ExprParser.mulExpr(ExprParser.java:3821)
	at org.apache.drill.common.expression.parser.ExprParser.addExpr(ExprParser.java:3689)
	at org.apache.drill.common.expression.parser.ExprParser.relExpr(ExprParser.java:3564)
	at org.apache.drill.common.expression.parser.ExprParser.equExpr(ExprParser.java:3436)
	at org.apache.drill.common.expression.parser.ExprParser.andExpr(ExprParser.java:3310)
	at org.apache.drill.common.expression.parser.ExprParser.orExpr(ExprParser.java:3185)
	at org.apache.drill.common.expression.parser.ExprParser.condExpr(ExprParser.java:3110)
	at org.apache.drill.common.expression.parser.ExprParser.expression(ExprParser.java:3041)
	at org.apache.drill.common.expression.parser.ExprParser.parse(ExprParser.java:206)
	at org.apache.drill.TestBuilder.parsePath(TestBuilder.java:202)
	at org.apache.drill.TestBuilder.baselineColumns(TestBuilder.java:333)
	at org.apache.drill.TestTEMPFileNameBugs.test1(TestTEMPFileNameBugs.java:30)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:606)
{noformat}

Test Class 2:
{noformat}
import org.junit.Test;

public class TestTEMPFileNameBugs extends BaseTestQuery {

  @Test
  public void test1() throws Exception {
    testBuilder()
    .sqlQuery( "SELECT * FROM ( VALUES (1, 2) ) AS T(column_a, `Column B`)" )
    .unOrdered()
    .baselineColumns("column_a", "`Column B`")
    .baselineValues(1, 2)
    .go();
  }

}
{noformat}

Failure Trace 2:
{noformat}

java.lang.Exception: After matching 0 records, did not find expected record in result set:
`Column B` : 2, `column_a` : 1, 


Some examples of expected records:`Column B` : 2, `column_a` : 1, 


 Some examples of records returned by the test query:`Column B` : 2, `column_a` : 1, 

	at org.apache.drill.DrillTestWrapper.compareResults(DrillTestWrapper.java:577)
	at org.apache.drill.DrillTestWrapper.compareUnorderedResults(DrillTestWrapper.java:303)
	at org.apache.drill.DrillTestWrapper.run(DrillTestWrapper.java:125)
	at org.apache.drill.TestBuilder.go(TestBuilder.java:129)
	at org.apache.drill.TestTEMPFileNameBugs.test1(TestTEMPFileNameBugs.java:33)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:606)
{noformat}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message