You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2014/04/29 19:59:58 UTC
git commit: TAJO-799: Local query without FROM throws
IllegalArgumentException in CLI (Hyoungjun Kim via hyunsik)
Repository: tajo
Updated Branches:
refs/heads/master 6cc5006d5 -> 0fb823b90
TAJO-799: Local query without FROM throws IllegalArgumentException in CLI (Hyoungjun Kim via hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/0fb823b9
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/0fb823b9
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/0fb823b9
Branch: refs/heads/master
Commit: 0fb823b9004a9f566bba55dd40c7defeade946d2
Parents: 6cc5006
Author: Hyunsik Choi <hy...@apache.org>
Authored: Wed Apr 30 02:59:05 2014 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Wed Apr 30 02:59:47 2014 +0900
----------------------------------------------------------------------
CHANGES | 3 +
.../java/org/apache/tajo/catalog/TableDesc.java | 2 +-
.../apache/tajo/cli/ConnectDatabaseCommand.java | 2 +-
.../tajo/cli/DefaultTajoCliOutputFormatter.java | 16 ++--
.../main/java/org/apache/tajo/cli/TajoCli.java | 10 ++-
.../java/org/apache/tajo/conf/TajoConf.java | 2 +-
.../java/org/apache/tajo/cli/TestTajoCli.java | 78 +++++++++++++++++++-
.../testLocalQueryWithoutFrom.result | 8 ++
8 files changed, 108 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 4879124..cbfc292 100644
--- a/CHANGES
+++ b/CHANGES
@@ -19,6 +19,9 @@ Release 0.9.0 - unreleased
BUG FIXES
+ TAJO-799: Local query without FROM throws IllegalArgumentException in
+ CLI. (Hyoungjun Kim via hyunsik)
+
TAJO-802: No partition columns in WEB catalog page.
(Hyoungjun Kim via hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java
index 4251116..5aa035e 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java
@@ -73,7 +73,7 @@ public class TableDesc implements ProtoObject<TableDescProto>, GsonObject, Clone
public TableDesc(TableDescProto proto) {
this(proto.getTableName(), new Schema(proto.getSchema()),
- new TableMeta(proto.getMeta()), new Path(proto.getPath()), proto.getIsExternal());
+ new TableMeta(proto.getMeta()), proto.hasPath() ? new Path(proto.getPath()) : null, proto.getIsExternal());
if(proto.hasStats()) {
this.stats = new TableStats(proto.getStats());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java
index 78774e5..4ec4611 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java
@@ -39,7 +39,7 @@ public class ConnectDatabaseCommand extends TajoShellCommand {
} else if (cmd.length == 2) {
if (!client.existDatabase(cmd[1])) {
- context.getOutput().write("No Database Found\n");
+ context.getOutput().write(cmd[1] + " database not found\n");
} else {
try {
if (client.selectDatabase(cmd[1])) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java b/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
index d291414..dd1f911 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
@@ -53,17 +53,21 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
private String getQuerySuccessMessage(TableDesc tableDesc, float responseTime, int totalPrintedRows, String postfix) {
TableStats stat = tableDesc.getStats();
- String volume = FileUtil.humanReadableByteCount(stat.getNumBytes(), false);
- long resultRows = stat.getNumRows();
+ String volume = stat == null ? "0 B" : FileUtil.humanReadableByteCount(stat.getNumBytes(), false);
+ long resultRows = stat == null ? 0 : stat.getNumRows();
long realNumRows = resultRows != 0 ? resultRows : totalPrintedRows;
- return "(" + realNumRows + " rows, " + responseTime + " sec, " + volume + " " + postfix + ")";
+ return "(" + realNumRows + " rows, " + getResponseTimeReadable(responseTime) + ", " + volume + " " + postfix + ")";
+ }
+
+ protected String getResponseTimeReadable(float responseTime) {
+ return responseTime + " sec";
}
@Override
public void printResult(PrintWriter sout, InputStream sin, TableDesc tableDesc,
float responseTime, ResultSet res) throws Exception {
- long resultRows = tableDesc.getStats().getNumRows();
+ long resultRows = tableDesc.getStats() == null ? 0 : tableDesc.getStats().getNumRows();
if (resultRows == 0) {
resultRows = Integer.MAX_VALUE;
}
@@ -115,6 +119,7 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
}
}
sout.println(getQuerySuccessMessage(tableDesc, responseTime, totalPrintedRows, "selected"));
+ sout.flush();
}
@Override
@@ -125,7 +130,8 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
@Override
public void printProgress(PrintWriter sout, QueryStatus status) {
sout.println("Progress: " + (int)(status.getProgress() * 100.0f)
- + "%, response time: " + ((float)(status.getFinishTime() - status.getSubmitTime()) / 1000.0) + " sec");
+ + "%, response time: "
+ + getResponseTimeReadable((float)((status.getFinishTime() - status.getSubmitTime()) / 1000.0)));
sout.flush();
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java b/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
index 9772bf8..959e9df 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/TajoCli.java
@@ -125,9 +125,8 @@ public class TajoCli {
this.reader = new ConsoleReader(sin, out);
this.reader.setExpandEvents(false);
this.sout = new PrintWriter(reader.getOutput());
- Class formatterClass = conf.getClass(conf.getVar(ConfVars.CLI__OUTPUT_FORMATTER_CLASS),
+ Class formatterClass = conf.getClass(ConfVars.CLI_OUTPUT_FORMATTER_CLASS.varname,
DefaultTajoCliOutputFormatter.class);
-
this.outputFormatter = (TajoCliOutputFormatter)formatterClass.newInstance();
this.outputFormatter.init(conf);
@@ -477,6 +476,13 @@ public class TajoCli {
sout.println("Invalid command " + command +". Try \\? for help.");
}
+ public void close() {
+ //for testcase
+ if (client != null) {
+ client.close();
+ }
+ }
+
public static void main(String [] args) throws Exception {
TajoConf conf = new TajoConf();
TajoCli shell = new TajoCli(conf, args, System.in, System.out);
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
index 552f1e4..b7a799d 100644
--- a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
+++ b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
@@ -249,7 +249,7 @@ public class TajoConf extends Configuration {
CLI_PRINT_PAUSE_NUM_RECORDS("tajo.cli.print.pause.num.records", 100),
CLI_PRINT_PAUSE("tajo.cli.print.pause", true),
CLI_PRINT_ERROR_TRACE("tajo.cli.print.error.trace", true),
- CLI__OUTPUT_FORMATTER_CLASS("tajo.cli.otuptu.formatter", "org.apache.tajo.cli.DefaultTajoCliOutputFormatter");
+ CLI_OUTPUT_FORMATTER_CLASS("tajo.cli.output.formatter", "org.apache.tajo.cli.DefaultTajoCliOutputFormatter");
;
public final String varname;
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java b/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
index 02ec15d..799f175 100644
--- a/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
+++ b/tajo-core/src/test/java/org/apache/tajo/cli/TestTajoCli.java
@@ -21,14 +21,56 @@ package org.apache.tajo.cli;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.PosixParser;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
import org.apache.tajo.TpchTestBase;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.conf.TajoConf.ConfVars;
+import org.apache.tajo.storage.StorageUtil;
+import org.apache.tajo.util.FileUtil;
+import org.junit.After;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TestName;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.net.URL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
public class TestTajoCli {
+ protected static final TpchTestBase testBase;
+
+ /** the base path of result directories */
+ protected static final Path resultBasePath;
+
+ static {
+ testBase = TpchTestBase.getInstance();
+ URL resultBaseURL = ClassLoader.getSystemResource("results");
+ resultBasePath = new Path(resultBaseURL.toString());
+ }
+
+ private TajoCli tajoCli;
+ private Path currentResultPath;
+
+ @Rule
+ public TestName name = new TestName();
+
+ public TestTajoCli() {
+ String className = getClass().getSimpleName();
+ currentResultPath = new Path(resultBasePath, className);
+ }
+
+ @After
+ public void teadDown() {
+ if (tajoCli != null) {
+ tajoCli.close();
+ }
+ }
+
@Test
public void testParseParam() throws Exception {
String[] args = new String[]{"-f", "test.sql", "--param", "test1=10", "--param", "test2=20"};
@@ -66,9 +108,9 @@ public class TestTajoCli {
TajoConf tajoConf = TpchTestBase.getInstance().getTestingCluster().getConfiguration();
- TajoCli shell = new TajoCli(tajoConf, args, System.in, System.out);
- assertEquals("false", shell.getContext().getConf().get("tajo.cli.print.pause"));
- assertEquals("256", shell.getContext().getConf().get("tajo.executor.join.inner.in-memory-table-num"));
+ tajoCli = new TajoCli(tajoConf, args, System.in, System.out);
+ assertEquals("false", tajoCli.getContext().getConf().get("tajo.cli.print.pause"));
+ assertEquals("256", tajoCli.getContext().getConf().get("tajo.executor.join.inner.in-memory-table-num"));
}
@Test
@@ -80,4 +122,34 @@ public class TestTajoCli {
String expected = "select * from lineitem where l_tax > 10 and l_returnflag > 'A'";
assertEquals(expected, TajoCli.replaceParam(sql, params));
}
+
+ @Test
+ public void testLocalQueryWithoutFrom() throws Exception {
+ String sql = "select 'abc', '123'; select substr('123456', 1,3);";
+ TajoConf tajoConf = TpchTestBase.getInstance().getTestingCluster().getConfiguration();
+ tajoConf.setVar(ConfVars.CLI_OUTPUT_FORMATTER_CLASS, TajoCliOutputTestFormatter.class.getName());
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ tajoCli = new TajoCli(tajoConf, new String[]{}, System.in, out);
+ tajoCli.executeScript(sql);
+ String consoleResult = new String(out.toByteArray());
+
+ assertOutputResult(consoleResult);
+ }
+
+ private void assertOutputResult(String actual) throws Exception {
+ String resultFileName = name.getMethodName() + ".result";
+ FileSystem fs = currentResultPath.getFileSystem(testBase.getTestingCluster().getConfiguration());
+ Path resultFile = StorageUtil.concatPath(currentResultPath, resultFileName);
+ assertTrue(resultFile.toString() + " existence check", fs.exists(resultFile));
+
+ String expectedResult = FileUtil.readTextFile(new File(resultFile.toUri()));
+ assertEquals(expectedResult, actual);
+ }
+
+ public static class TajoCliOutputTestFormatter extends DefaultTajoCliOutputFormatter {
+ @Override
+ protected String getResponseTimeReadable(float responseTime) {
+ return "";
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/0fb823b9/tajo-core/src/test/resources/results/TestTajoCli/testLocalQueryWithoutFrom.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTajoCli/testLocalQueryWithoutFrom.result b/tajo-core/src/test/resources/results/TestTajoCli/testLocalQueryWithoutFrom.result
new file mode 100644
index 0000000..bf51d16
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTajoCli/testLocalQueryWithoutFrom.result
@@ -0,0 +1,8 @@
+?literal, ?literal_1
+-------------------------------
+abc, 123
+(1 rows, , 0 B selected)
+?substr
+-------------------------------
+123
+(1 rows, , 0 B selected)