| java.lang.Object com.versant.core.jdbc.sql.HighLowJdbcKeyGenerator
HighLowJdbcKeyGenerator | public class HighLowJdbcKeyGenerator implements JdbcKeyGenerator(Code) | | This key generator uses a last used id table and a grab size to generate
primary keys. Each instance generates keys for a single class.
|
Inner Class :public static class Args | |
Method Summary | |
public void | addKeyGenTables(HashSet set, JdbcMetaDataBuilder mdb) Add any JdbcTable instances that this key generator requires to the
supplied set. | public void | generatePrimaryKeyPost(String className, JdbcTable classTable, Object[] data, Connection con, Statement stat) Generate a new primary key value for a new instance of the supplied
class after the row has been inserted. | public synchronized void | generatePrimaryKeyPre(String className, JdbcTable classTable, int newObjectCount, Object[] data, Connection con) Generate a new primary key value for a new instance of the supplied
class prior to the row being inserted. | public String | getPostInsertSQLSuffix(JdbcTable classTable) Get extra SQL to be appended to the insert statement. | public void | init(String className, JdbcTable classTable, Connection con) Initialize this key generator. | public boolean | isPostInsertGenerator() If the new key can only be detirmined after the new row has been
inserted (e.g. | public boolean | isRequiresOwnConnection() Does this key generator require its own connection? If it does then
one will be obtained to generate the key and committed after the
key has been generated. | protected int | lookupNewNumber(Connection con, int effectiveGrabSize) Run SQL to get a new number. |
createTable | protected boolean createTable(Code) | | |
grabLeft | protected int grabLeft(Code) | | |
grabSize | protected int grabSize(Code) | | |
keyColumnLength | protected int keyColumnLength(Code) | | |
lastUsed | protected int lastUsed(Code) | | |
pkJavaTypeCode | protected int pkJavaTypeCode(Code) | | |
start | protected int start(Code) | | |
HighLowJdbcKeyGenerator | public HighLowJdbcKeyGenerator(JdbcTable classTable, Args args)(Code) | | |
addKeyGenTables | public void addKeyGenTables(HashSet set, JdbcMetaDataBuilder mdb)(Code) | | Add any JdbcTable instances that this key generator requires to the
supplied set. This method is called once per key generator during meta
data generation. Any tables returned will be added to the meta data and
will get into SQL scripts and so on. If the same key generator
instance is returned more than once by a factory then this method
will still only be called once per instance.
|
generatePrimaryKeyPost | public void generatePrimaryKeyPost(String className, JdbcTable classTable, Object[] data, Connection con, Statement stat) throws SQLException(Code) | | Generate a new primary key value for a new instance of the supplied
class after the row has been inserted. The values generated will be used
to populate a new OID and then set on a PreparedStatement for the
insert. This is called if isPostInsertGenerator returns true.
Parameters: className - The name of the class Parameters: classTable - The table for the class Parameters: data - The array to store the key values in. Parameters: con - Connection to the DataSource for the class. Parameters: stat - Statement created from con. Do not close it. This will havejust been used to insert the new row. throws: SQLException - on errors |
generatePrimaryKeyPre | public synchronized void generatePrimaryKeyPre(String className, JdbcTable classTable, int newObjectCount, Object[] data, Connection con) throws SQLException(Code) | | Generate a new primary key value for a new instance of the supplied
class prior to the row being inserted. The values generated will be used
to populate a new OID and then set on a PreparedStatement for the
insert. This is called if isPostInsertGenerator returns false.
The newObjectCount parameter indicates the number of new objects that
will be inserted (including this one) in the same transaction using
this key generator. This may be used to optimize the behavior of the
key generator or be ignored. The highlow key generator uses this value
instead of its grabSize to avoid executing redundant updates and
selects.
Parameters: className - The name of the class Parameters: classTable - The table for the class Parameters: newObjectCount - The number of new objects being created Parameters: data - The array to store the key values in. Parameters: con - Connection to the DataSource for the class. throws: SQLException - on errors |
getPostInsertSQLSuffix | public String getPostInsertSQLSuffix(JdbcTable classTable)(Code) | | Get extra SQL to be appended to the insert statement. This is only
called for post insert key generators. Return null if no extra SQL
is required. Key generators can use this as an alternative to running
a separate query to get the primary key for the just inserted row.
|
init | public void init(String className, JdbcTable classTable, Connection con) throws SQLException(Code) | | Initialize this key generator. This is called when the JDO
implementation initializes before any keys are generated. Key
generators should use this to avoid popular race conditions and
deadlock opportunities (e.g. multiple 'select max(id) from table'
statements executing at the same time). If the same key generator
instance is used on more than one class this will be called once
for each class.
Parameters: className - The name of the class Parameters: classTable - The table for the class Parameters: con - Connection to the DataSource for the class |
isPostInsertGenerator | public boolean isPostInsertGenerator()(Code) | | If the new key can only be detirmined after the new row has been
inserted (e.g. if using a database autoincrement column) then this
should return true.
|
isRequiresOwnConnection | public boolean isRequiresOwnConnection()(Code) | | Does this key generator require its own connection? If it does then
one will be obtained to generate the key and committed after the
key has been generated.
|
lookupNewNumber | protected int lookupNewNumber(Connection con, int effectiveGrabSize) throws SQLException(Code) | | Run SQL to get a new number. This does an update and a select for
our classes row in the keygen table.
|
|
|