All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.javacrumbs.shedlock.provider.jdbctemplate.Db2ServerTimeStatementsSource Maven / Gradle / Ivy

There is a newer version: 5.16.0
Show newest version
/**
 * Copyright 2009 the original author or authors.
 *
 * 

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * *

http://www.apache.org/licenses/LICENSE-2.0 * *

Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package net.javacrumbs.shedlock.provider.jdbctemplate; import java.util.Map; import net.javacrumbs.shedlock.core.LockConfiguration; import net.javacrumbs.shedlock.support.annotation.NonNull; class Db2ServerTimeStatementsSource extends SqlStatementsSource { private static final String now = "(CURRENT TIMESTAMP - CURRENT TIMEZONE)"; private static final String lockAtMostFor = "(" + now + " + :lockAtMostForMicros MICROSECONDS)"; Db2ServerTimeStatementsSource(JdbcTemplateLockProvider.Configuration configuration) { super(configuration); } @Override String getInsertStatement() { return "INSERT INTO " + tableName() + "(" + name() + ", " + lockUntil() + ", " + lockedAt() + ", " + lockedBy() + ") VALUES(:name, " + lockAtMostFor + ", " + now + ", :lockedBy)"; } @Override public String getUpdateStatement() { return "UPDATE " + tableName() + " SET " + lockUntil() + " = " + lockAtMostFor + ", " + lockedAt() + " = " + now + ", " + lockedBy() + " = :lockedBy WHERE " + name() + " = :name AND " + lockUntil() + " <= " + now; } @Override public String getUnlockStatement() { String lockAtLeastFor = "(" + lockedAt() + "+ :lockAtLeastForMicros MICROSECONDS)"; return "UPDATE " + tableName() + " SET " + lockUntil() + " = CASE WHEN " + lockAtLeastFor + " > " + now + " THEN " + lockAtLeastFor + " ELSE " + now + " END WHERE " + name() + " = :name AND " + lockedBy() + " = :lockedBy"; } @Override public String getExtendStatement() { return "UPDATE " + tableName() + " SET " + lockUntil() + " = " + lockAtMostFor + " WHERE " + name() + " = :name AND " + lockedBy() + " = :lockedBy AND " + lockUntil() + " > " + now; } @Override @NonNull Map params(@NonNull LockConfiguration lockConfiguration) { return Map.of( "name", lockConfiguration.getName(), "lockedBy", configuration.getLockedByValue(), "lockAtMostForMicros", lockConfiguration.getLockAtMostFor().toNanos() / 1_000, "lockAtLeastForMicros", lockConfiguration.getLockAtLeastFor().toNanos() / 1_000); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy