Skip to content

Commit

Permalink
Fix #1037
Browse files Browse the repository at this point in the history
* Fix #1037

* Improve cron expression
  • Loading branch information
rdehuyss committed May 14, 2024
1 parent 522d08a commit 6d9e536
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 18 deletions.
14 changes: 14 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 2 additions & 12 deletions core/src/main/java/org/jobrunr/scheduling/cron/CronExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.BitSet;
import java.util.Calendar;

/**
* Schedule class represents a parsed crontab expression.
Expand Down Expand Up @@ -294,16 +294,6 @@ public int hashCode() {
return result;
}

public static boolean isLeapYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
return cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}

public int getNumberOfFields() {
return hasSecondsField ? 6 : 5;
}

public String getExpression() {
return expression;
}
Expand Down Expand Up @@ -354,7 +344,7 @@ private BitSet getUpdatedDays(int year, int month) {
int dayCountInMonth;
if (month == Month.FEBRUARY.getValue() /* Feb */) {
dayCountInMonth = 28;
if (isLeapYear(year)) {
if (Year.isLeap(year)) {
dayCountInMonth++;
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,15 @@ public void validateTables() {
List<String> expectedTables = stream(JOBRUNR_TABLES).map(tablePrefixStatementUpdater::getFQTableName).map(String::toUpperCase).collect(toList());
ResultSet tables = conn.getMetaData().getTables(null, null, "%", null);
while (tables.next()) {
String tableSchema = tables.getString("TABLE_SCHEM");
String tableName = tables.getString("TABLE_NAME");
String completeTableName = Stream.of(tableSchema, tableName).filter(StringUtils::isNotNullOrEmpty).map(String::toUpperCase).collect(joining("."));
expectedTables.remove(completeTableName);
if (tablePrefixStatementUpdater.getSchema() != null) {
String tableSchema = tables.getString("TABLE_SCHEM");
String tableName = tables.getString("TABLE_NAME");
String completeTableName = Stream.of(tableSchema, tableName).filter(StringUtils::isNotNullOrEmpty).map(String::toUpperCase).collect(joining("."));
expectedTables.remove(completeTableName);
} else {
String tableName = tables.getString("TABLE_NAME").toUpperCase();
expectedTables.removeIf(x -> x.contains(tableName));
}
}
if (!expectedTables.isEmpty()) {
throw new JobRunrException("Not all required tables are available by JobRunr!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.jobrunr.storage.StorageProviderUtils.elementPrefixer;
import static org.jobrunr.utils.StringUtils.substringAfterLast;
import static org.jobrunr.utils.StringUtils.substringBefore;

public class AnsiDatabaseTablePrefixStatementUpdater implements TablePrefixStatementUpdater {

Expand All @@ -21,6 +22,14 @@ public String updateStatement(String statement) {
return updateStatementWithTablePrefixForOtherStatements(statement);
}

@Override
public String getSchema() {
if (tablePrefix.contains(".")) {
return substringBefore(tablePrefix, ".");
}
return null;
}

@Override
public String getFQTableName(String tableName) {
return elementPrefixer(tablePrefix, tableName);
Expand All @@ -32,7 +41,7 @@ private boolean isIndexStatement(String statement) {

protected String updateStatementWithTablePrefixForIndexStatement(String statement) {
String updatedStatement;
if(statement.toUpperCase().contains(" ON ")) {
if (statement.toUpperCase().contains(" ON ")) {
updatedStatement = statement
.replace("CREATE UNIQUE INDEX jobrunr_", "CREATE UNIQUE INDEX " + elementPrefixer(indexPrefix, DEFAULT_PREFIX))
.replace("CREATE INDEX jobrunr_", "CREATE INDEX " + elementPrefixer(indexPrefix, DEFAULT_PREFIX))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ public String updateStatement(String statement) {
return statement;
}

@Override
public String getSchema() {
return null;
}

@Override
public String getFQTableName(String tableName) {
return tableName;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.jobrunr.storage.sql.common.tables;

import static org.jobrunr.storage.StorageProviderUtils.elementPrefixer;
import static org.jobrunr.utils.StringUtils.substringBefore;

public class OracleAndDB2TablePrefixStatementUpdater implements TablePrefixStatementUpdater {

Expand All @@ -15,6 +16,14 @@ public String updateStatement(String statement) {
return statement.replace(DEFAULT_PREFIX, elementPrefixer(tablePrefix, DEFAULT_PREFIX));
}

@Override
public String getSchema() {
if (tablePrefix.contains(".")) {
return substringBefore(tablePrefix, ".");
}
return null;
}

@Override
public String getFQTableName(String tableName) {
return elementPrefixer(tablePrefix, tableName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public interface TablePrefixStatementUpdater {

String updateStatement(String statement);

String getFQTableName(String tableName);
String getSchema();

String getFQTableName(String tableName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.jobrunr.storage.sql.common.db.Sql;
import org.jobrunr.utils.mapper.jackson.JacksonJsonMapper;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.JdbcDatabaseContainer;

import javax.sql.DataSource;
Expand All @@ -15,6 +16,8 @@
import java.time.Duration;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThatCode;
import static org.jobrunr.storage.StorageProviderUtils.DatabaseOptions.SKIP_CREATE;
import static org.jobrunr.utils.resilience.RateLimiter.Builder.rateLimit;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
Expand Down Expand Up @@ -46,6 +49,11 @@ protected StorageProvider getStorageProvider() {
return storageProvider;
}

@Test
void validateTablesDoesNotThrowAnExceptionIfNoTablePrefixIsGiven() {
assertThatCode(() -> storageProvider.setUpStorageProvider(SKIP_CREATE)).doesNotThrowAnyException();
}

@Override
protected ThrowingStorageProvider makeThrowingStorageProvider(StorageProvider storageProvider) {
return new ThrowingSqlStorageProvider(storageProvider);
Expand Down

0 comments on commit 6d9e536

Please sign in to comment.