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/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; 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()); }