/**
* INTERNAL: Generates the select and update stored procedures for this project.
* no procedures are generated for native sequencing. Note: reads are not supported in Oracle.
*/
protected void generateSequenceStoredProcedures(org.eclipse.persistence.sessions.Project project) {
DatabaseLogin login = (DatabaseLogin)project.getDatasourceLogin();
if (login.shouldUseNativeSequencing()) {
// There is nothing required for native SQL.
return;
}
if (project.usesSequencing()) {
if (!getSession().getPlatform().isOracle()) {
// CR#3934352, updated to support new sequencing and use a single procedure.
StoredProcedureDefinition definition = new StoredProcedureDefinition();
definition.setName(Helper.truncate(project.getName() + "SEQ_SEL", MAX_NAME_SIZE));
definition.addArgument("SEQ_NAME", String.class, 100);
definition.addArgument("PREALLOC_SIZE", java.math.BigDecimal.class, 10);
definition.addStatement("UPDATE " + ((TableSequence)login.getDefaultSequence()).getTableName() + " SET "
+ ((TableSequence)login.getDefaultSequence()).getCounterFieldName() + " = "
+ ((TableSequence)login.getDefaultSequence()).getCounterFieldName() + " + "
+ getSession().getPlatform().getStoredProcedureParameterPrefix() + "PREALLOC_SIZE WHERE "
+ ((TableSequence)login.getDefaultSequence()).getNameFieldName() + " = "
+ getSession().getPlatform().getStoredProcedureParameterPrefix() + "SEQ_NAME");
definition.addStatement("SELECT " + ((TableSequence)login.getDefaultSequence()).getCounterFieldName() + " FROM "
+ ((TableSequence)login.getDefaultSequence()).getTableName() + " WHERE "
+ ((TableSequence)login.getDefaultSequence()).getNameFieldName() + " = "
+ getSession().getPlatform().getStoredProcedureParameterPrefix() + "SEQ_NAME");
sequenceProcedures.put("SELECT", definition);
writeDefinition(definition);
}
}