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/18 04:00:36 UTC
git commit: TAJO-772: TajoDump cannot dump upper/lower mixed case
database names.
Repository: tajo
Updated Branches:
refs/heads/master f60975090 -> 508ebedfe
TAJO-772: TajoDump cannot dump upper/lower mixed case database names.
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/508ebedf
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/508ebedf
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/508ebedf
Branch: refs/heads/master
Commit: 508ebedfee19de0b057e166270d4acb74202079c
Parents: f609750
Author: Hyunsik Choi <hy...@apache.org>
Authored: Fri Apr 18 10:58:25 2014 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Fri Apr 18 10:58:25 2014 +0900
----------------------------------------------------------------------
CHANGES.txt | 3 ++
.../org/apache/tajo/catalog/DDLBuilder.java | 4 +-
.../java/org/apache/tajo/client/TajoDump.java | 32 ++++++++------
.../apache/tajo/engine/planner/LogicalPlan.java | 28 ++++++++++++-
.../planner/logical/CreateDatabaseNode.java | 4 +-
.../engine/planner/logical/RelationNode.java | 2 +
.../tajo/engine/planner/logical/ScanNode.java | 5 +++
.../planner/logical/TableSubQueryNode.java | 5 +++
.../java/org/apache/tajo/QueryTestCaseBase.java | 35 +++++++++++++---
.../apache/tajo/engine/query/TestDropTable.java | 5 +--
.../tajo/engine/query/TestSelectQuery.java | 22 ++++++++++
.../org/apache/tajo/client/TestTajoDump.java | 44 ++++++++++++++++++++
.../queries/TestDropTable/drop_table_ddl.sql | 2 +-
.../resources/queries/TestNetTypes/testJoin.sql | 2 +-
.../TestSelectQuery/testDatabaseRef1.sql | 1 +
.../TestSelectQuery/testDatabaseRef2.sql | 1 +
.../TestSelectQuery/testDatabaseRef3.sql | 1 +
.../results/TestNetTypes/testJoin.result | 8 ++--
.../TestSelectQuery/testDatabaseRef.result | 7 ++++
.../results/TestTajoDump/testDump1.result | 17 ++++++++
.../testBuildDDLQuotedTableName1.result | 2 +-
.../testBuildDDLQuotedTableName2.result | 2 +-
22 files changed, 197 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9b4131d..c39875a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -334,6 +334,9 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-772: TajoDump cannot dump upper/lower mixed case database names.
+ (hyunsik)
+
TAJO-765: Incorrect Configuration Classpaths. (jinho)
TAJO-563: INSERT OVERWRITE should not remove data before query success.
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
index d9cbcee..1b76f16 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
@@ -29,7 +29,7 @@ public class DDLBuilder {
StringBuilder sb = new StringBuilder();
sb.append("--\n")
- .append("-- Name: ").append(desc.getName()).append("; Type: TABLE;")
+ .append("-- Name: ").append(CatalogUtil.denormalizeIdentifier(desc.getName())).append("; Type: TABLE;")
.append(" Storage: ").append(desc.getMeta().getStoreType().name());
sb.append("\n-- Path: ").append(desc.getPath());
sb.append("\n--\n");
@@ -52,7 +52,7 @@ public class DDLBuilder {
StringBuilder sb = new StringBuilder();
sb.append("--\n")
- .append("-- Name: ").append(desc.getName()).append("; Type: TABLE;")
+ .append("-- Name: ").append(CatalogUtil.denormalizeIdentifier(desc.getName())).append("; Type: TABLE;")
.append(" Storage: ").append(desc.getMeta().getStoreType().name());
sb.append("\n-- Path: ").append(desc.getPath());
sb.append("\n--\n");
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-client/src/main/java/org/apache/tajo/client/TajoDump.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/TajoDump.java b/tajo-client/src/main/java/org/apache/tajo/client/TajoDump.java
index 63dd35a..05a921e 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/TajoDump.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoDump.java
@@ -33,6 +33,7 @@ import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
@@ -109,21 +110,27 @@ public class TajoDump {
}
PrintWriter writer = new PrintWriter(System.out);
+ dump(client, userInfo, baseDatabaseName, isDumpingAllDatabases, writer);
- printHeader(writer, userInfo);
+ System.exit(0);
+ }
+
+ public static void dump(TajoClient client, UserGroupInformation userInfo, String baseDatabaseName,
+ boolean isDumpingAllDatabases, PrintWriter out) throws SQLException, ServiceException {
+ printHeader(out, userInfo);
if (isDumpingAllDatabases) {
- for (String databaseName : client.getAllDatabaseNames()) {
- dumpDatabase(client, databaseName, writer);
+ // sort database names in an ascending lexicographic order of the names.
+ List<String> sorted = new ArrayList<String>(client.getAllDatabaseNames());
+ Collections.sort(sorted);
+
+ for (String databaseName : sorted) {
+ dumpDatabase(client, databaseName, out);
}
} else {
- dumpDatabase(client, baseDatabaseName, writer);
+ dumpDatabase(client, baseDatabaseName, out);
}
- client.close();
-
- writer.flush();
- writer.close();
- System.exit(0);
+ out.flush();
}
private static void printHeader(PrintWriter writer, UserGroupInformation userInfo) {
@@ -140,10 +147,10 @@ public class TajoDump {
throws SQLException, ServiceException {
writer.write("\n");
writer.write("--\n");
- writer.write(String.format("-- Database name: %s%n", databaseName));
+ writer.write(String.format("-- Database name: %s%n", CatalogUtil.denormalizeIdentifier(databaseName)));
writer.write("--\n");
writer.write("\n");
- writer.write(String.format("CREATE DATABASE IF NOT EXISTS %s;", databaseName));
+ writer.write(String.format("CREATE DATABASE IF NOT EXISTS %s;", CatalogUtil.denormalizeIdentifier(databaseName)));
writer.write("\n");
// returned list is immutable.
@@ -151,8 +158,7 @@ public class TajoDump {
Collections.sort(tableNames);
for (String tableName : tableNames) {
try {
- TableDesc table =
- client.getTableDesc(CatalogUtil.denormalizeIdentifier(CatalogUtil.buildFQName(databaseName,tableName)));
+ TableDesc table = client.getTableDesc(CatalogUtil.buildFQName(databaseName, tableName));
if (table.isExternal()) {
writer.write(DDLBuilder.buildDDLForExternalTable(table));
} else {
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
index 52dbde8..98fbf42 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
@@ -262,6 +262,26 @@ public class LogicalPlan {
return found.getQualifiedName();
}
+ public String resolveDatabase(QueryBlock block, String tableName) throws PlanningException {
+ List<String> found = new ArrayList<String>();
+ for (RelationNode relation : block.getRelations()) {
+ // check alias name or table name
+ if (CatalogUtil.extractSimpleName(relation.getCanonicalName()).equals(tableName) ||
+ CatalogUtil.extractSimpleName(relation.getTableName()).equals(tableName)) {
+ // obtain the database name
+ found.add(CatalogUtil.extractQualifier(relation.getTableName()));
+ }
+ }
+
+ if (found.size() == 0) {
+ return null;
+ } else if (found.size() > 1) {
+ throw new PlanningException("Ambiguous table name \"" + tableName + "\"");
+ }
+
+ return found.get(0);
+ }
+
/**
* It resolves a column.
*/
@@ -277,8 +297,12 @@ public class LogicalPlan {
qualifier = columnRef.getQualifier();
canonicalName = columnRef.getCanonicalName();
} else {
- qualifier = CatalogUtil.buildFQName(currentDatabase, columnRef.getQualifier());
- canonicalName = CatalogUtil.buildFQName(currentDatabase, columnRef.getCanonicalName());
+ String resolvedDatabaseName = resolveDatabase(block, columnRef.getQualifier());
+ if (resolvedDatabaseName == null) {
+ throw new NoSuchColumnException(columnRef.getQualifier());
+ }
+ qualifier = CatalogUtil.buildFQName(resolvedDatabaseName, columnRef.getQualifier());
+ canonicalName = CatalogUtil.buildFQName(qualifier, columnRef.getName());
}
qualifiedName = CatalogUtil.buildFQName(qualifier, columnRef.getName());
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateDatabaseNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateDatabaseNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateDatabaseNode.java
index e0b2f0f..9dc73e2 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateDatabaseNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateDatabaseNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.engine.planner.logical;
import com.google.common.base.Objects;
+import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.engine.planner.PlanString;
public class CreateDatabaseNode extends LogicalNode implements Cloneable {
@@ -70,7 +71,8 @@ public class CreateDatabaseNode extends LogicalNode implements Cloneable {
@Override
public String toString() {
- return "CREATE DATABASE " + (ifNotExists ? " IF NOT EXISTS " : "") + databaseName;
+ return "CREATE DATABASE " + (ifNotExists ? " IF NOT EXISTS " : "")
+ + CatalogUtil.denormalizeIdentifier(databaseName);
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/RelationNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/RelationNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/RelationNode.java
index 9e4575c..83c16cd 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/RelationNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/RelationNode.java
@@ -39,6 +39,8 @@ public abstract class RelationNode extends LogicalNode {
public abstract boolean hasAlias();
+ public abstract String getAlias();
+
public abstract String getTableName();
public abstract String getCanonicalName();
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
index 1488d8c..27782a2 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
@@ -79,6 +79,11 @@ public class ScanNode extends RelationNode implements Projectable, Cloneable {
return alias != null;
}
+ @Override
+ public String getAlias() {
+ return alias;
+ }
+
public void setBroadcastTable(boolean broadcastTable) {
this.broadcastTable = broadcastTable;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
index 52f1027..4d0090b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
@@ -51,6 +51,11 @@ public class TableSubQueryNode extends RelationNode implements Projectable {
return false;
}
+ @Override
+ public String getAlias() {
+ return null;
+ }
+
public String getTableName() {
return tableName;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/QueryTestCaseBase.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/QueryTestCaseBase.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/QueryTestCaseBase.java
index db40169..961184c 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/QueryTestCaseBase.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/QueryTestCaseBase.java
@@ -165,7 +165,7 @@ public class QueryTestCaseBase {
@AfterClass
public static void tearDownClass() throws ServiceException {
for (String tableName : createdTableGlobalSet) {
- client.updateQuery("DROP TABLE IF EXISTS " +tableName);
+ client.updateQuery("DROP TABLE IF EXISTS " + CatalogUtil.denormalizeIdentifier(tableName));
}
createdTableGlobalSet.clear();
@@ -182,7 +182,13 @@ public class QueryTestCaseBase {
}
public QueryTestCaseBase() {
- this.currentDatabase = CatalogUtil.normalizeIdentifier(getClass().getSimpleName());
+ // hive 0.12 does not support quoted identifier.
+ // So, we use lower case database names when Tajo uses HCatalogStore.
+ if (testingCluster.isHCatalogStoreRunning()) {
+ this.currentDatabase = getClass().getSimpleName().toLowerCase();
+ } else {
+ this.currentDatabase = getClass().getSimpleName();
+ }
init();
}
@@ -200,7 +206,7 @@ public class QueryTestCaseBase {
try {
// if the current database is "default", we don't need create it because it is already prepated at startup time.
if (!currentDatabase.equals(TajoConstants.DEFAULT_DATABASE_NAME)) {
- client.updateQuery("CREATE DATABASE IF NOT EXISTS " + currentDatabase);
+ client.updateQuery("CREATE DATABASE IF NOT EXISTS " + CatalogUtil.denormalizeIdentifier(currentDatabase));
}
client.selectDatabase(currentDatabase);
} catch (ServiceException e) {
@@ -285,12 +291,29 @@ public class QueryTestCaseBase {
Path resultFile = getResultFile(resultFileName);
assertTrue(resultFile.toString() + " existence check", fs.exists(resultFile));
try {
- verifyResult(message, result, resultFile);
+ verifyResultText(message, result, resultFile);
} catch (SQLException e) {
throw new IOException(e);
}
}
+ public final void assertStrings(String actual) throws IOException {
+ assertStrings(actual, name.getMethodName() + ".result");
+ }
+
+ public final void assertStrings(String actual, String resultFileName) throws IOException {
+ assertStrings("Result Verification", actual, resultFileName);
+ }
+
+ public final void assertStrings(String message, String actual, String resultFileName) throws IOException {
+ FileSystem fs = currentQueryPath.getFileSystem(testBase.getTestingCluster().getConfiguration());
+ Path resultFile = getResultFile(resultFileName);
+ assertTrue(resultFile.toString() + " existence check", fs.exists(resultFile));
+
+ String expectedResult = FileUtil.readTextFile(new File(resultFile.toUri()));
+ assertEquals(message, expectedResult, actual);
+ }
+
/**
* Release all resources
*
@@ -381,7 +404,7 @@ public class QueryTestCaseBase {
return sb.toString();
}
- private void verifyResult(String message, ResultSet res, Path resultFile) throws SQLException, IOException {
+ private void verifyResultText(String message, ResultSet res, Path resultFile) throws SQLException, IOException {
String actualResult = resultSetToString(res);
String expectedResult = FileUtil.readTextFile(new File(resultFile.toUri()));
assertEquals(message, expectedResult.trim(), actualResult.trim());
@@ -460,7 +483,7 @@ public class QueryTestCaseBase {
assertTrue("table '" + createdTableName + "' creation check", client.existTable(createdTableName));
if (isLocalTable) {
- createdTableGlobalSet.add(CatalogUtil.denormalizeIdentifier(createdTableName));
+ createdTableGlobalSet.add(createdTableName);
createdTableNames.add(tableName);
}
} else if (expr.getType() == OpType.DropTable) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestDropTable.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestDropTable.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestDropTable.java
index e362eef..0020156 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestDropTable.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestDropTable.java
@@ -30,10 +30,9 @@ public class TestDropTable extends QueryTestCaseBase {
@Test
public final void testDropManagedTable() throws Exception {
- List<String> createdNames = executeDDL("table1_ddl.sql", "table1.tbl", "ABC");
+ List<String> createdNames = executeDDL("table1_ddl.sql", "table1.tbl", "abc");
assertTableExists(createdNames.get(0));
executeDDL("drop_table_ddl.sql", null);
- assertTableNotExists("ABC");
+ assertTableNotExists("abc");
}
-
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
index 96f3bbe..05c510b 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
@@ -278,4 +278,26 @@ public class TestSelectQuery extends QueryTestCaseBase {
assertResultSet(res);
cleanupQuery(res);
}
+
+ @Test
+ public final void testDatabaseRef() throws Exception {
+ if (!testingCluster.isHCatalogStoreRunning()) {
+ executeString("CREATE DATABASE \"TestSelectQuery\"").close();
+ executeString("CREATE TABLE \"TestSelectQuery\".\"LineItem\" AS SELECT * FROM default.lineitem" ).close();
+
+ ResultSet res = executeFile("testDatabaseRef1.sql");
+ assertResultSet(res, "testDatabaseRef.result");
+ cleanupQuery(res);
+
+ res = executeFile("testDatabaseRef2.sql");
+ assertResultSet(res, "testDatabaseRef.result");
+ cleanupQuery(res);
+
+ res = executeFile("testDatabaseRef3.sql");
+ assertResultSet(res, "testDatabaseRef.result");
+ cleanupQuery(res);
+
+ executeString("DROP DATABASE \"TestSelectQuery\"").close();
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/org/apache/tajo/client/TestTajoDump.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/org/apache/tajo/client/TestTajoDump.java b/tajo-core/tajo-core-backend/src/test/resources/org/apache/tajo/client/TestTajoDump.java
new file mode 100644
index 0000000..f98a9f5
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/org/apache/tajo/client/TestTajoDump.java
@@ -0,0 +1,44 @@
+/**
+ * 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.client;
+
+import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.tajo.QueryTestCaseBase;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+
+public class TestTajoDump extends QueryTestCaseBase {
+
+ @Test
+ public void testDump1() throws Exception {
+ executeString("CREATE TABLE \"" +getCurrentDatabase() +
+ "\".\"TableName1\" (\"Age\" int, \"FirstName\" TEXT, lastname TEXT)");
+
+ UserGroupInformation userInfo = UserGroupInformation.getCurrentUser();
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ PrintWriter printWriter = new PrintWriter(bos);
+ TajoDump.dump(client, userInfo, getCurrentDatabase(), false, printWriter);
+ printWriter.flush();
+ printWriter.close();
+ assertStrings(new String(bos.toByteArray()));
+ bos.close();
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/queries/TestDropTable/drop_table_ddl.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestDropTable/drop_table_ddl.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestDropTable/drop_table_ddl.sql
index c770b43..c58f459 100644
--- a/tajo-core/tajo-core-backend/src/test/resources/queries/TestDropTable/drop_table_ddl.sql
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestDropTable/drop_table_ddl.sql
@@ -1 +1 @@
-DROP TABLE ABC PURGE
\ No newline at end of file
+DROP TABLE abc PURGE;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/queries/TestNetTypes/testJoin.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestNetTypes/testJoin.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestNetTypes/testJoin.sql
index efb9db3..ec4f8e6 100644
--- a/tajo-core/tajo-core-backend/src/test/resources/queries/TestNetTypes/testJoin.sql
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestNetTypes/testJoin.sql
@@ -1 +1 @@
-select * from table1 as t1, table2 as t2 where t1.addr = t2.addr order by t2.name;
\ No newline at end of file
+select t1.*,t2.* from table1 as t1, table2 as t2 where t1.addr = t2.addr order by t2.name;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef1.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef1.sql
new file mode 100644
index 0000000..a483758
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef1.sql
@@ -0,0 +1 @@
+SELECT L_ORDERKEY FROM "TestSelectQuery"."LineItem";
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef2.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef2.sql
new file mode 100644
index 0000000..6abc3f9
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef2.sql
@@ -0,0 +1 @@
+SELECT "LineItem".L_ORDERKEY FROM "TestSelectQuery"."LineItem";
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef3.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef3.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef3.sql
new file mode 100644
index 0000000..3fded5f
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestSelectQuery/testDatabaseRef3.sql
@@ -0,0 +1 @@
+SELECT "TestSelectQuery"."LineItem".L_ORDERKEY FROM "TestSelectQuery"."LineItem";
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/results/TestNetTypes/testJoin.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestNetTypes/testJoin.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestNetTypes/testJoin.result
index b5817f8..ea979ac 100644
--- a/tajo-core/tajo-core-backend/src/test/resources/results/TestNetTypes/testJoin.result
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestNetTypes/testJoin.result
@@ -1,6 +1,6 @@
id,name,score,type,addr,id,name,score,type,addr
-------------------------------
-0,,20.0,d,127.0.0.1,1,ooo,1.1,a,127.0.0.1
-1,,0.0,a,127.0.0.8,3,qqq,3.4,c,127.0.0.8
-2,,0.0,b,127.0.0.8,3,qqq,3.4,c,127.0.0.8
-0,,20.0,d,127.0.0.1,4,rrr,4.5,d,127.0.0.1
\ No newline at end of file
+1,ooo,1.1,a,127.0.0.1,0,,20.0,d,127.0.0.1
+3,qqq,3.4,c,127.0.0.8,1,,0.0,a,127.0.0.8
+3,qqq,3.4,c,127.0.0.8,2,,0.0,b,127.0.0.8
+4,rrr,4.5,d,127.0.0.1,0,,20.0,d,127.0.0.1
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/results/TestSelectQuery/testDatabaseRef.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestSelectQuery/testDatabaseRef.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestSelectQuery/testDatabaseRef.result
new file mode 100644
index 0000000..337de32
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestSelectQuery/testDatabaseRef.result
@@ -0,0 +1,7 @@
+l_orderkey
+-------------------------------
+1
+1
+2
+3
+3
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/results/TestTajoDump/testDump1.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestTajoDump/testDump1.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestTajoDump/testDump1.result
new file mode 100644
index 0000000..bdf31fa
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestTajoDump/testDump1.result
@@ -0,0 +1,17 @@
+--
+-- Tajo database dump
+--
+-- Dump user: hyunsik
+-- Dump date: 04/17/2014 13:33:45
+--
+
+
+--
+-- Database name: "TestTajoDump"
+--
+
+CREATE DATABASE IF NOT EXISTS "TestTajoDump";
+--
+-- Name: TestTajoDump.TableName1; Type: TABLE; Storage: CSV
+--
+CREATE TABLE "TestTajoDump"."TableName1" ("Age" INT4, "FirstName" TEXT, lastname TEXT) USING CSV WITH ('csvfile.delimiter'='|');
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName1.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName1.result b/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName1.result
index ee9845e..3ff5134 100644
--- a/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName1.result
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName1.result
@@ -1,5 +1,5 @@
--
--- Name: db1.TABLE2; Type: TABLE; Storage: CSV
+-- Name: db1."TABLE2"; Type: TABLE; Storage: CSV
-- Path: /table1
--
CREATE EXTERNAL TABLE db1."TABLE2" (name BLOB, addr TEXT, "FirstName" TEXT, "LastName" TEXT, "with" TEXT) USING CSV WITH ('compression.codec'='org.apache.hadoop.io.compress.GzipCodec', 'csvfile.delimiter'='|') PARTITION BY COLUMN("BirthYear" INT4) LOCATION '/table1';
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/508ebedf/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName2.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName2.result b/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName2.result
index 40e4ff1..da391cb 100644
--- a/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName2.result
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/testDDLBuilder/testBuildDDLQuotedTableName2.result
@@ -1,5 +1,5 @@
--
--- Name: db1.TABLE1; Type: TABLE; Storage: CSV
+-- Name: db1."TABLE1"; Type: TABLE; Storage: CSV
-- Path: /table1
--
CREATE TABLE db1."TABLE1" (name BLOB, addr TEXT, "FirstName" TEXT, "LastName" TEXT, "with" TEXT) USING CSV WITH ('compression.codec'='org.apache.hadoop.io.compress.GzipCodec', 'csvfile.delimiter'='|') PARTITION BY COLUMN("BirthYear" INT4);
\ No newline at end of file