[ 
https://issues.apache.org/jira/browse/TAJO-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14642205#comment-14642205
 ] 

ASF GitHub Bot commented on TAJO-1346:
--------------------------------------

Github user hyunsik commented on a diff in the pull request:

    https://github.com/apache/tajo/pull/630#discussion_r35503742
  
    --- Diff: 
tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
 ---
    @@ -1245,116 +1242,118 @@ private void addNewColumn(int tableId, 
CatalogProtos.ColumnProto columnProto) th
     
       public void addPartition(int tableId, CatalogProtos.PartitionDescProto 
partition) throws CatalogException {
         Connection conn = null;
    -    PreparedStatement pstmt = null;
    -    final String ADD_PARTITION_SQL =
    -      "INSERT INTO " + TB_PARTTIONS
    -        + " (" + COL_TABLES_PK + ", PARTITION_NAME, PATH) VALUES (?,?,?)";
    -
    -    final String ADD_PARTITION_KEYS_SQL =
    -      "INSERT INTO " + TB_PARTTION_KEYS + " (" + COL_PARTITIONS_PK + ", " 
+ COL_COLUMN_NAME + ", "
    -      + COL_PARTITION_VALUE + ") VALUES (?,?,?)";
    +    Statement stmt = null;
     
         try {
    -
    -      if (LOG.isDebugEnabled()) {
    -        LOG.debug(ADD_PARTITION_SQL);
    -      }
    -
           conn = getConnection();
    -      pstmt = conn.prepareStatement(ADD_PARTITION_SQL);
    -      pstmt.setInt(1, tableId);
    -      pstmt.setString(2, partition.getPartitionName());
    -      pstmt.setString(3, partition.getPath());
    -      pstmt.executeUpdate();
    -      pstmt.close();
    +      conn.setAutoCommit(false);
    +      stmt = conn.createStatement();
     
    -      if (partition.getPartitionKeysCount() > 0) {
    -        pstmt = conn.prepareStatement(ADD_PARTITION_KEYS_SQL);
    -        int partitionId = getPartitionId(tableId, 
partition.getPartitionName());
    -        addPartitionKeys(pstmt, partitionId, partition);
    -        pstmt.executeBatch();
    +      addPartition(tableId, partition, stmt, new StringBuilder());
    +      addPartitionKeys(tableId, partition, stmt, new StringBuilder());
    +      stmt.executeBatch();
    +
    +      if (conn != null) {
    +        conn.commit();
           }
         } catch (SQLException se) {
    +      if (conn != null) {
    +        try {
    +          conn.rollback();
    +        } catch (SQLException e) {
    +          LOG.error(e, e);
    +        }
    +      }
           throw new TajoInternalError(se);
         } finally {
    -      CatalogUtil.closeQuietly(pstmt);
    +      CatalogUtil.closeQuietly(stmt);
         }
       }
     
    -  public int getPartitionId(int tableId, String partitionName) throws 
CatalogException {
    -    Connection conn = null;
    -    ResultSet res = null;
    -    PreparedStatement pstmt = null;
    -    int retValue = -1;
    -
    +  public void addPartition(int tableId, CatalogProtos.PartitionDescProto 
partition,
    +                           Statement stmt, StringBuilder sb) throws 
CatalogException {
         try {
    -      String sql = "SELECT " + COL_PARTITIONS_PK + " FROM " + TB_PARTTIONS 
+
    -        " WHERE " + COL_TABLES_PK + " = ? AND PARTITION_NAME = ? ";
    +      sb.delete(0, sb.length());
     
    -      if (LOG.isDebugEnabled()) {
    -        LOG.debug(sql);
    -      }
    -
    -      conn = getConnection();
    -      pstmt = conn.prepareStatement(sql);
    -      pstmt.setInt(1, tableId);
    -      pstmt.setString(2, partitionName);
    -      res = pstmt.executeQuery();
    +      sb.append("INSERT INTO ").append(TB_PARTTIONS).append(" ");
    +      sb.append(" (").append(COL_TABLES_PK).append(", PARTITION_NAME, 
PATH)");
    +      sb.append(" VALUES (").append(tableId).append(", 
'").append(partition.getPartitionName());
    +      sb.append("' , '").append(partition.getPath()).append("')");
     
    -      if (res.next()) {
    -        retValue = res.getInt(1);
    -      }
    +      stmt.addBatch(sb.toString());
         } catch (SQLException se) {
           throw new TajoInternalError(se);
    -    } finally {
    -      CatalogUtil.closeQuietly(pstmt, res);
         }
    -    return retValue;
       }
     
    -  private void addPartitionKeys(PreparedStatement pstmt, int partitionId, 
PartitionDescProto partition) throws
    -    SQLException {
    -    for (int i = 0; i < partition.getPartitionKeysCount(); i++) {
    -      PartitionKeyProto partitionKey = partition.getPartitionKeys(i);
    +  public void addPartitionKeys(int tableId, 
CatalogProtos.PartitionDescProto partition,
    --- End diff --
    
    StringBuilder parameter seems to be used to reuse StringBuilder object. I'd 
like to recommend that do not try code-level optimization until the code part 
actually causes bottleneck. This kind of optimization is not effective whereas 
it is harmful for code readability.


> Create dynamic partitions to CatalogStore by running insert query or CTAS 
> query.
> --------------------------------------------------------------------------------
>
>                 Key: TAJO-1346
>                 URL: https://issues.apache.org/jira/browse/TAJO-1346
>             Project: Tajo
>          Issue Type: Sub-task
>          Components: Physical Operator
>            Reporter: Jaehwa Jung
>            Assignee: Jaehwa Jung
>
> Currently, If new partitions are added to HDFS by ColPartitionStoreExec, 
> CatalogStore will not be aware of these partitions. So, Tajo need to load 
> newly added partitions automatically to CatalogStore by running insert query 
> or CTAS query.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to