From cd213358b9536b6ea4af51414d302b54ea26acbd Mon Sep 17 00:00:00 2001 From: Oleksandr Kulychok Date: Tue, 24 Jan 2023 21:07:55 +0200 Subject: [PATCH 1/2] Fix #117: Indexes of parameters for prepared statements must be 1-based --- .../cdp/queryservice/core/QueryServicePreparedStatement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatement.java b/src/main/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatement.java index 4a629a7..baff90e 100644 --- a/src/main/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatement.java +++ b/src/main/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatement.java @@ -551,7 +551,7 @@ String createSqlQuery() throws SQLException { log.error("Not enough parameters to replace placeholders in query."); throw new SQLException("Not enough parameters"); } - Object parameter = parameters.get(parameterIndex++); + Object parameter = parameters.get(++parameterIndex); sqlQuery = sqlQuery.replaceFirst("\\?", parameter == null ? "null" : parameter.toString()); } return sqlQuery; From 33dea99d7664652537618c43e76c4f72375462da Mon Sep 17 00:00:00 2001 From: Oleksandr Kulychok Date: Tue, 24 Jan 2023 21:09:03 +0200 Subject: [PATCH 2/2] Fix #117: Fix tests for 1-based prepared statements --- CHANGELOG.md | 4 ++++ .../core/QueryServicePreparedStatementTest.java | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb683e6..16488c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.17.0 +- Fix prepared statements to use 1-based indexes, See #117 + + # :construction: 1.6 - Fixing exceptions in metadata class. diff --git a/src/test/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatementTest.java b/src/test/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatementTest.java index 33543b9..7e8c79f 100644 --- a/src/test/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatementTest.java +++ b/src/test/java/com/salesforce/cdp/queryservice/core/QueryServicePreparedStatementTest.java @@ -48,15 +48,15 @@ public void init() { @Test public void testWildCardReplacementForPreparedStatement() throws SQLException { - preparedStatement.setString(0, "Angella"); - preparedStatement.setInt(1, 1000); + preparedStatement.setString(1, "Angella"); + preparedStatement.setInt(2, 1000); String sql = preparedStatement.createSqlQuery(); Assert.assertEquals(sql, "select FirstName__c, BirthDate__c, YearlyIncome__c from Individual__dlm where FirstName__c = 'Angella' and YearlyIncome__c > 1000"); } @Test public void testSqlWithoutEnoughParameters() throws SQLException { - preparedStatement.setString(0, "Angella"); + preparedStatement.setString(1, "Angella"); exceptionRule.expect(SQLException.class); exceptionRule.expectMessage("Not enough parameters"); preparedStatement.createSqlQuery(); @@ -67,7 +67,7 @@ public void testSqlWithDateParameter() throws SQLException { Date date = new Date(System.currentTimeMillis()); preparedStatement = new QueryServicePreparedStatement(connection, "select FirstName__c, BirthDate__c from Individual__dlm where BirthDate__c > ?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); - preparedStatement.setDate(0, date); + preparedStatement.setDate(1, date); String sql = preparedStatement.createSqlQuery(); Assert.assertEquals(sql, "select FirstName__c, BirthDate__c from Individual__dlm where BirthDate__c > " + date.toString()); }