tajo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hyun...@apache.org
Subject [5/5] git commit: TAJO-1141: Refactor the packages hierarchy of tajo-client.
Date Fri, 31 Oct 2014 05:59:10 GMT
TAJO-1141: Refactor the packages hierarchy of tajo-client.

Closes #217


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/c59baa3a
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/c59baa3a
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/c59baa3a

Branch: refs/heads/master
Commit: c59baa3ad60e92da2ebd1fb636f301e5ca4f585d
Parents: 154da1e
Author: Hyunsik Choi <hyunsik@apache.org>
Authored: Thu Oct 30 22:55:34 2014 -0700
Committer: Hyunsik Choi <hyunsik@apache.org>
Committed: Thu Oct 30 22:56:29 2014 -0700

----------------------------------------------------------------------
 CHANGES                                         |   2 +
 .../apache/tajo/cli/ConnectDatabaseCommand.java |  71 --
 .../org/apache/tajo/cli/CopyrightCommand.java   |  63 --
 .../tajo/cli/DefaultTajoCliOutputFormatter.java | 210 ------
 .../apache/tajo/cli/DescFunctionCommand.java    | 135 ----
 .../org/apache/tajo/cli/DescTableCommand.java   | 135 ----
 .../tajo/cli/ExecExternalShellCommand.java      | 122 ----
 .../java/org/apache/tajo/cli/ExitCommand.java   |  47 --
 .../java/org/apache/tajo/cli/HdfsCommand.java   |  57 --
 .../java/org/apache/tajo/cli/HelpCommand.java   | 132 ----
 .../tajo/cli/InvalidStatementException.java     |  25 -
 .../apache/tajo/cli/ListDatabaseCommand.java    |  48 --
 .../java/org/apache/tajo/cli/ParsedResult.java  |  53 --
 .../java/org/apache/tajo/cli/SetCommand.java    | 126 ----
 .../java/org/apache/tajo/cli/SimpleParser.java  | 388 -----------
 .../org/apache/tajo/cli/TajoAdminCommand.java   |  57 --
 .../main/java/org/apache/tajo/cli/TajoCli.java  | 690 ------------------
 .../apache/tajo/cli/TajoCliOutputFormatter.java |  97 ---
 .../org/apache/tajo/cli/TajoFileHistory.java    |  39 --
 .../org/apache/tajo/cli/TajoGetConfCommand.java |  57 --
 .../org/apache/tajo/cli/TajoHAAdminCommand.java |  57 --
 .../org/apache/tajo/cli/TajoShellCommand.java   | 128 ----
 .../java/org/apache/tajo/cli/UnsetCommand.java  |  52 --
 .../org/apache/tajo/cli/VersionCommand.java     |  48 --
 .../org/apache/tajo/cli/tools/TajoAdmin.java    | 457 ++++++++++++
 .../org/apache/tajo/cli/tools/TajoDump.java     | 188 +++++
 .../org/apache/tajo/cli/tools/TajoGetConf.java  | 161 +++++
 .../org/apache/tajo/cli/tools/TajoHAAdmin.java  | 211 ++++++
 .../cli/tsql/DefaultTajoCliOutputFormatter.java | 210 ++++++
 .../cli/tsql/InvalidStatementException.java     |  25 +
 .../org/apache/tajo/cli/tsql/ParsedResult.java  |  53 ++
 .../org/apache/tajo/cli/tsql/SimpleParser.java  | 388 +++++++++++
 .../java/org/apache/tajo/cli/tsql/TajoCli.java  | 691 +++++++++++++++++++
 .../tajo/cli/tsql/TajoCliOutputFormatter.java   |  98 +++
 .../apache/tajo/cli/tsql/TajoFileHistory.java   |  39 ++
 .../tsql/commands/ConnectDatabaseCommand.java   |  72 ++
 .../cli/tsql/commands/CopyrightCommand.java     |  65 ++
 .../cli/tsql/commands/DescFunctionCommand.java  | 136 ++++
 .../cli/tsql/commands/DescTableCommand.java     | 136 ++++
 .../tsql/commands/ExecExternalShellCommand.java | 124 ++++
 .../tajo/cli/tsql/commands/ExitCommand.java     |  49 ++
 .../tajo/cli/tsql/commands/HdfsCommand.java     |  58 ++
 .../tajo/cli/tsql/commands/HelpCommand.java     | 133 ++++
 .../cli/tsql/commands/ListDatabaseCommand.java  |  50 ++
 .../tajo/cli/tsql/commands/SetCommand.java      | 127 ++++
 .../cli/tsql/commands/TajoAdminCommand.java     |  58 ++
 .../cli/tsql/commands/TajoGetConfCommand.java   |  58 ++
 .../cli/tsql/commands/TajoHAAdminCommand.java   |  58 ++
 .../cli/tsql/commands/TajoShellCommand.java     | 129 ++++
 .../tajo/cli/tsql/commands/UnsetCommand.java    |  53 ++
 .../tajo/cli/tsql/commands/VersionCommand.java  |  49 ++
 .../java/org/apache/tajo/client/TajoAdmin.java  | 456 ------------
 .../java/org/apache/tajo/client/TajoDump.java   | 186 -----
 .../org/apache/tajo/client/TajoGetConf.java     | 159 -----
 .../org/apache/tajo/client/TajoHAAdmin.java     | 210 ------
 .../apache/tajo/client/TajoHAClientUtil.java    |   2 +-
 .../java/org/apache/tajo/conf/TajoConf.java     |   2 +-
 .../java/org/apache/tajo/QueryTestCaseBase.java |   4 +-
 .../tajo/cli/TestDefaultCliOutputFormatter.java | 178 -----
 .../tajo/cli/TestExecExternalShellCommand.java  |  44 --
 .../org/apache/tajo/cli/TestHdfsCommand.java    |  46 --
 .../org/apache/tajo/cli/TestSimpleParser.java   | 271 --------
 .../java/org/apache/tajo/cli/TestTajoCli.java   | 354 ----------
 .../apache/tajo/cli/tools/TestDDLBuilder.java   | 133 ++++
 .../org/apache/tajo/cli/tools/TestTajoDump.java |  47 ++
 .../cli/tsql/TestDefaultCliOutputFormatter.java | 180 +++++
 .../apache/tajo/cli/tsql/TestSimpleParser.java  | 274 ++++++++
 .../org/apache/tajo/cli/tsql/TestTajoCli.java   | 356 ++++++++++
 .../commands/TestExecExternalShellCommand.java  |  45 ++
 .../tajo/cli/tsql/commands/TestHdfsCommand.java |  47 ++
 .../org/apache/tajo/client/TestDDLBuilder.java  | 133 ----
 .../org/apache/tajo/client/TestTajoDump.java    |  46 --
 .../apache/tajo/engine/eval/ExprTestBase.java   |   6 +-
 73 files changed, 4967 insertions(+), 4927 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 49c267b..cbbf492 100644
--- a/CHANGES
+++ b/CHANGES
@@ -41,6 +41,8 @@ Release 0.9.1 - unreleased
 
   TASKS
 
+    TAJO-1141: Refactor the packages hierarchy of tajo-client. (hyunsik)
+
 
 
 Release 0.9.0

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/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
deleted file mode 100644
index 4158d67..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ConnectDatabaseCommand.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import com.google.protobuf.ServiceException;
-
-public class ConnectDatabaseCommand extends TajoShellCommand {
-
-  public ConnectDatabaseCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\c";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    if (cmd.length == 1) {
-      context.getOutput().write(String.format("You are now connected to database \"%s\" as user \"%s\".%n",
-          client.getCurrentDatabase(), client.getUserInfo().getUserName()));
-    } else if (cmd.length == 2) {
-      String databaseName = cmd[1];
-      databaseName = databaseName.replace("\"", "");
-      if (!client.existDatabase(databaseName)) {
-        context.getOutput().write("Database '" + databaseName + "'  not found\n");
-      } else {
-        try {
-          if (client.selectDatabase(databaseName)) {
-            context.setCurrentDatabase(client.getCurrentDatabase());
-            context.getOutput().write(String.format("You are now connected to database \"%s\" as user \"%s\".%n",
-                context.getCurrentDatabase(), client.getUserInfo().getUserName()));
-          }
-        } catch (ServiceException se) {
-          if (se.getMessage() != null) {
-            context.getOutput().write(se.getMessage());
-          } else {
-            context.getOutput().write(String.format("cannot connect the database \"%s\"", databaseName));
-          }
-        }
-      }
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "connect to new database";
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/CopyrightCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/CopyrightCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/CopyrightCommand.java
deleted file mode 100644
index 07a3b51..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/CopyrightCommand.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 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.tajo.cli;
-
-public class CopyrightCommand extends TajoShellCommand {
-  public CopyrightCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\copyright";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    context.getOutput().println();
-    context.getOutput().println(
-        "  Licensed to the Apache Software Foundation (ASF) under one\n" +
-            "  or more contributor license agreements.  See the NOTICE file\n" +
-            "  distributed with this work for additional information\n" +
-            "  regarding copyright ownership.  The ASF licenses this file\n" +
-            "  to you under the Apache License, Version 2.0 (the\n" +
-            "  \"License\"); you may not use this file except in compliance\n" +
-            "  with the License.  You may obtain a copy of the License at\n" +
-            "\n" +
-            "       http://www.apache.org/licenses/LICENSE-2.0\n" +
-            "\n" +
-            "   Unless required by applicable law or agreed to in writing, software\n" +
-            "   distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
-            "   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
-            "   See the License for the specific language governing permissions and\n" +
-            "   limitations under the License.");
-    context.getOutput().println();
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "show Apache License 2.0";
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/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
deleted file mode 100644
index c583aa2..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DefaultTajoCliOutputFormatter.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-import org.apache.tajo.QueryId;
-import org.apache.tajo.SessionVars;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.statistics.TableStats;
-import org.apache.tajo.client.QueryClient;
-import org.apache.tajo.client.QueryStatus;
-import org.apache.tajo.util.FileUtil;
-
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-
-public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
-  private int printPauseRecords;
-  private boolean printPause;
-  private boolean printErrorTrace;
-  private String nullChar;
-
-  @Override
-  public void init(TajoCli.TajoCliContext context) {
-    this.printPause = context.getBool(SessionVars.CLI_PAGING_ENABLED);
-    this.printPauseRecords = context.getInt(SessionVars.CLI_PAGE_ROWS);
-    this.printErrorTrace = context.getBool(SessionVars.CLI_DISPLAY_ERROR_TRACE);
-    this.nullChar = context.get(SessionVars.CLI_NULL_CHAR);
-  }
-
-  @Override
-  public void setScirptMode() {
-    this.printPause = false;
-  }
-
-  private String getQuerySuccessMessage(TableDesc tableDesc, float responseTime, int totalPrintedRows, String postfix,
-                                        boolean endOfTuple) {
-    TableStats stat = tableDesc.getStats();
-    String volume = stat == null ? (endOfTuple ? "0 B" : "unknown bytes") :
-        FileUtil.humanReadableByteCount(stat.getNumBytes(), false);
-    long resultRows = stat == null ? QueryClient.UNKNOWN_ROW_NUMBER : stat.getNumRows();
-
-    String displayRowNum;
-    if (resultRows == QueryClient.UNKNOWN_ROW_NUMBER) {
-
-      if (endOfTuple) {
-        displayRowNum = totalPrintedRows + " rows";
-      } else {
-        displayRowNum = "unknown row number";
-      }
-
-    } else {
-      displayRowNum = resultRows + " rows";
-    }
-    return "(" + displayRowNum + ", " + 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() == null ? -1 : tableDesc.getStats().getNumRows();
-    if (resultRows == -1) {
-      resultRows = Integer.MAX_VALUE;
-    }
-
-    if (res == null) {
-      sout.println(getQuerySuccessMessage(tableDesc, responseTime, 0, "inserted", true));
-      return;
-    }
-    ResultSetMetaData rsmd = res.getMetaData();
-    int numOfColumns = rsmd.getColumnCount();
-    for (int i = 1; i <= numOfColumns; i++) {
-      if (i > 1) sout.print(",  ");
-      String columnName = rsmd.getColumnName(i);
-      sout.print(columnName);
-    }
-    sout.println("\n-------------------------------");
-
-    int numOfPrintedRows = 0;
-    int totalPrintedRows = 0;
-    boolean endOfTuple = true;
-    while (res.next()) {
-      for (int i = 1; i <= numOfColumns; i++) {
-        if (i > 1) sout.print(",  ");
-        String columnValue = res.getString(i);
-        if(res.wasNull()){
-          sout.print(nullChar);
-        } else {
-          sout.print(columnValue);
-        }
-      }
-      sout.println();
-      sout.flush();
-      numOfPrintedRows++;
-      totalPrintedRows++;
-      if (printPause && printPauseRecords > 0 && totalPrintedRows < resultRows && numOfPrintedRows >= printPauseRecords) {
-        if (resultRows < Integer.MAX_VALUE) {
-          sout.print("(" + totalPrintedRows + "/" + resultRows + " rows, continue... 'q' is quit)");
-        } else {
-          sout.print("(" + totalPrintedRows + " rows, continue... 'q' is quit)");
-        }
-        sout.flush();
-        if (sin != null) {
-          if (sin.read() == 'q') {
-            endOfTuple = false;
-            sout.println();
-            break;
-          }
-        }
-        numOfPrintedRows = 0;
-        sout.println();
-      }
-    }
-    sout.println(getQuerySuccessMessage(tableDesc, responseTime, totalPrintedRows, "selected", endOfTuple));
-    sout.flush();
-  }
-
-  @Override
-  public void printNoResult(PrintWriter sout) {
-    sout.println("(0 rows)");
-    sout.flush();
-  }
-
-  @Override
-  public void printProgress(PrintWriter sout, QueryStatus status) {
-    sout.println("Progress: " + (int)(status.getProgress() * 100.0f)
-        + "%, response time: "
-        + getResponseTimeReadable((float)((status.getFinishTime() - status.getSubmitTime()) / 1000.0)));
-    sout.flush();
-  }
-
-  @Override
-  public void printMessage(PrintWriter sout, String message) {
-    sout.println(message);
-    sout.flush();
-  }
-
-  @Override
-  public void printErrorMessage(PrintWriter sout, Throwable t) {
-    sout.println(parseErrorMessage(t.getMessage()));
-    if (printErrorTrace) {
-      sout.println(ExceptionUtils.getStackTrace(t));
-    }
-    sout.flush();
-  }
-
-  @Override
-  public void printErrorMessage(PrintWriter sout, String message) {
-    sout.println(parseErrorMessage(message));
-    sout.flush();
-  }
-
-  @Override
-  public void printKilledMessage(PrintWriter sout, QueryId queryId) {
-    sout.println(TajoCli.KILL_PREFIX + queryId);
-    sout.flush();
-  }
-
-  @Override
-  public void printErrorMessage(PrintWriter sout, QueryStatus status) {
-    if (status.getErrorMessage() != null && !status.getErrorMessage().isEmpty()) {
-      printErrorMessage(sout, parseErrorMessage(status.getErrorMessage()));
-    } else {
-      printErrorMessage(sout, "No error message");
-    }
-    if (printErrorTrace && status.getErrorTrace() != null && !status.getErrorTrace().isEmpty()) {
-      sout.println(status.getErrorTrace());
-    }
-    sout.flush();
-  }
-
-  public static String parseErrorMessage(String message) {
-    if (message == null) {
-      return TajoCli.ERROR_PREFIX + "No error message";
-    }
-    String[] lines = message.split("\n");
-    message = lines[0];
-
-    int index = message.lastIndexOf(TajoCli.ERROR_PREFIX);
-    if (index < 0) {
-      message = TajoCli.ERROR_PREFIX + message;
-    } else {
-      message = message.substring(index);
-    }
-
-    return message;
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/DescFunctionCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/DescFunctionCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/DescFunctionCommand.java
deleted file mode 100644
index c72f48d..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DescFunctionCommand.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.function.FunctionUtil;
-
-import java.util.*;
-
-import static org.apache.tajo.common.TajoDataTypes.DataType;
-
-public class DescFunctionCommand extends TajoShellCommand {
-  public DescFunctionCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\df";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    boolean printDetail = false;
-    String functionName = "";
-    if(cmd.length == 0) {
-      throw new IllegalArgumentException();
-    }
-
-    if (cmd.length == 2) {
-      printDetail = true;
-      functionName = cmd[1];
-    }
-
-    List<CatalogProtos.FunctionDescProto> functions =
-        new ArrayList<CatalogProtos.FunctionDescProto>(client.getFunctions(functionName));
-
-    Collections.sort(functions, new Comparator<CatalogProtos.FunctionDescProto>() {
-      @Override
-      public int compare(CatalogProtos.FunctionDescProto f1, CatalogProtos.FunctionDescProto f2) {
-        int nameCompared = f1.getSignature().getName().compareTo(f2.getSignature().getName());
-        if (nameCompared != 0) {
-          return nameCompared;
-        } else {
-          return f1.getSignature().getReturnType().getType().compareTo(f2.getSignature().getReturnType().getType());
-        }
-      }
-    });
-
-    String[] headers = new String[]{"Name", "Result type", "Argument types", "Description", "Type"};
-    float[] columnWidthRates = new float[]{0.15f, 0.15f, 0.2f, 0.4f, 0.1f};
-    int[] columnWidths = printHeader(headers, columnWidthRates);
-
-    for(CatalogProtos.FunctionDescProto eachFunction: functions) {
-      String name = eachFunction.getSignature().getName();
-      String resultDataType = eachFunction.getSignature().getReturnType().getType().toString();
-      String arguments = FunctionUtil.buildParamTypeString(
-          eachFunction.getSignature().getParameterTypesList().toArray(
-              new DataType[eachFunction.getSignature().getParameterTypesCount()]));
-      String functionType = eachFunction.getSignature().getType().toString();
-      String description = eachFunction.getSupplement().getShortDescription();
-
-      int index = 0;
-      printLeft(" " + name, columnWidths[index++]);
-      context.getOutput().print("|");
-      printLeft(" " + resultDataType, columnWidths[index++]);
-      context.getOutput().print("|");
-      printLeft(" " + arguments, columnWidths[index++]);
-      context.getOutput().print("|");
-      printLeft(" " + description, columnWidths[index++]);
-      context.getOutput().print("|");
-      printLeft(" " + functionType, columnWidths[index++]);
-
-      println();
-    }
-
-    println();
-    context.getOutput().println("(" + functions.size() + ") rows");
-    println();
-
-    if (printDetail && !functions.isEmpty()) {
-      Map<String, CatalogProtos.FunctionDescProto> functionMap =
-          new HashMap<String, CatalogProtos.FunctionDescProto>();
-
-      for (CatalogProtos.FunctionDescProto eachFunction: functions) {
-        if (!functionMap.containsKey(eachFunction.getSupplement().getShortDescription())) {
-          functionMap.put(eachFunction.getSupplement().getShortDescription(), eachFunction);
-        }
-      }
-
-      for (CatalogProtos.FunctionDescProto eachFunction: functionMap.values()) {
-        String signature = eachFunction.getSignature().getReturnType().getType() + " " +
-            FunctionUtil.buildSimpleFunctionSignature(eachFunction.getSignature().getName(),
-                eachFunction.getSignature().getParameterTypesList());
-        String fullDescription = eachFunction.getSupplement().getShortDescription();
-        if(eachFunction.getSupplement().getDetail() != null && !eachFunction.getSupplement().getDetail().isEmpty()) {
-          fullDescription += "\n" + eachFunction.getSupplement().getDetail();
-        }
-
-        context.getOutput().println("Function:    " + signature);
-        context.getOutput().println("Description: " + fullDescription);
-        context.getOutput().println("Example:\n" + eachFunction.getSupplement().getExample());
-        println();
-      }
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "[function_name]";
-  }
-
-  @Override
-  public String getDescription() {
-    return "show function description";
-  }
-
-
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
deleted file mode 100644
index 4b34858..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import org.apache.commons.lang.CharUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.partition.PartitionMethodDesc;
-import org.apache.tajo.client.QueryClient;
-import org.apache.tajo.util.FileUtil;
-import org.apache.tajo.util.TUtil;
-
-import java.util.List;
-import java.util.Map;
-
-public class DescTableCommand extends TajoShellCommand {
-  public DescTableCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\d";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    if (cmd.length == 2) {
-      String tableName = cmd[1];
-      tableName = tableName.replace("\"", "");
-      TableDesc desc = client.getTableDesc(tableName);
-      if (desc == null) {
-        context.getOutput().println("Did not find any relation named \"" + tableName + "\"");
-      } else {
-        context.getOutput().println(toFormattedString(desc));
-      }
-    } else if (cmd.length == 1) {
-      List<String> tableList = client.getTableList(null);
-      if (tableList.size() == 0) {
-        context.getOutput().println("No Relation Found");
-      }
-      for (String table : tableList) {
-        context.getOutput().println(table);
-      }
-    } else {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "[table_name]";
-  }
-
-  @Override
-  public String getDescription() {
-    return "show table description";
-  }
-
-  protected String toFormattedString(TableDesc desc) {
-    StringBuilder sb = new StringBuilder();
-    sb.append("\ntable name: ").append(desc.getName()).append("\n");
-    sb.append("table path: ").append(desc.getPath()).append("\n");
-    sb.append("store type: ").append(desc.getMeta().getStoreType()).append("\n");
-    if (desc.getStats() != null) {
-
-      long row = desc.getStats().getNumRows();
-      String rowText = row == QueryClient.UNKNOWN_ROW_NUMBER ? "unknown" : row + "";
-      sb.append("number of rows: ").append(rowText).append("\n");
-      sb.append("volume: ").append(
-          FileUtil.humanReadableByteCount(desc.getStats().getNumBytes(),
-              true)).append("\n");
-    }
-    sb.append("Options: \n");
-    for(Map.Entry<String, String> entry : desc.getMeta().toMap().entrySet()){
-
-      /*
-      *  Checks whether the character is ASCII 7 bit printable.
-      *  For example, a printable unicode '\u007c' become the character ‘|’.
-      *
-      *  Control-chars : ctrl-a(\u0001), tab(\u0009) ..
-      *  Printable-chars : '|'(\u007c), ','(\u002c) ..
-      * */
-
-      String value = entry.getValue();
-      String unescaped = StringEscapeUtils.unescapeJava(value);
-      if (unescaped.length() == 1 && CharUtils.isAsciiPrintable(unescaped.charAt(0))) {
-        value = unescaped;
-      }
-      sb.append("\t").append("'").append(entry.getKey()).append("'").append("=")
-          .append("'").append(value).append("'").append("\n");
-    }
-    sb.append("\n");
-    sb.append("schema: \n");
-
-    for(int i = 0; i < desc.getSchema().size(); i++) {
-      Column col = desc.getSchema().getColumn(i);
-      sb.append(col.getSimpleName()).append("\t").append(col.getDataType().getType());
-      if (col.getDataType().hasLength()) {
-        sb.append("(").append(col.getDataType().getLength()).append(")");
-      }
-      sb.append("\n");
-    }
-
-    sb.append("\n");
-    if (desc.getPartitionMethod() != null) {
-      PartitionMethodDesc partition = desc.getPartitionMethod();
-      sb.append("Partitions: \n");
-
-      sb.append("type:").append(partition.getPartitionType().name()).append("\n");
-
-      sb.append("columns:").append(":");
-      sb.append(TUtil.arrayToString(partition.getExpressionSchema().toArray()));
-    }
-
-    return sb.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/ExecExternalShellCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/ExecExternalShellCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/ExecExternalShellCommand.java
deleted file mode 100644
index 628f8ba..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ExecExternalShellCommand.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import java.io.*;
-import java.util.concurrent.CountDownLatch;
-
-public class ExecExternalShellCommand extends TajoShellCommand {
-  public ExecExternalShellCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\!";
-  }
-
-  @Override
-  public void invoke(String[] command) throws Exception {
-    StringBuilder shellCommand = new StringBuilder();
-    String prefix = "";
-    for(int i = 1; i < command.length; i++) {
-      shellCommand.append(prefix).append(command[i]);
-      prefix = " ";
-    }
-
-    String builtCommand = shellCommand.toString();
-    if (command.length < 2) {
-      throw new IOException("ERROR: '" + builtCommand + "' is an invalid command.");
-    }
-
-    String[] execCommand = new String[3];
-    execCommand[0] = "/bin/bash";
-    execCommand[1] = "-c";
-    execCommand[2] = builtCommand;
-
-    PrintWriter sout = context.getOutput();
-
-    CountDownLatch latch = new CountDownLatch(2);
-    Process process = Runtime.getRuntime().exec(execCommand);
-    try {
-      InputStreamConsoleWriter inWriter = new InputStreamConsoleWriter(process.getInputStream(), sout, "", latch);
-      InputStreamConsoleWriter errWriter = new InputStreamConsoleWriter(process.getErrorStream(), sout, "ERROR: ", latch);
-
-      inWriter.start();
-      errWriter.start();
-
-      int processResult = process.waitFor();
-      latch.await();
-      if (processResult != 0) {
-        throw new IOException("ERROR: Failed with exit code = " + processResult);
-      }
-    } finally {
-      org.apache.commons.io.IOUtils.closeQuietly(process.getInputStream());
-      org.apache.commons.io.IOUtils.closeQuietly(process.getOutputStream());
-      org.apache.commons.io.IOUtils.closeQuietly(process.getErrorStream());
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "<command> [params]";
-  }
-
-  @Override
-  public String getDescription() {
-    return "executes external shell command in TAJO shell";
-  }
-
-  static class InputStreamConsoleWriter extends Thread {
-    private InputStream in;
-    private PrintWriter writer;
-    private String prefix;
-    private CountDownLatch latch;
-
-    public InputStreamConsoleWriter(InputStream in, PrintWriter writer, String prefix, CountDownLatch latch) {
-      this.in = in;
-      this.writer = writer;
-      this.prefix = prefix;
-      this.latch = latch;
-    }
-
-    @Override
-    public void run() {
-      BufferedReader reader = null;
-      try {
-        reader = new BufferedReader(new InputStreamReader(in));
-        String line;
-        while ((line = reader.readLine()) != null) {
-          writer.println(prefix + line);
-          writer.flush();
-        }
-      } catch (Exception e) {
-        writer.println("ERROR: " + e.getMessage());
-      } finally {
-        if (reader != null) {
-          try {
-            reader.close();
-          } catch (IOException e) {
-          }
-        }
-        latch.countDown();
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/ExitCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/ExitCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/ExitCommand.java
deleted file mode 100644
index 1a18841..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ExitCommand.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 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.tajo.cli;
-
-public class ExitCommand extends TajoShellCommand {
-
-  public ExitCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\q";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    context.getOutput().println("bye!");
-    System.exit(0);
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "quit";
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/HdfsCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/HdfsCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/HdfsCommand.java
deleted file mode 100644
index 5b4c12e..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/HdfsCommand.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import org.apache.hadoop.fs.FsShell;
-
-public class HdfsCommand extends TajoShellCommand {
-  private FsShell fsShell;
-
-  public HdfsCommand(TajoCli.TajoCliContext context) {
-    super(context);
-    fsShell = new FsShell(context.getConf());
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\dfs";
-  }
-
-  @Override
-  public void invoke(String[] command) throws Exception {
-    try {
-      String[] dfsCommands = new String[command.length - 1];
-      System.arraycopy(command, 1, dfsCommands, 0, dfsCommands.length);
-
-      fsShell.run(dfsCommands);
-    } catch (Exception e) {
-      context.getOutput().println("ERROR: " + e.getMessage());
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "<hdfs command> [options]";
-  }
-
-  @Override
-  public String getDescription() {
-    return "executes a dfs command in TAJO shell ";
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/HelpCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/HelpCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/HelpCommand.java
deleted file mode 100644
index d4ade37..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/HelpCommand.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import java.io.PrintWriter;
-
-import org.apache.tajo.util.VersionInfo;
-
-public class HelpCommand extends TajoShellCommand {
-  private String targetDocVersion = "";
-
-  public HelpCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\?";
-  }
-
-  @Override
-  public String [] getAliases() {
-    return new String [] {"\\help"};
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    if(targetDocVersion.equalsIgnoreCase("")) {
-      targetDocVersion = getDocumentationVersion();
-    }
-
-    if (cmd.length == 1) {
-      PrintWriter sout = context.getOutput();
-      sout.println();
-
-      sout.println("General");
-      sout.println("  \\copyright    show Apache License 2.0");
-      sout.println("  \\version      show Tajo version");
-      sout.println("  \\?            show help");
-      sout.println("  \\? [COMMAND]  show help of a given command");
-      sout.println("  \\help         alias of \\?");
-      sout.println("  \\q            quit tsql");
-      sout.println();
-      sout.println();
-
-      sout.println("Informational");
-      sout.println("  \\l           list databases");
-      sout.println("  \\c           show current database");
-      sout.println("  \\c [DBNAME]  connect to new database");
-      sout.println("  \\d           list tables");
-      sout.println("  \\d [TBNAME]  describe table");
-      sout.println("  \\df          list functions");
-      sout.println("  \\df NAME     describe function");
-      sout.println();
-      sout.println();
-
-      sout.println("Tool");
-      sout.println("  \\!           execute a linux shell command");
-      sout.println("  \\dfs         execute a dfs command");
-      sout.println("  \\admin       execute tajo admin command");
-      sout.println();
-      sout.println();
-
-      sout.println("Variables");
-      sout.println("  \\set [[NAME] [VALUE]  set session variable or list session variables");
-      sout.println("  \\unset NAME           unset session variable");
-      sout.println();
-      sout.println();
-
-      sout.println("Documentations");
-      sout.println("  tsql guide        http://tajo.apache.org/docs/" + targetDocVersion + "/cli.html");
-      sout.println("  Query language    http://tajo.apache.org/docs/" + targetDocVersion + "/sql_language.html");
-      sout.println("  Functions         http://tajo.apache.org/docs/" + targetDocVersion + "/functions.html");
-      sout.println("  Backup & restore  http://tajo.apache.org/docs/" + targetDocVersion + "/backup_and_restore.html");
-      sout.println("  Configuration     http://tajo.apache.org/docs/" + targetDocVersion + "/configuration.html");
-      sout.println();
-    } else if (cmd.length == 2) {
-      String slashCommand = "\\" + cmd[1];
-      if (context.getCommands().containsKey(slashCommand)) {
-        context.getCommands().get(slashCommand).printHelp();
-      } else {
-        context.getOutput().println("Command not found: " + cmd[1]);
-      }
-    }
-  }
-
-  private String getDocumentationVersion() {
-    String tajoVersion = "", docVersion = "", docDefaultVersion = "current";
-    String tajoFullVersion = VersionInfo.getVersion();
-
-    int delimiterIdx = tajoFullVersion.indexOf("-");
-    if (delimiterIdx > -1) {
-      tajoVersion =  tajoFullVersion.substring(0, delimiterIdx);
-    } else {
-      tajoVersion = tajoFullVersion;
-    }
-    
-    if(tajoVersion.equalsIgnoreCase("")) {
-      docVersion = docDefaultVersion;
-    } else {
-    	docVersion = tajoVersion;
-    }
-
-    return docVersion;
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "show command lists and their usages";
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/InvalidStatementException.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/InvalidStatementException.java b/tajo-client/src/main/java/org/apache/tajo/cli/InvalidStatementException.java
deleted file mode 100644
index 9782e84..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/InvalidStatementException.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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.tajo.cli;
-
-public class InvalidStatementException extends Exception {
-  public InvalidStatementException(String message) {
-    super(message);
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/ListDatabaseCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/ListDatabaseCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/ListDatabaseCommand.java
deleted file mode 100644
index 199fed2..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ListDatabaseCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 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.tajo.cli;
-
-public class ListDatabaseCommand extends TajoShellCommand {
-
-  public ListDatabaseCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\l";
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    for (String databaseName : client.getAllDatabaseNames()) {
-      context.getOutput().println(databaseName);
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "list all databases";
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/ParsedResult.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/ParsedResult.java b/tajo-client/src/main/java/org/apache/tajo/cli/ParsedResult.java
deleted file mode 100644
index 001aded..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/ParsedResult.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.tajo.cli;
-
-
-public class ParsedResult {
-  public static enum StatementType {
-    META,
-    STATEMENT
-  }
-
-  private final StatementType type;
-  private final String historyStatement;
-  private final String statement;
-
-  public ParsedResult(StatementType type, String statement, String historyStatement) {
-    this.type = type;
-    this.statement = statement;
-    this.historyStatement = historyStatement;
-  }
-
-  public StatementType getType() {
-    return type;
-  }
-
-  public String getHistoryStatement() {
-    return historyStatement.trim();
-  }
-
-  public String getStatement() {
-    return statement.trim();
-  }
-
-  public String toString() {
-    return "(" + type.name() + ") " + historyStatement;
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
deleted file mode 100644
index c957a19..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/SetCommand.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import com.google.protobuf.ServiceException;
-import org.apache.tajo.SessionVars;
-import org.apache.tajo.util.StringUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.apache.tajo.SessionVars.VariableMode;
-
-public class SetCommand extends TajoShellCommand {
-
-  public SetCommand(TajoCli.TajoCliContext context) {
-    super(context);
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\set";
-  }
-
-  private void showAllSessionVars() throws ServiceException {
-    for (Map.Entry<String, String> entry: client.getAllSessionVariables().entrySet()) {
-      context.getOutput().println(StringUtils.quote(entry.getKey()) + "=" + StringUtils.quote(entry.getValue()));
-    }
-  }
-
-  private void updateSessionVariable(String key, String val) throws ServiceException {
-    Map<String, String> variables = new HashMap<String, String>();
-    variables.put(key, val);
-    client.updateSessionVariables(variables);
-  }
-
-  void set(String key, String val) throws ServiceException {
-    SessionVars sessionVar = null;
-
-    if (SessionVars.exists(key)) { // if the variable is one of the session variables
-      sessionVar = SessionVars.get(key);
-
-      // is it cli-side variable?
-      if (sessionVar.getMode() == VariableMode.CLI_SIDE_VAR) {
-        context.setCliSideVar(key, val);
-      } else {
-        updateSessionVariable(key, val);
-      }
-
-      if (SessionVars.isDeprecated(key)) {
-        context.getOutput().println("Warning: deprecated to directly use config key in TajoConf.ConfVars. " +
-            "Please execute '\\help set'.");
-      }
-    } else {
-      updateSessionVariable(key, val);
-    }
-  }
-
-  @Override
-  public void invoke(String[] cmd) throws Exception {
-    if (cmd.length == 1) {
-      showAllSessionVars();
-    } else if (cmd.length == 3) {
-      set(cmd[1], cmd[2]);
-    } else {
-      context.getOutput().println("usage: \\set [[NAME] VALUE]");
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "";
-  }
-
-  @Override
-  public String getDescription() {
-    return "set session variable or shows all session variables";
-  }
-
-  @Override
-  public void printHelp() {
-    context.getOutput().println("\nAvailable Session Variables:\n");
-    for (SessionVars var : SessionVars.values()) {
-
-      if (var.getMode() == VariableMode.DEFAULT ||
-          var.getMode() == VariableMode.CLI_SIDE_VAR ||
-          var.getMode() == VariableMode.FROM_SHELL_ENV) {
-
-        context.getOutput().println("\\set " + var.keyname() + " " + getDisplayType(var.getVarType()) + " - " + var
-            .getDescription());
-      }
-    }
-  }
-
-  public static String getDisplayType(Class<?> clazz) {
-    if (clazz == String.class) {
-      return "[text value]";
-    } else if (clazz == Integer.class) {
-      return "[int value]";
-    } else if (clazz == Long.class) {
-      return "[long value]";
-    } else if (clazz == Float.class) {
-      return "[real value]";
-    } else if (clazz == Boolean.class) {
-      return "[true or false]";
-    } else {
-      return clazz.getSimpleName();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/SimpleParser.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/SimpleParser.java b/tajo-client/src/main/java/org/apache/tajo/cli/SimpleParser.java
deleted file mode 100644
index 0beaec8..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/SimpleParser.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.tajo.cli.ParsedResult.StatementType.META;
-import static org.apache.tajo.cli.ParsedResult.StatementType.STATEMENT;
-
-/**
- * This is a parser used in tsql to parse multiple SQL lines into SQL statements.
- * It helps tsql recognizes the termination of each SQL statement and quotation mark (') while
- * parses multiple separate lines.
- */
-public class SimpleParser {
-
-  public static enum ParsingState {
-    TOK_START,     // Start State
-    META,          // Meta Command
-    STATEMENT,     // Statement
-    WITHIN_QUOTE,  // Within Quote
-    INVALID,       // Invalid Statement
-    STATEMENT_EOS, // End State (End of Statement)
-    META_EOS       // End State (End of Statement)
-  }
-
-  ParsingState state = START_STATE;
-  int lineNum;
-
-  /**
-   * It will be used to store a query statement into Jline history.
-   * the query statement for history does not include unnecessary white spaces and new line.
-   */
-  private StringBuilder historyAppender = new StringBuilder();
-  /**
-   * It will be used to submit a query statement to the TajoMaster. It just contains a raw query statement string.
-   */
-  private StringBuilder rawAppender = new StringBuilder();
-
-  public static final ParsingState START_STATE = ParsingState.TOK_START;
-
-  /**
-   * <h2>State Machine</h2>
-   * All whitespace are ignored in all cases except for
-   *
-   * <pre>
-   * (start) TOK_START --> META ---------------------> META_EOS
-   *                    |
-   *                    |
-   *                    |
-   *                    |-----------> STATEMENT ----------> STMT_EOS
-   *                                  \       ^
-   *                                  \      /
-   *                                  \-> WITHIN_QUOTE
-   *                                        \    ^
-   *                                        \---/
-   * </pre>
-   */
-
-  public static List<ParsedResult> parseScript(String str) throws InvalidStatementException {
-    SimpleParser parser = new SimpleParser();
-    List<ParsedResult> parsedResults = new ArrayList<ParsedResult>();
-    parsedResults.addAll(parser.parseLines(str));
-    parsedResults.addAll(parser.EOF());
-    return parsedResults;
-  }
-
-  public List<ParsedResult> parseLines(String str) throws InvalidStatementException {
-    List<ParsedResult> statements = new ArrayList<ParsedResult>();
-    int lineStartIdx;
-    int idx = 0;
-    char [] chars = str.toCharArray();
-
-    // if parsing continues, it means that the previous line is broken by '\n'.
-    // So, we should add new line to rawAppender.
-    if (isStatementContinue()) {
-      rawAppender.append("\n");
-    }
-
-    while(idx < str.length()) {
-
-      // initialization for new statement
-      if (state == ParsingState.TOK_START) {
-        lineNum = 0;
-
-        // ignore all whitespace before start
-        if (Character.isWhitespace(chars[idx])) {
-          idx++;
-          continue;
-        }
-      }
-
-      ////////////////////////////
-      // TOK_START --> META
-      ////////////////////////////
-
-      lineStartIdx = idx;
-
-      if (state == ParsingState.TOK_START && chars[idx] == '\\') {
-        state = ParsingState.META;
-
-        ////////////////////////////
-        // META --> TOK_EOS
-        ////////////////////////////
-        while (state != ParsingState.META_EOS && idx < chars.length) {
-          char character = chars[idx++];
-
-          if (isEndOfMeta(character)) {
-            state = ParsingState.META_EOS;
-          } else if (Character.isWhitespace(character)) {
-            // skip
-          }
-        }
-
-        if (state == ParsingState.META_EOS) {
-          historyAppender.append(str.subSequence(lineStartIdx, idx - 1).toString());
-          appendToRawStatement(str.subSequence(lineStartIdx, idx - 1).toString(), true);
-        } else {
-          historyAppender.append(str.subSequence(lineStartIdx, idx).toString());
-          appendToRawStatement(str.subSequence(lineStartIdx, idx).toString(), true);
-        }
-
-      } else if (isInlineCommentStart(chars, idx)) {
-        idx = consumeInlineComment(chars, idx);
-        appendToRawStatement(str.subSequence(lineStartIdx, idx).toString(), true);
-
-      /////////////////////////////////
-      //    TOK_START     -> STATEMENT
-      // or TOK_STATEMENT -> STATEMENT
-      ////////////////////////////////
-      } else if (isStatementContinue() || isStatementStart(chars[idx])) {
-        if (!isStatementContinue()) { // TOK_START -> STATEMENT
-          state = ParsingState.STATEMENT;
-          rawAppender.append("\n");
-        }
-
-        while (!isTerminateState(state) && idx < chars.length) {
-          char character = chars[idx++];
-
-          ///////////////////////////////////////////////////////
-          // in-statement loop BEGIN
-          ///////////////////////////////////////////////////////
-          if (isEndOfStatement(character)) {
-            state = ParsingState.STATEMENT_EOS;
-
-          } else if (state == ParsingState.STATEMENT && character == '\n') {
-            appendToBothStatements(chars, lineStartIdx, idx, 1); // omit new line chacter '\n' from history statement
-            lineStartIdx = idx;
-
-          } else if (state == ParsingState.STATEMENT && character == '\'') { // TOK_STATEMENT -> WITHIN_QUOTE
-            state = ParsingState.WITHIN_QUOTE;
-
-            if (idx < chars.length) {
-              character = chars[idx++];
-            } else {
-              continue;
-            }
-
-
-            // idx points the characters followed by the current character. So, we should use 'idx - 1'
-            // in order to point the current character.
-          } else if (state == ParsingState.STATEMENT && idx < chars.length && isInlineCommentStart(chars, idx - 1)) {
-            idx++;
-            appendToBothStatements(chars, lineStartIdx, idx, 2); // omit two dash characters '--' from history statement
-            int commentStartIdx = idx;
-            idx = consumeInlineComment(chars, idx);
-            appendToRawStatement(str.subSequence(commentStartIdx, idx).toString(), true);
-            lineStartIdx = idx;
-          }
-          ///////////////////////////////////////////////////////
-          // in-statement loop END
-          ///////////////////////////////////////////////////////
-
-          if (state == ParsingState.WITHIN_QUOTE) {
-            while(idx < chars.length) {
-              ///////////////////////////////
-              // WITHIN_QUOTE --> STATEMENT
-              ///////////////////////////////
-              if (character == '\'') {
-                state = ParsingState.STATEMENT;
-                break;
-              }
-              character = chars[idx++];
-            }
-            if (state == ParsingState.WITHIN_QUOTE && character == '\'') {
-              state = ParsingState.STATEMENT;
-            }
-          }
-        }
-
-        // After all characters are consumed
-
-        if (state == ParsingState.STATEMENT_EOS) { // If one query statement is terminated
-          appendToBothStatements(chars, lineStartIdx, idx - 1); // skip semicolon (;)
-        } else {
-          appendToBothStatements(chars, lineStartIdx, idx);
-
-          // if it is not within quote and there is no space between lines, adds a space.
-          if (state == ParsingState.STATEMENT && (historyAppender.charAt(historyAppender.length() - 1) != ' ')) {
-            historyAppender.append(" ");
-            rawAppender.append("\n");
-          }
-        }
-      } else { // skip unknown character
-        idx++;
-      }
-
-      lineNum++;
-      statements.addAll(doProcessEndOfStatement(state == ParsingState.META));
-    }
-
-    return statements;
-  }
-
-  /**
-   * Append the range of characters into a given StringBuilder instance.
-   *
-   * @param chars Characters
-   * @param fromIdx start character index
-   * @param toIdx end character index
-   */
-  private void appendToStatement(StringBuilder builder, char[] chars, int fromIdx, int toIdx) {
-    builder.append(chars, fromIdx, toIdx - fromIdx);
-  }
-
-  /**
-   * Append the range of characters into both history and raw appenders. It omits the number of characters specified by
-   * <code>omitCharNums</code>.
-   *
-   *
-   * @param chars Characters
-   * @param fromIdx start character index
-   * @param toIdx end character index
-   * @param omitCharNums how many characters will be omitted from history statement
-   */
-  private void appendToBothStatements(char[] chars, int fromIdx, int toIdx, int omitCharNums) {
-    appendToStatement(historyAppender, chars, fromIdx, toIdx - omitCharNums);
-    if (historyAppender.charAt(historyAppender.length() - 1) != ' ') {
-      historyAppender.append(" ");
-    }
-    appendToStatement(rawAppender, chars, fromIdx, toIdx);
-  }
-
-  /**
-   * Append the range of characters into both history and raw appenders.
-   *
-   *
-   * @param chars Characters
-   * @param fromIdx start character index
-   * @param toIdx end character index
-   */
-  private void appendToBothStatements(char[] chars, int fromIdx, int toIdx) {
-    historyAppender.append(chars, fromIdx, toIdx - fromIdx);
-    rawAppender.append(chars, fromIdx, toIdx - fromIdx);
-  }
-
-  private int consumeInlineComment(char [] chars, int currentIdx) {
-    currentIdx++;
-    while (currentIdx < chars.length && !isNewLine(chars[currentIdx])) {
-      currentIdx++;
-    }
-    return currentIdx;
-  }
-
-  private void appendToRawStatement(String str, boolean addLF) {
-    if (!str.isEmpty() && !"\n".equals(str) &&
-        rawAppender.length() > 0 && addLF && rawAppender.charAt(rawAppender.length() - 1) != '\n') {
-      rawAppender.append(str);
-    } else {
-      rawAppender.append(str);
-    }
-  }
-
-  private static boolean isEndOfMeta(char character) {
-    return character == ';' || character == '\n';
-  }
-
-  private static boolean isEndOfStatement(char character) {
-    return character == ';';
-  }
-
-  /**
-   * It checks if inline comment '--' begins.
-   * @param chars
-   * @param idx
-   * @return
-   */
-  private boolean isInlineCommentStart(char[] chars, int idx) {
-    if (idx >= chars.length - 1) {
-      return false;
-    }
-    return (state == ParsingState.STATEMENT || state == ParsingState.TOK_START) &&
-        (chars[idx] == '-' && chars[idx + 1] == '-');
-  }
-
-  private boolean isNewLine(char character) {
-    return character == '\n';
-  }
-
-  private boolean isStatementStart(char character) {
-    return state == ParsingState.TOK_START && (Character.isLetterOrDigit(character));
-  }
-
-  private boolean isStatementContinue() {
-    return state == ParsingState.WITHIN_QUOTE || state == ParsingState.STATEMENT;
-  }
-
-  /**
-   * process all parsed statements so far and return a list of parsed results.
-   *
-   * @param endOfFile TRUE if the end of file.
-   * @return the list of parsed results, each of result contains one query statement or meta command.
-   * @throws InvalidStatementException
-   */
-  private List<ParsedResult> doProcessEndOfStatement(boolean endOfFile) throws InvalidStatementException {
-    List<ParsedResult> parsedResults = new ArrayList<ParsedResult>();
-    String errorMessage = "";
-    if (endOfFile) {
-      if (state == ParsingState.META) {
-        state = ParsingState.META_EOS;
-      } else if (state == ParsingState.STATEMENT) {
-        state = ParsingState.STATEMENT_EOS;
-      } else if (state == ParsingState.WITHIN_QUOTE) {
-        state = ParsingState.INVALID;
-        errorMessage = "unterminated quoted string at LINE " + lineNum;
-      }
-    }
-
-    if (isTerminateState(state)) {
-      String historyStatement = historyAppender.toString();
-      String rawStatement = rawAppender.toString();
-      if (state == ParsingState.META_EOS) {
-        parsedResults.add(new ParsedResult(META, rawStatement, historyStatement));
-        state = ParsingState.TOK_START;
-      } else if (state == ParsingState.STATEMENT_EOS) {
-        parsedResults.add(new ParsedResult(STATEMENT, rawStatement, historyStatement));
-      } else {
-        throw new InvalidStatementException("ERROR: " + errorMessage);
-      }
-
-      // reset all states
-      historyAppender.delete(0, historyAppender.length());
-      rawAppender.delete(0, rawAppender.length());
-      state = START_STATE;
-    }
-
-    return parsedResults;
-  }
-
-  /**
-   * It manually triggers the end of file.
-   *
-   * @return the list of parsed results, each of result contains one query statement or meta command.
-   * @throws InvalidStatementException
-   */
-  public List<ParsedResult> EOF() throws InvalidStatementException {
-    return doProcessEndOfStatement(true);
-  }
-
-  private static boolean isTerminateState(ParsingState state) {
-    return (state == ParsingState.META_EOS || state == ParsingState.STATEMENT_EOS || state == ParsingState.INVALID);
-  }
-
-  public ParsingState getState() {
-    return state;
-  }
-
-  public String toString() {
-    return "[" + state.name() + "]: " + historyAppender.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/c59baa3a/tajo-client/src/main/java/org/apache/tajo/cli/TajoAdminCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/TajoAdminCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/TajoAdminCommand.java
deleted file mode 100644
index 267c7a4..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/cli/TajoAdminCommand.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.tajo.cli;
-
-import org.apache.tajo.client.TajoAdmin;
-
-public class TajoAdminCommand extends TajoShellCommand {
-  private TajoAdmin admin;
-
-  public TajoAdminCommand(TajoCli.TajoCliContext context) {
-    super(context);
-    admin = new TajoAdmin(context.getConf(), context.getOutput(), context.getTajoClient());
-  }
-
-  @Override
-  public String getCommand() {
-    return "\\admin";
-  }
-
-  @Override
-  public void invoke(String[] command) throws Exception {
-    try {
-      String[] dfsCommands = new String[command.length - 1];
-      System.arraycopy(command, 1, dfsCommands, 0, dfsCommands.length);
-
-      admin.runCommand(dfsCommands);
-    } catch (Exception e) {
-      context.getOutput().println("ERROR: " + e.getMessage());
-    }
-  }
-
-  @Override
-  public String getUsage() {
-    return "<command> [options]";
-  }
-
-  @Override
-  public String getDescription() {
-    return "execute a tajo amdin command.";
-  }
-}


Mime
View raw message