testcontainers-java icon indicating copy to clipboard operation
testcontainers-java copied to clipboard

Fix resource leak in performQuery by using Consumer pattern

Open rajucomp opened this issue 2 months ago • 1 comments

PR Summary: Fix Resource Leak in performQuery Method

Overview

This PR addresses resource leaks in the performQuery method by implementing proper JDBC resource management using the Consumer pattern.

Changes Made

Core Enhancement:

  • Modified AbstractContainerDatabaseTest.performQuery() method signature:
    • Before: protected ResultSet performQuery(JdbcDatabaseContainer<?> container, String sql) throws SQLException
    • After: protected void performQuery(JdbcDatabaseContainer<?> container, String sql, Consumer<ResultSet> consumer) throws SQLException
  • Implemented try-with-resources pattern to ensure proper cleanup of Connection, Statement, and ResultSet objects
  • Prevents resource leaks by guaranteeing JDBC resources are closed after query execution

Test Updates (20 files): Updated all database module tests to use the new lambda-based pattern:

  • ClickHouse (2 files)
  • CockroachDB
  • CrateDB
  • Databend
  • DB2
  • MariaDB
  • MS SQL Server
  • MySQL (2 files)
  • OceanBase
  • Oracle (Free & XE)
  • PostgreSQL (3 files including TimescaleDB & CompatibleImage)
  • QuestDB
  • TiDB
  • Timeplus
  • YugabyteDB

Pattern Applied:

// Old pattern (resource leak)
ResultSet resultSet = performQuery(container, "SELECT 1");
int value = resultSet.getInt(1);
assertThat(value).isEqualTo(1);

// New pattern (proper resource management)
performQuery(container, "SELECT 1", resultSet -> {
    Assertions.assertThatNoException().isThrownBy(() -> {
        int value = resultSet.getInt(1);
        assertThat(value).isEqualTo(1);
    });
});

Impact

  • 21 files changed, 744 insertions(+), 251 deletions(-)
  • All tests compile successfully
  • Code formatting (Spotless) applied
  • Checkstyle validation passed

Note

This PR is scoped to the performQuery enhancement only to facilitate easier review. Additional resource leak fixes across the codebase will follow in subsequent PRs.

rajucomp avatar Oct 12 '25 09:10 rajucomp