From beed9956595a8bb36fb101bb36d089e49bb370a6 Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 11 Oct 2007 12:31:49 +0000 Subject: [PATCH] * Enabling use of ID sequence generators in H2 databases. Patch by Robert Gaggl, fixes bug 562 - http://helma.org/bugs/show_bug.cgi?id=562 --- src/helma/objectmodel/db/DbMapping.java | 15 +++++++++++++++ src/helma/objectmodel/db/DbSource.java | 13 ++++++++++++- src/helma/objectmodel/db/NodeManager.java | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/helma/objectmodel/db/DbMapping.java b/src/helma/objectmodel/db/DbMapping.java index 2f57b250..0ba6c47e 100644 --- a/src/helma/objectmodel/db/DbMapping.java +++ b/src/helma/objectmodel/db/DbMapping.java @@ -1230,6 +1230,21 @@ public final class DbMapping { return false; } + /** + * Is the database behind this a H2 db? + * + * @return true if the dbsource is using a H2 JDBC driver + */ + public boolean isH2() { + if (dbSource != null) { + return dbSource.isH2(); + } + if (parentMapping != null) { + return parentMapping.isH2(); + } + return false; + } + /** * Return a string representation for this DbMapping * diff --git a/src/helma/objectmodel/db/DbSource.java b/src/helma/objectmodel/db/DbSource.java index bfe259a7..7d89e72b 100644 --- a/src/helma/objectmodel/db/DbSource.java +++ b/src/helma/objectmodel/db/DbSource.java @@ -36,7 +36,7 @@ public class DbSource { private ResourceProperties props, subProps; protected String url; private String driver; - private boolean isOracle, isMySQL, isPostgreSQL; + private boolean isOracle, isMySQL, isPostgreSQL, isH2; private long lastRead = 0L; private Hashtable dbmappings = new Hashtable(); // compute hashcode statically because it's expensive and we need it often @@ -165,6 +165,7 @@ public class DbSource { isMySQL = driver.startsWith("com.mysql.jdbc") || driver.startsWith("org.gjt.mm.mysql"); isPostgreSQL = driver.equals("org.postgresql.Driver"); + isH2 = driver.equals("org.h2.Driver"); // test if driver class is available Class.forName(driver); @@ -247,6 +248,16 @@ public class DbSource { public boolean isPostgreSQL() { return isPostgreSQL; } + + /** + * Check if this DbSource represents a H2 database + * + * @return true if we're using a H2 JDBC driver + */ + public boolean isH2() { + return isH2; + } + /** * Register a dbmapping by its table name. * diff --git a/src/helma/objectmodel/db/NodeManager.java b/src/helma/objectmodel/db/NodeManager.java index e51d896d..ab951637 100644 --- a/src/helma/objectmodel/db/NodeManager.java +++ b/src/helma/objectmodel/db/NodeManager.java @@ -822,7 +822,7 @@ public final class NodeManager { if (map.isOracle()) { q = new StringBuffer("SELECT ").append(map.getIDgen()) .append(".nextval FROM dual").toString(); - } else if (map.isPostgreSQL()) { + } else if (map.isPostgreSQL() || map.isH2()) { q = new StringBuffer("SELECT nextval('") .append(map.getIDgen()).append("')").toString(); } else {