[ https://issues.apache.org/jira/browse/DRILL-4047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15007391#comment-15007391 ]
ASF GitHub Bot commented on DRILL-4047: --------------------------------------- Github user julienledem commented on a diff in the pull request: https://github.com/apache/drill/pull/246#discussion_r44987917 --- Diff: exec/java-exec/src/test/java/org/apache/drill/TestSelectWithOption.java --- @@ -0,0 +1,203 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill; + +import static java.lang.String.format; +import static org.apache.drill.TestBuilder.listOf; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory; +import org.junit.Ignore; +import org.junit.Test; + +public class TestSelectWithOption extends BaseTestQuery { + private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(WorkspaceSchemaFactory.class); + + private File genCSVFile(String name, String... rows) throws IOException { + File file = new File(format("target/%s_%s.csv", this.getClass().getName(), name)); + try (FileWriter fw = new FileWriter(file)) { + for (int i = 0; i < rows.length; i++) { + fw.append(rows[i] + "\n"); + } + } + return file; + } + + private String genCSVTable(String name, String... rows) throws IOException { + File f = genCSVFile(name, rows); + return format("dfs.`${WORKING_PATH}/%s`", f.getPath()); + } + + private void testWithResult(String query, Object... expectedResult) throws Exception { + TestBuilder builder = testBuilder() + .sqlQuery(query) + .ordered() + .baselineColumns("columns"); + for (Object o : expectedResult) { + builder = builder.baselineValues(o); + } + builder.build().run(); + } + + @Test + public void testTextFieldDelimiter() throws Exception { + String tableName = genCSVTable("testTextFieldDelimiter", + "\"b\"|\"0\"", + "\"b\"|\"1\"", + "\"b\"|\"2\""); + + String queryTemplate = + "select columns from table(%s (type => 'TeXT', fieldDelimiter => '%s'))"; + testWithResult(format(queryTemplate, tableName, ","), + listOf("b\"|\"0"), + listOf("b\"|\"1"), + listOf("b\"|\"2") + ); + testWithResult(format(queryTemplate, tableName, "|"), + listOf("b", "0"), + listOf("b", "1"), + listOf("b", "2") + ); + } + + @Test @Ignore // It does not look like lineDelimiter is working + public void testTextLineDelimiter() throws Exception { + String tableName = genCSVTable("testTextLineDelimiter", + "\"b\"|\"0\"", + "\"b\"|\"1\"", + "\"b\"|\"2\""); + + testWithResult(format("select columns from table(%s(type => 'TeXT', lineDelimiter => '|'))", tableName), + listOf("\"b\""), + listOf("\"0\"", "\"b\""), + listOf("\"1\"", "\"b\""), + listOf("\"2\"") + ); + } + + @Test + public void testTextQuote() throws Exception { + String tableName = genCSVTable("testTextQuote", + "\"b\"|\"0\"", + "\"b\"|\"1\"", + "\"b\"|\"2\""); + + testWithResult(format("select columns from table(%s(type => 'TeXT', fieldDelimiter => '|', quote => '@'))", tableName), + listOf("\"b\"", "\"0\""), + listOf("\"b\"", "\"1\""), + listOf("\"b\"", "\"2\"") + ); + + String quoteTableName = genCSVTable("testTextQuote2", + "@b@|@0@", + "@b$@c@|@1@"); + // It seems that a parameter can not be called "escape" + testWithResult(format("select columns from table(%s(`escape` => '$', type => 'TeXT', fieldDelimiter => '|', quote => '@'))", quoteTableName), + listOf("b", "0"), + listOf("b$@c", "1") // shouldn't $ be removed here? + ); + } + + @Test + public void testTextComment() throws Exception { + String commentTableName = genCSVTable("testTextComment", + "b|0", + "@ this is a comment", + "b|1"); + testWithResult(format("select columns from table(%s(type => 'TeXT', fieldDelimiter => '|', comment => '@'))", commentTableName), + listOf("b", "0"), + listOf("b", "1") + ); + } + + @Test + public void testTextHeader() throws Exception { + String headerTableName = genCSVTable("testTextHeader", + "b|a", + "b|0", + "b|1"); + testWithResult(format("select columns from table(%s(type => 'TeXT', fieldDelimiter => '|', skipFirstLine => true))", headerTableName), + listOf("b", "0"), + listOf("b", "1") + ); + + testBuilder() + .sqlQuery(format("select a, b from table(%s(type => 'TeXT', fieldDelimiter => '|', extractHeader => true))", headerTableName)) + .ordered() + .baselineColumns("b", "a") + .baselineValues("b", "0") + .baselineValues("b", "1") + .build().run(); + } + + @Test + public void testVariationsCSV() throws Exception { + String csvTableName = genCSVTable("testVariationsCSV", + "a,b", + "c|d"); + // Using the defaults in TextFormatConfig (the field delimiter is neither "," not "|") + String[] csvQueries = { +// format("select columns from %s ('TeXT')", csvTableName), +// format("select columns from %s('TeXT')", csvTableName), + format("select columns from table(%s ('TeXT'))", csvTableName), --- End diff -- no, but the point was to use a capitalization that is not used anywhere in the code to make sure this was case insensitive. I can vary the spelling but I thought this was sufficient. > Select with options > ------------------- > > Key: DRILL-4047 > URL: https://issues.apache.org/jira/browse/DRILL-4047 > Project: Apache Drill > Issue Type: Improvement > Components: Execution - Relational Operators > Reporter: Julien Le Dem > Assignee: Julien Le Dem > > Add a mechanism to pass parameters down to the StoragePlugin when writing a > Select statement. > Some discussion here: > http://mail-archives.apache.org/mod_mbox/drill-dev/201510.mbox/%3CCAO%2Bvc4AcGK3%2B3QYvQV1-xPPdpG3Tc%2BfG%3D0xDGEUPrhd6ktHv5Q%40mail.gmail.com%3E > http://mail-archives.apache.org/mod_mbox/drill-dev/201511.mbox/%3ccao+vc4clzylvjevisfjqtcyxb-zsmfy4bqrm-jhbidwzgqf...@mail.gmail.com%3E -- This message was sent by Atlassian JIRA (v6.3.4#6332)