Merge pull request #2090 from ebean-orm/feature/2089

#2089 - Postgres - Use NO KEY with FOR UPDATE clauses with Postgres
This commit is contained in:
Rob Bygrave authored and GitHub committed 2020-11-24 21:49:28 +13:00
commit ed061fb3b1
6 files changed
+169 -12

No files matched your search

@@ -73,6 +73,7 @@ public class ServerConfigTest {
props.setProperty("caseSensitiveCollation", "false");
props.setProperty("loadModuleInfo", "true");
props.setProperty("collectQueryPlanThresholdMicros", "10000");
props.setProperty("lockWithKey", "true");
serverConfig.loadFromProperties(props);
@@ -84,6 +85,7 @@ public class ServerConfigTest {
assertTrue(serverConfig.isIdGeneratorAutomatic());
assertFalse(serverConfig.getPlatformConfig().isCaseSensitiveCollation());
assertTrue(serverConfig.getPlatformConfig().isLockWithKey());
assertThat(serverConfig.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
@@ -1,5 +1,6 @@
package io.ebean.config.dbplatform;
import io.ebean.Query;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.postgres.PostgresPlatform;
import org.junit.Test;
@@ -20,4 +21,33 @@ public class PostgresPlatformTest {
assertThat(columnDefn).isEqualTo("uuid");
}
@Test
public void default_forUpdate_expect_noKeyUsed() {
DatabasePlatform platform = new PostgresPlatform();
PlatformConfig config = new PlatformConfig();
platform.configure(config);
assertThat(config.isLockWithKey()).isFalse();
assertThat(platform.withForUpdate("X", Query.ForUpdate.SKIPLOCKED)).isEqualTo("X for no key update skip locked");
assertThat(platform.withForUpdate("X", Query.ForUpdate.NOWAIT)).isEqualTo("X for no key update nowait");
assertThat(platform.withForUpdate("X", Query.ForUpdate.BASE)).isEqualTo("X for no key update");
}
@Test
public void lockWithKey_forUpdate() {
DatabasePlatform platform = new PostgresPlatform();
PlatformConfig config = new PlatformConfig();
config.setLockWithKey(true);
platform.configure(config);
assertThat(config.isLockWithKey()).isTrue();
assertThat(platform.withForUpdate("X", Query.ForUpdate.SKIPLOCKED)).isEqualTo("X for update skip locked");
assertThat(platform.withForUpdate("X", Query.ForUpdate.NOWAIT)).isEqualTo("X for update nowait");
assertThat(platform.withForUpdate("X", Query.ForUpdate.BASE)).isEqualTo("X for update");
}
}