Reputation: 61
Recently, I upgraded the ignite version from 2.7 to 2.10.0. Since then my test IT with @SpringbootTest cases are failing. I am using h2 version 1.4.197 in the pom as h2.version. The upgrade to 1.4.200 didn't solve my problem
Caused by: org.h2.jdbc.JdbcSQLException: Function "LOCK_MODE" not found; SQL statement:
CALL LOCK_MODE() [90022-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readJavaFunction(Parser.java:2699)
at org.h2.command.Parser.readFunction(Parser.java:2756)
at org.h2.command.Parser.readTerm(Parser.java:3102)
at org.h2.command.Parser.readFactor(Parser.java:2587)
at org.h2.command.Parser.readSum(Parser.java:2574)
at org.h2.command.Parser.readConcat(Parser.java:2544)
at org.h2.command.Parser.readCondition(Parser.java:2370)
at org.h2.command.Parser.readAnd(Parser.java:2342)
at org.h2.command.Parser.readExpression(Parser.java:2334)
at org.h2.command.Parser.parseCall(Parser.java:4854)
at org.h2.command.Parser.parsePrepared(Parser.java:382)
at org.h2.command.Parser.parse(Parser.java:335)
at org.h2.command.Parser.parse(Parser.java:307)
at org.h2.command.Parser.prepareCommand(Parser.java:278)
at org.h2.engine.Session.prepareLocal(Session.java:611)
at org.h2.engine.Session.prepareCommand(Session.java:549)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1251)
at org.h2.jdbc.JdbcConnection.getTransactionIsolation(JdbcConnection.java:815)
at com.zaxxer.hikari.pool.PoolBase.checkDefaultIsolation(PoolBase.java:479)
at com.zaxxer.hikari.pool.PoolBase.checkDriverSupport(PoolBase.java:442)
at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:410)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:363)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560)
... 151 more
Thank you for your help. I have been trying to solve this problem for a while but with no luck
Upvotes: 1
Views: 1014
Reputation: 293
The Function in h2 core will add these methods in static block, but somehow the function map has missed something, didn't know why, at least in my case it will work when I add the following code(JDK11):
try {
Field functionInfos = Function.class.getDeclaredField("FUNCTIONS");
functionInfos.setAccessible(true);
var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup());
VarHandle modifiers = lookup.findVarHandle(Field.class, "modifiers", int.class);
int mods = functionInfos.getModifiers();
if (Modifier.isFinal(mods)) {
modifiers.set(functionInfos, mods & ~Modifier.FINAL);
}
HashMap map = (HashMap) functionInfos.get(null);
System.out.println(" =================== function size: "+map.size());
if (map.size() < 189) {
var method = MethodHandles.privateLookupIn(Function.class, MethodHandles.lookup());
MethodHandle addFunc = method.findStatic(Function.class, "addFunctionNotDeterministic", MethodType.methodType(void.class, String.class,
int.class, int.class, int.class));
addFunc.invoke("LOCK_MODE",214,0, org.h2.value.Value.INT);
}
} catch (Throwable e) {
e.printStackTrace();
}
Upvotes: 1