diff --git a/src/main/java/com/samskivert/depot/annotation/GeneratedValue.java b/src/main/java/com/samskivert/depot/annotation/GeneratedValue.java index cefdc24..889f22d 100644 --- a/src/main/java/com/samskivert/depot/annotation/GeneratedValue.java +++ b/src/main/java/com/samskivert/depot/annotation/GeneratedValue.java @@ -30,7 +30,7 @@ public @interface GeneratedValue * initial value is 1. Note: this default differs from the value used by the EJB3 * persistence framework. */ - int initialValue () default 1; + long initialValue () default 1; /** * If there are rows in our corresponding table, this boolean determines whether or not to diff --git a/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java b/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java index 2cd564f..30807d9 100644 --- a/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java +++ b/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java @@ -35,7 +35,7 @@ public class IdentityValueGenerator extends ValueGenerator } @Override // from ValueGenerator - public int nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) + public long nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) throws SQLException { return liaison.lastInsertedId(conn, stmt, _dm.getTableName(), _fm.getColumnName()); diff --git a/src/main/java/com/samskivert/depot/impl/TableValueGenerator.java b/src/main/java/com/samskivert/depot/impl/TableValueGenerator.java index 9c988ff..575c484 100644 --- a/src/main/java/com/samskivert/depot/impl/TableValueGenerator.java +++ b/src/main/java/com/samskivert/depot/impl/TableValueGenerator.java @@ -46,7 +46,7 @@ public class TableValueGenerator extends ValueGenerator conn, _valueTable, Arrays.asList(_pkColumnName, _valueColumnName), Arrays.asList(new ColumnDefinition("VARCHAR(255)", true, false, null), - new ColumnDefinition("INTEGER")), + new ColumnDefinition("BIGINT")), Arrays.asList(_pkColumnName)); // and also that there's a row in it for us @@ -58,11 +58,11 @@ public class TableValueGenerator extends ValueGenerator return; } - int initialValue = _initialValue; + long initialValue = _initialValue; if (_migrateIfExists) { - Integer max = getFieldMaximum(conn, liaison); + Long max = getFieldMaximum(conn, liaison); if (max != null) { - initialValue = 1 + max.intValue(); + initialValue = 1 + max.longValue(); } } @@ -71,7 +71,7 @@ public class TableValueGenerator extends ValueGenerator liaison.columnSQL(_pkColumnName) + ", " + liaison.columnSQL(_valueColumnName) + ") VALUES (?, ?)"); stmt.setString(1, _pkColumnValue); - stmt.setInt(2, initialValue); + stmt.setLong(2, initialValue); stmt.executeUpdate(); } @@ -86,7 +86,7 @@ public class TableValueGenerator extends ValueGenerator } @Override // from ValueGenerator - public int nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) + public long nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) throws SQLException { // TODO: Make this lockless! @@ -111,12 +111,12 @@ public class TableValueGenerator extends ValueGenerator ", column=" + _valueColumnName + "]"); } // fetch the next available value - int val = rs.getInt(1); + int val = rs.getLong(1); // claim this value locklessly - writeStatement.setInt(1, val + _allocationSize); + writeStatement.setLong(1, val + _allocationSize); writeStatement.setString(2, _pkColumnValue); - writeStatement.setInt(3, val); + writeStatement.setLong(3, val); // if we modified a row, we know we and nobody else got this particular value! if (writeStatement.executeUpdate() == 1) { diff --git a/src/main/java/com/samskivert/depot/impl/ValueGenerator.java b/src/main/java/com/samskivert/depot/impl/ValueGenerator.java index 493fadf..2537538 100644 --- a/src/main/java/com/samskivert/depot/impl/ValueGenerator.java +++ b/src/main/java/com/samskivert/depot/impl/ValueGenerator.java @@ -50,7 +50,7 @@ public abstract class ValueGenerator * @param stmt if post-factum, the statement that was used to perform the insert which resulted * in the auto-generation of a value, otherwise null. */ - public abstract int nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) + public abstract long nextGeneratedValue (Connection conn, DatabaseLiaison liaison, Statement stmt) throws SQLException; /** @@ -61,10 +61,10 @@ public abstract class ValueGenerator /** * Scans the table associated with this {@link ValueGenerator} and returns either null, if - * there are no rows, or an {@link Integer} containing the largest numerical value our + * there are no rows, or a {@link Long} containing the largest numerical value our * field attains. */ - protected Integer getFieldMaximum (Connection conn, DatabaseLiaison liaison) + protected Long getFieldMaximum (Connection conn, DatabaseLiaison liaison) throws SQLException { String column = _fm.getColumnName(); @@ -79,9 +79,9 @@ public abstract class ValueGenerator return null; } - int cnt = rs.getInt(1); + long cnt = rs.getLong(1); if (cnt > 0) { - return Integer.valueOf(rs.getInt(2)); + return Long.valueOf(rs.getLong(2)); } return null; } @@ -96,7 +96,7 @@ public abstract class ValueGenerator return _fm; } - protected int _initialValue; + protected long _initialValue; protected int _allocationSize; protected boolean _migrateIfExists; diff --git a/src/main/java/com/samskivert/depot/impl/jdbc/BaseLiaison.java b/src/main/java/com/samskivert/depot/impl/jdbc/BaseLiaison.java index 13bd65c..d30f6a3 100644 --- a/src/main/java/com/samskivert/depot/impl/jdbc/BaseLiaison.java +++ b/src/main/java/com/samskivert/depot/impl/jdbc/BaseLiaison.java @@ -41,18 +41,18 @@ public abstract class BaseLiaison implements DatabaseLiaison @Deprecated public int lastInsertedId (Connection conn, String table, String column) throws SQLException { - return lastInsertedId(conn, null, table, column); + return (int)lastInsertedId(conn, null, table, column); } // from DatabaseLiaison - public int lastInsertedId (Connection conn, Statement istmt, String table, String column) + public long lastInsertedId (Connection conn, Statement istmt, String table, String column) throws SQLException { // if this JDBC driver supports getGeneratedKeys, use it! if (istmt != null && conn.getMetaData().supportsGetGeneratedKeys()) { ResultSet rs = istmt.getGeneratedKeys(); if (rs.next()) { - return rs.getInt(column); + return rs.getLong(column); } } return fetchLastInsertedId(conn, table, column); @@ -62,7 +62,7 @@ public abstract class BaseLiaison implements DatabaseLiaison * Requests the last inserted id for the specified table and column. This is used if a JDBC * driver does not support {@code getGeneratedKeys} or an attempt to use that failed. */ - protected int fetchLastInsertedId (Connection conn, String table, String column) + protected long fetchLastInsertedId (Connection conn, String table, String column) throws SQLException { throw new SQLException( diff --git a/src/main/java/com/samskivert/depot/impl/jdbc/DatabaseLiaison.java b/src/main/java/com/samskivert/depot/impl/jdbc/DatabaseLiaison.java index 6d74965..b2d8eb7 100644 --- a/src/main/java/com/samskivert/depot/impl/jdbc/DatabaseLiaison.java +++ b/src/main/java/com/samskivert/depot/impl/jdbc/DatabaseLiaison.java @@ -58,7 +58,7 @@ public interface DatabaseLiaison * @return the requested inserted id. * @throws SQLException if we are unable to obtain the last inserted id. */ - public int lastInsertedId (Connection conn, Statement istmt, String table, String column) + public long lastInsertedId (Connection conn, Statement istmt, String table, String column) throws SQLException; /** diff --git a/src/main/java/com/samskivert/depot/impl/jdbc/HsqldbLiaison.java b/src/main/java/com/samskivert/depot/impl/jdbc/HsqldbLiaison.java index a35f27c..2c461f3 100644 --- a/src/main/java/com/samskivert/depot/impl/jdbc/HsqldbLiaison.java +++ b/src/main/java/com/samskivert/depot/impl/jdbc/HsqldbLiaison.java @@ -75,7 +75,7 @@ public class HsqldbLiaison extends BaseLiaison } @Override - protected int fetchLastInsertedId (Connection conn, String table, String column) + protected long fetchLastInsertedId (Connection conn, String table, String column) throws SQLException { // HSQL does not keep track of per-table-and-column insertion data, so we are pretty much @@ -85,7 +85,7 @@ public class HsqldbLiaison extends BaseLiaison try { stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("call IDENTITY()"); - return rs.next() ? rs.getInt(1) : super.fetchLastInsertedId(conn, table, column); + return rs.next() ? rs.getLong(1) : super.fetchLastInsertedId(conn, table, column); } finally { JDBCUtil.close(stmt); } diff --git a/src/main/java/com/samskivert/depot/impl/jdbc/MySQLLiaison.java b/src/main/java/com/samskivert/depot/impl/jdbc/MySQLLiaison.java index 1950c49..b4dda37 100644 --- a/src/main/java/com/samskivert/depot/impl/jdbc/MySQLLiaison.java +++ b/src/main/java/com/samskivert/depot/impl/jdbc/MySQLLiaison.java @@ -50,7 +50,7 @@ public class MySQLLiaison extends BaseLiaison } @Override // from BaseLiaison - public int lastInsertedId (Connection conn, Statement istmt, String table, String column) + public long lastInsertedId (Connection conn, Statement istmt, String table, String column) throws SQLException { // MySQL uses "GENERATED_KEY" as the column name for the last inserted key, so we have to @@ -59,7 +59,7 @@ public class MySQLLiaison extends BaseLiaison } @Override - protected int fetchLastInsertedId (Connection conn, String table, String column) + protected long fetchLastInsertedId (Connection conn, String table, String column) throws SQLException { // MySQL does not keep track of per-table-and-column insertion data, so we are pretty much @@ -69,7 +69,7 @@ public class MySQLLiaison extends BaseLiaison try { stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select LAST_INSERT_ID()"); - return rs.next() ? rs.getInt(1) : super.fetchLastInsertedId(conn, table, column); + return rs.next() ? rs.getLong(1) : super.fetchLastInsertedId(conn, table, column); } finally { JDBCUtil.close(stmt); } diff --git a/src/main/java/com/samskivert/depot/impl/jdbc/PostgreSQLLiaison.java b/src/main/java/com/samskivert/depot/impl/jdbc/PostgreSQLLiaison.java index b6cfc3a..d061b52 100644 --- a/src/main/java/com/samskivert/depot/impl/jdbc/PostgreSQLLiaison.java +++ b/src/main/java/com/samskivert/depot/impl/jdbc/PostgreSQLLiaison.java @@ -35,7 +35,7 @@ public class PostgreSQLLiaison extends BaseLiaison } @Override - protected int fetchLastInsertedId (Connection conn, String table, String column) + protected long fetchLastInsertedId (Connection conn, String table, String column) throws SQLException { // PostgreSQL's support for auto-generated ID's comes in the form of appropriately named @@ -46,14 +46,14 @@ public class PostgreSQLLiaison extends BaseLiaison try { ResultSet rs = stmt.executeQuery( "select currval('\"" + table + "_" + column + "_seq\"')"); - return rs.next() ? rs.getInt(1) : super.fetchLastInsertedId(conn, table, column); + return rs.next() ? rs.getLong(1) : super.fetchLastInsertedId(conn, table, column); } finally { JDBCUtil.close(stmt); } } // from DatabaseLiaison - public void createGenerator (Connection conn, String tableName, String columnName, int initValue) + public void createGenerator (Connection conn, String tableName, String columnName, long initValue) throws SQLException { if (initValue == 1) { diff --git a/src/test/java/com/samskivert/depot/GeneratedValueRecord.java b/src/test/java/com/samskivert/depot/GeneratedValueRecord.java index 8c6bec9..c6dd199 100644 --- a/src/test/java/com/samskivert/depot/GeneratedValueRecord.java +++ b/src/test/java/com/samskivert/depot/GeneratedValueRecord.java @@ -12,23 +12,23 @@ public class GeneratedValueRecord extends PersistentRecord { // AUTO-GENERATED: FIELDS START public static final Class _R = GeneratedValueRecord.class; - public static final ColumnExp RECORD_ID = colexp(_R, "recordId"); - public static final ColumnExp VALUE = colexp(_R, "value"); + public static final ColumnExp RECORD_ID = colexp(_R, "recordId"); + public static final ColumnExp VALUE = colexp(_R, "value"); // AUTO-GENERATED: FIELDS END - public static final int SCHEMA_VERSION = 1; + public static final int SCHEMA_VERSION = 2; @Id @GeneratedValue - public int recordId; + public long recordId; - public int value; + public long value; // AUTO-GENERATED: METHODS START /** * Create and return a primary {@link Key} to identify a {@link GeneratedValueRecord} * with the supplied key values. */ - public static Key getKey (int recordId) + public static Key getKey (long recordId) { return newKey(_R, recordId); }