/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.dialect.unit.locktimeout;
import org.hibernate.LockMode;
import org.hibernate.LockOptions;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.HANARowStoreDialect;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Expected lock clauses according to the official HANA FOR UPDATE clause documentation:
*
* https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/fcf24075191014a89e9dc7b8408b26/content.htm#loio20fcf24075191014a89e9dc7b8408b26__sql_select_1sql_select_for_update
*
* @author Vlad Mihalcea
*/
public class HANALockTimeoutTest extends BaseUnitTestCase {
private final Dialect dialect = new HANARowStoreDialect();
@Test
public void testLockTimeoutNoAliasNoTimeout() {
assertEquals(
" for update",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_READ ) )
);
assertEquals(
" for update",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_WRITE ) )
);
}
@Test
public void testLockTimeoutNoAliasNoWait() {
assertEquals(
" for update nowait",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_READ )
.setTimeOut( LockOptions.NO_WAIT ) )
);
assertEquals(
" for update nowait",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_WRITE )
.setTimeOut( LockOptions.NO_WAIT ) )
);
}
@Test
public void testLockTimeoutNoAliasSkipLocked() {
assertEquals(
" for update",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_READ )
.setTimeOut( LockOptions.SKIP_LOCKED ) )
);
assertEquals(
" for update",
dialect.getForUpdateString( new LockOptions( LockMode.PESSIMISTIC_WRITE )
.setTimeOut( LockOptions.SKIP_LOCKED ) )
);
}
@Test
public void testLockTimeoutAliasNoTimeout() {
String alias = "a";
assertEquals(
" for update of a",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_READ
)
)
);
assertEquals(
" for update of a",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_WRITE
)
)
);
}
@Test
public void testLockTimeoutAliasNoWait() {
String alias = "a";
assertEquals(
" for update of a nowait",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_READ
)
.setTimeOut( LockOptions.NO_WAIT )
)
);
assertEquals(
" for update of a nowait",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_WRITE
)
.setTimeOut( LockOptions.NO_WAIT )
)
);
}
@Test
public void testLockTimeoutAliasSkipLocked() {
String alias = "a";
assertEquals(
" for update of a",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_READ
)
.setTimeOut( LockOptions.SKIP_LOCKED )
)
);
assertEquals(
" for update of a",
dialect.getForUpdateString(
alias,
new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode(
alias,
LockMode.PESSIMISTIC_WRITE
)
.setTimeOut( LockOptions.SKIP_LOCKED )
)
);
}
}