/**
* INTERNAL:
*/
public void onConnect() {
DatabasePlatform dbPlatform = null;
try {
dbPlatform = (DatabasePlatform)getDatasourcePlatform();
} catch (ClassCastException ex) {
if (getSelectQuery() == null) {
throw ValidationException.platformDoesNotSupportSequence(getName(), Helper.getShortClassName(getDatasourcePlatform()), Helper.getShortClassName(this));
}
}
if (!dbPlatform.supportsNativeSequenceNumbers() && (getSelectQuery() == null)) {
throw ValidationException.platformDoesNotSupportSequence(getName(), Helper.getShortClassName(getDatasourcePlatform()), Helper.getShortClassName(this));
}
// Set shouldAcquireValueAfterInsert flag: identity -> true; sequence objects -> false.
if(dbPlatform.supportsIdentity() && shouldUseIdentityIfPlatformSupports()) {
// identity is both supported by platform and desired by the NativeSequence
setShouldAcquireValueAfterInsert(true);
} else if(dbPlatform.supportsSequenceObjects() && !shouldUseIdentityIfPlatformSupports()) {
// sequence objects is both supported by platform and desired by the NativeSequence
setShouldAcquireValueAfterInsert(false);
} else {
if(dbPlatform.supportsNativeSequenceNumbers()) {
// platform support contradicts to NativeSequence setting - go with platform supported choice.
// platform must support either identity or sequence objects (otherwise ValidationException would've been thrown earlier),
// therefore here dbPlatform.supportsIdentity() == !dbPlatform.supportsSequenceObjects().
setShouldAcquireValueAfterInsert(dbPlatform.supportsIdentity());
}
}
setShouldUseTransaction(dbPlatform.shouldNativeSequenceUseTransaction());
super.onConnect();
}