Message-ID: From: "vwassan (@vwassan)" To: "pgjdbc/pgjdbc" Date: Fri, 12 Sep 2025 20:30:13 +0000 Subject: [pgjdbc/pgjdbc] PR #3796: Add configurable boolean-to-numeric conversion for ResultSet getters List-Id: X-GitHub-Author-Id: 65421598 X-GitHub-Author-Login: vwassan X-GitHub-Issue: 3796 X-GitHub-Repo: pgjdbc/pgjdbc X-GitHub-State: merged X-GitHub-Type: pull_request X-GitHub-Url: https://github.com/pgjdbc/pgjdbc/pull/3796 Content-Type: text/plain; charset=utf-8 Addresses: https://github.com/pgjdbc/pgjdbc/issues/367 ### Problem: When calling numeric getters (getByte(), getInt(), getLong(), getShort(), getFloat(), getDouble(), getBigDecimal()) on PostgreSQL boolean columns, the driver throws PSQLException: Bad value for type byte : f. ### Solution: Added a new connection property `convertBooleanToNumeric` that enables automatic conversion of PostgreSQL boolean values to numeric types: - 't' → 1 - 'f' → 0 - Works with boolean columns - Property cached per connection for optimal performance - Boolean column type detection prevents false positive conversions ### Usage: // JDBC URL jdbc:postgresql://host:5432/db?convertBooleanToNumeric=true // HikariCP config.addDataSourceProperty("convertBooleanToNumeric", "true"); // Spring Boot spring.datasource.hikari.data-source-properties.convertBooleanToNumeric=true ### Backward Compatibility: - Default: false (maintains existing behavior) - getBoolean() continues working regardless of property setting - No changes to existing application behavior unless explicitly enabled ### All Submissions: * [x] Have you followed the guidelines in our [Contributing](https://github.com/pgjdbc/pgjdbc/blob/master/CONTRIBUTING.md) document? * [x] Have you checked to ensure there aren't other open [Pull Requests](../../pulls) for the same update/change? ### New Feature Submissions: 1. [x] Does your submission pass tests? 2. [x] Does `./gradlew styleCheck` pass ? 3. [x] Have you added your new test classes to an existing test suite in alphabetical order? ### Changes to Existing Features: * [x] Does this break existing behaviour? If so please explain. * [x] Have you added an explanation of what your changes do and why you'd like us to include them? * [x] Have you written new tests for your core changes, as applicable? * [x] Have you successfully run tests with your changes locally?