You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2013/10/13 16:22:15 UTC

git commit: TAJO-243: The 'tajo_dump' does not include options of table. (jinho)

Updated Branches:
  refs/heads/master b23c2b5fe -> 56a8e2404


TAJO-243: The 'tajo_dump' does not include options of table. (jinho)


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

Branch: refs/heads/master
Commit: 56a8e240471223e46b96f715bfcdd51305ad97f2
Parents: b23c2b5
Author: jinossy <ji...@gmail.com>
Authored: Sun Oct 13 23:21:19 2013 +0900
Committer: jinossy <ji...@gmail.com>
Committed: Sun Oct 13 23:21:19 2013 +0900

----------------------------------------------------------------------
 CHANGES.txt                                     |  2 +
 .../org/apache/tajo/catalog/TableMetaImpl.java  | 14 +++----
 .../tajo/catalog/store/AbstractDBStore.java     | 41 ++++++++------------
 .../apache/tajo/engine/parser/SQLAnalyzer.java  |  4 +-
 .../tajo/engine/query/TestNullValues.java       |  2 +-
 .../java/org/apache/tajo/storage/CSVFile.java   |  4 +-
 6 files changed, 30 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ae4ff35..98e29c8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -197,6 +197,8 @@ Release 0.2.0 - unreleased
 
   BUG FIXES
 
+    TAJO-243: The 'tajo_dump' does not include options of table. (jinho)
+
     TAJO-244: assignToNonLeafTasks causes NPE occurs occasionally. (hyunsik)
 
     TAJO-242: Enable omitted broadcast join feature after TAJO-184. (hyunsik)

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java
index 0f054a4..0bf1615 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java
@@ -139,20 +139,20 @@ public class TableMetaImpl implements TableMeta, GsonObject {
 
   @Override
   public Options getOptions() {
-    return options;
-  }
-  
-  @Override
-  public Map<String,String> toMap() {
     TableProtoOrBuilder p = viaProto ? proto : builder;
     if (options != null) {
-      return this.options.getAllKeyValus();
+      return this.options;
     }
     if (!p.hasParams()) {
       return null;
     }
     this.options = new Options(p.getParams());
-    return options.getAllKeyValus();
+    return options;
+  }
+  
+  @Override
+  public Map<String,String> toMap() {
+    return getOptions().getAllKeyValus();
   }
 	
 	public boolean equals(Object object) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
index 71e4dd0..33e3bff 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
@@ -37,7 +37,6 @@ import org.apache.tajo.exception.InternalException;
 import java.io.IOException;
 import java.sql.*;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
 
@@ -218,16 +217,24 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
         columnId++;
       }
 
-      Iterator<Entry<String, String>> it = table.getMeta().toMap().entrySet().iterator();
-      String optSql;
-      while (it.hasNext()) {
-        optSql = keyvalToSQL(table, it.next());
-        if (LOG.isDebugEnabled()) {
-          LOG.debug(optSql);
+
+      String optSql = String.format("INSERT INTO %s (%s, key_, value_) VALUES(?, ?, ?)", TB_OPTIONS, C_TABLE_ID);
+      PreparedStatement pstmt = getConnection().prepareStatement(optSql);
+      try {
+        for (Entry<String, String> entry : table.getMeta().toMap().entrySet()) {
+          pstmt.setString(1, table.getName());
+          pstmt.setString(2, entry.getKey());
+          pstmt.setString(3, entry.getValue());
+          if (LOG.isDebugEnabled()) {
+            LOG.debug(optSql);
+          }
+          pstmt.addBatch();
         }
-        stmt.addBatch(optSql);
+        pstmt.executeBatch();
+      } finally {
+        CatalogUtil.closeSQLWrapper(pstmt);
       }
-      stmt.executeBatch();
+
       if (table.getMeta().getStat() != null) {
         sql = "INSERT INTO " + TB_STATISTICS + " (" + C_TABLE_ID + ", num_rows, num_bytes) "
             + "VALUES ('" + table.getName() + "', "
@@ -263,20 +270,6 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
     return sql;
   }
 
-  private String keyvalToSQL(final TableDesc desc,
-                             final Entry<String, String> keyVal) {
-    String sql =
-        "INSERT INTO " + TB_OPTIONS
-            + " (" + C_TABLE_ID + ", key_, value_) "
-            + "VALUES("
-            + "'" + desc.getName() + "',"
-            + "'" + keyVal.getKey() + "',"
-            + "'" + keyVal.getValue() + "'"
-            + ")";
-
-    return sql;
-  }
-
   @Override
   public boolean existTable(final String name) throws IOException {
     StringBuilder sql = new StringBuilder();
@@ -749,4 +742,4 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
     CatalogUtil.closeSQLWrapper(conn);
     LOG.info("Shutdown database (" + jdbcUri + ")");
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
index 49494a9..bdd85ce 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
@@ -1075,9 +1075,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
     for (Map.Entry<String, String> entry : map.entrySet()) {
       if (entry.getKey().equals(CSVFile.DELIMITER)) {
         params.put(entry.getKey(), escapeDelimiter(entry.getValue()));
-      } else if (entry.getKey().equals(CSVFile.NULL)) {
-        params.put(entry.getKey(), StringEscapeUtils.unescapeJava(entry.getValue()));
-      } else {
+      }  else {
         params.put(entry.getKey(), entry.getValue());
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestNullValues.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestNullValues.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestNullValues.java
index 4c0eec8..b0778d4 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestNullValues.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestNullValues.java
@@ -147,7 +147,7 @@ public class TestNullValues {
     };
     Options opts = new Options();
     opts.put(CSVFile.DELIMITER, ",");
-    opts.put(CSVFile.NULL, "\\N");
+    opts.put(CSVFile.NULL, "\\\\N");
     ResultSet res = TajoTestingCluster
         .run(table, schemas, opts, new String[][]{data},
             "select * from nulltable4 where col1 is null and col2 is null and col3 is null and col5 is null and col4 = 43578");

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/56a8e240/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
index 3021f7d..58d772e 100644
--- a/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
+++ b/tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
@@ -78,7 +78,7 @@ public class CSVFile {
       this.schema = meta.getSchema();
       this.delimiter = StringEscapeUtils.unescapeJava(this.meta.getOption(DELIMITER, DELIMITER_DEFAULT)).charAt(0);
 
-      String nullCharacters = this.meta.getOption(NULL);
+      String nullCharacters = StringEscapeUtils.unescapeJava(this.meta.getOption(NULL));
       if (StringUtils.isEmpty(nullCharacters)) {
         nullChars = NullDatum.get().asTextBytes();
       } else {
@@ -306,7 +306,7 @@ public class CSVFile {
       String delim  = fragment.getMeta().getOption(DELIMITER, DELIMITER_DEFAULT);
       this.delimiter = StringEscapeUtils.unescapeJava(delim).charAt(0);
 
-      String nullCharacters = fragment.getMeta().getOption(NULL);
+      String nullCharacters = StringEscapeUtils.unescapeJava(fragment.getMeta().getOption(NULL));
       if (StringUtils.isEmpty(nullCharacters)) {
         nullChars = NullDatum.get().asTextBytes();
       } else {