Hi there!

Having issues with stored procedures in new H2 version.
This is the code to reproduce:

import java.math.BigInteger;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import org.h2.tools.SimpleResultSet;
import org.junit.Test;

public class H2StoredProcTests {


@Test
public void h2ParserProblem() throws SQLException {
try (Connection connection =
DriverManager.getConnection(
"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=true", "sa", "")) {
try (Statement statement = connection.createStatement()) {
statement.execute("CREATE ALIAS GET_PRIME_NUMBERS FOR \"
H2StoredProcTests.getPrimes\"");
}
try (CallableStatement callableStatement = connection.prepareCall("{ CALL 
GET_PRIME_NUMBERS(?, ?) }")) {
callableStatement.setInt(1, 0);
callableStatement.setInt(2, 10);
callableStatement.execute();
}
}
}

public static ResultSet getPrimes(int beginRange, int endRange) {
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("PRIME", Types.INTEGER, 10, 0);
for (int i = beginRange; i <= endRange; i++) {
if (new BigInteger(String.valueOf(i)).isProbablePrime(100)) {
rs.addRow(i);
}
}

return rs;
}

}

Works well in the previous 1.4.200 version.

Looks like something has been broken in the org.h2.command.Parser and now 
it parsers params twice:

[image: Params_screenshot.PNG]

The failure in the end looks like this:

org.h2.jdbc.JdbcSQLDataException:
Parameter "#3" is not set; SQL statement:
  CALL GET_PRIME_NUMBERS(?, ?)   [90012-206]

        at 
org.h2.message.DbException.getJdbcSQLException(DbException.java:665)
        at 
org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
        at org.h2.message.DbException.get(DbException.java:227)
        at org.h2.message.DbException.get(DbException.java:203)
        at org.h2.expression.Parameter.checkSet(Parameter.java:75)
        at org.h2.command.Prepared.checkParameters(Prepared.java:181)
        at org.h2.command.CommandContainer.query(CommandContainer.java:254)
        at org.h2.command.Command.executeQuery(Command.java:190)
        at 
org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:248)
        at H2StoredProcTests.h2ParserProblem(H2StoredProcTests.java:26)

Thank you!

Regards,
Artem Bilan

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/770ac492-c3ea-4a87-9c11-0c2bd615fc49n%40googlegroups.com.

Reply via email to