You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2015/08/20 01:38:44 UTC

sqoop git commit: SQOOP-2500: Sqoop2: Findbugs: Fix the resource leak problem in ProviderAsserts and DatabaseProvider

Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 45e1871d2 -> 93d9a7714


SQOOP-2500: Sqoop2: Findbugs: Fix the resource leak problem in ProviderAsserts and DatabaseProvider

(Colin Ma via Jarek Jarcec Cecho)


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

Branch: refs/heads/sqoop2
Commit: 93d9a7714362215e9a7c46371aff92feaa51af7e
Parents: 45e1871
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Wed Aug 19 16:38:23 2015 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Wed Aug 19 16:38:23 2015 -0700

----------------------------------------------------------------------
 .../common/test/asserts/ProviderAsserts.java    |   8 +-
 .../sqoop/common/test/db/DatabaseProvider.java  | 117 +------------------
 2 files changed, 8 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/93d9a771/common-test/src/main/java/org/apache/sqoop/common/test/asserts/ProviderAsserts.java
----------------------------------------------------------------------
diff --git a/common-test/src/main/java/org/apache/sqoop/common/test/asserts/ProviderAsserts.java b/common-test/src/main/java/org/apache/sqoop/common/test/asserts/ProviderAsserts.java
index 4d6c8ec..c528e53 100644
--- a/common-test/src/main/java/org/apache/sqoop/common/test/asserts/ProviderAsserts.java
+++ b/common-test/src/main/java/org/apache/sqoop/common/test/asserts/ProviderAsserts.java
@@ -23,6 +23,7 @@ import org.apache.sqoop.common.test.db.TableName;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Statement;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
@@ -56,9 +57,8 @@ public class ProviderAsserts {
    * @param values Values that should be present in the table
    */
   public static void assertRow(DatabaseProvider provider, TableName tableName, boolean escapeValues, Object []conditions, Object ...values) {
-    ResultSet rs = null;
-    try {
-      rs = provider.getRows(tableName, escapeValues, conditions);
+    try (Statement stmt = provider.getConnection().createStatement();
+         ResultSet rs = stmt.executeQuery(provider.getRowsSql(tableName, escapeValues, conditions))) {
 
       if(! rs.next()) {
         fail("No rows found.");
@@ -78,8 +78,6 @@ public class ProviderAsserts {
     } catch (SQLException e) {
       LOG.error("Unexpected SQLException", e);
       fail("Unexpected SQLException: " + e);
-    } finally {
-      provider.closeResultSetWithStatement(rs);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/93d9a771/common-test/src/main/java/org/apache/sqoop/common/test/db/DatabaseProvider.java
----------------------------------------------------------------------
diff --git a/common-test/src/main/java/org/apache/sqoop/common/test/db/DatabaseProvider.java b/common-test/src/main/java/org/apache/sqoop/common/test/db/DatabaseProvider.java
index dd4e546..a6ae490 100644
--- a/common-test/src/main/java/org/apache/sqoop/common/test/db/DatabaseProvider.java
+++ b/common-test/src/main/java/org/apache/sqoop/common/test/db/DatabaseProvider.java
@@ -213,84 +213,13 @@ abstract public class DatabaseProvider {
    */
   public void executeUpdate(String query) {
     LOG.info("Executing query: " + query);
-    Statement stmt = null;
 
-    try {
-      stmt = databaseConnection.createStatement();
+    try (Statement stmt = databaseConnection.createStatement()) {
       stmt.executeUpdate(query);
     } catch (SQLException e) {
       LOG.error("Error in executing query", e);
       throw new RuntimeException("Error in executing query", e);
-    } finally {
-      try {
-        if(stmt != null) {
-          stmt.close();
-        }
-      } catch (SQLException e) {
-        LOG.info("Cant' close statement", e);
-      }
-    }
-  }
-
-  /**
-   * Execute given query in a new statement object and return corresponding
-   * result set. Caller is responsible for closing both ResultSet and Statement
-   * object!
-   *
-   * @param query Query to execute
-   * @return Generated ResultSet
-   */
-  public ResultSet executeQuery(String query) {
-    LOG.info("Executing query: " + query);
-    Statement stmt = null;
-
-    try {
-      stmt = databaseConnection.createStatement();
-      return stmt.executeQuery(query);
-    } catch (SQLException e) {
-      LOG.error("Error in executing query", e);
-      throw new RuntimeException("Error in executing query", e);
-    }
-  }
-
-  /**
-   * Execute given insert query in a new statement object and return
-   * generated IDs.
-   *
-   * @param query Query to execute
-   * @return Generated ID.
-   */
-  public Long executeInsertQuery(String query, Object... args) {
-    LOG.info("Executing query: " + query);
-    ResultSet rs = null;
-
-    try {
-      PreparedStatement stmt = databaseConnection.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
-      for (int i = 0; i < args.length; ++i) {
-        if (args[i] instanceof String) {
-          stmt.setString(i + 1, (String) args[i]);
-        } else if (args[i] instanceof Long) {
-          stmt.setLong(i + 1, (Long) args[i]);
-        } else if (args[i] instanceof Boolean) {
-          stmt.setBoolean(i + 1, (Boolean) args[i]);
-        } else {
-          stmt.setObject(i + 1, args[i]);
-        }
-      }
-
-      stmt.execute();
-      rs = stmt.getGeneratedKeys();
-      if (rs.next()) {
-        return rs.getLong(1);
-      }
-    } catch (SQLException e) {
-      LOG.error("Error in executing query", e);
-      throw new RuntimeException("Error in executing query", e);
-    } finally {
-      closeResultSetWithStatement(rs);
     }
-
-    return -1L;
   }
 
   /**
@@ -366,22 +295,11 @@ abstract public class DatabaseProvider {
    * Return rows that match given conditions.
    *
    * @param tableName Table name
-   * @param conditions Conditions in form of double values - column name and value, for example: "id", 1 or "last_update_date", null
-   * @return ResultSet with given criteria
-   */
-  public ResultSet getRows(TableName tableName, Object []conditions) {
-    return getRows(tableName, true, conditions);
-  }
-
-  /**
-   * Return rows that match given conditions.
-   *
-   * @param tableName Table name
    * @param escapeValues Should the values be escaped based on their type or not
    * @param conditions Conditions in form of double values - column name and value, for example: "id", 1 or "last_update_date", null
    * @return ResultSet with given criteria
    */
-  public ResultSet getRows(TableName tableName, boolean escapeValues, Object []conditions) {
+  public String getRowsSql(TableName tableName, boolean escapeValues, Object []conditions) {
     // Columns are in form of two strings - name and value
     if(conditions.length % 2 != 0) {
       throw new RuntimeException("Incorrect number of parameters.");
@@ -410,7 +328,7 @@ abstract public class DatabaseProvider {
       sb.append(" WHERE ").append(StringUtils.join(conditionList, " AND "));
     }
 
-    return executeQuery(sb.toString());
+    return sb.toString();
   }
 
   /**
@@ -477,9 +395,7 @@ abstract public class DatabaseProvider {
     StringBuilder sb = new StringBuilder("SELECT COUNT(*) FROM ");
     sb.append(getTableFragment(tableName));
 
-    ResultSet rs = null;
-    try {
-      rs = executeQuery(sb.toString());
+    try (Statement stmt = databaseConnection.createStatement(); ResultSet rs = stmt.executeQuery(sb.toString())) {
       if(!rs.next()) {
         throw new RuntimeException("Row count query did not returned any rows.");
       }
@@ -488,25 +404,6 @@ abstract public class DatabaseProvider {
     } catch (SQLException e) {
       LOG.error("Can't get number of rows: ", e);
       throw new RuntimeException("Can't get number of rows: ", e);
-    } finally {
-      closeResultSetWithStatement(rs);
-    }
-  }
-
-  /**
-   * Close given result set (if not null) and associated statement.
-   *
-   * @param rs ResultSet to close.
-   */
-  public void closeResultSetWithStatement(ResultSet rs) {
-    if(rs != null) {
-      try {
-        Statement stmt = rs.getStatement();
-        rs.close();
-        stmt.close();
-      } catch (SQLException e) {
-        LOG.info("Ignoring exception: ", e);
-      }
     }
   }
 
@@ -531,10 +428,8 @@ abstract public class DatabaseProvider {
   public void dumpTable(TableName tableName) {
     String query = "SELECT * FROM " + getTableFragment(tableName);
     List<String> list = new LinkedList<String>();
-    ResultSet rs = null;
 
-    try {
-      rs = executeQuery(query);
+    try (Statement stmt = databaseConnection.createStatement(); ResultSet rs = stmt.executeQuery(query)) {
 
       // Header with column names
       ResultSetMetaData md = rs.getMetaData();
@@ -555,8 +450,6 @@ abstract public class DatabaseProvider {
 
     } catch (SQLException e) {
       LOG.info("Ignoring exception: ", e);
-    } finally {
-      closeResultSetWithStatement(rs);
     }
   }