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)