[jOOQ/jOOQ#16861] Avoid static members in jOOQ-meta Definition classes

to avoid stale build caching
This commit is contained in:
Lukas Eder 2024-06-25 10:54:59 +02:00
parent 30e9a12699
commit df3ad378f1
4 changed files with 35 additions and 33 deletions

View File

@ -70,6 +70,7 @@ import static org.jooq.impl.SQLDataType.VARCHAR;
import static org.jooq.meta.mysql.information_schema.Tables.CHECK_CONSTRAINTS;
import static org.jooq.meta.mysql.information_schema.Tables.COLUMNS;
import static org.jooq.meta.mysql.information_schema.Tables.KEY_COLUMN_USAGE;
import static org.jooq.meta.mysql.information_schema.Tables.PARAMETERS;
import static org.jooq.meta.mysql.information_schema.Tables.REFERENTIAL_CONSTRAINTS;
import static org.jooq.meta.mysql.information_schema.Tables.ROUTINES;
import static org.jooq.meta.mysql.information_schema.Tables.SCHEMATA;
@ -146,6 +147,7 @@ import org.jetbrains.annotations.Nullable;
*/
public class MySQLDatabase extends AbstractDatabase implements ResultQueryDatabase {
private Boolean is5_5;
private Boolean is5_7;
private Boolean is8;
private Boolean is8_0_16;
@ -303,6 +305,22 @@ public class MySQLDatabase extends AbstractDatabase implements ResultQueryDataba
return is5_7;
}
protected boolean is5_5() {
// Check if this is a MySQL 5.5 or later database
if (is5_5 == null) {
try {
create().selectOne().from(PARAMETERS).limit(1).fetchOne();
is5_5 = true;
}
catch (Exception e) {
is5_5 = false;
}
}
return is5_5;
}
@Override
public ResultQuery<Record6<String, String, String, String, String, Integer>> primaryKeys(List<String> schemas) {
return keys(schemas, true);

View File

@ -59,8 +59,6 @@ import org.jooq.tools.StringUtils;
*/
public class MySQLRoutineDefinition extends AbstractRoutineDefinition {
private static Boolean is55;
private final String params;
private final String returns;
private final ProcType procType;
@ -83,7 +81,7 @@ public class MySQLRoutineDefinition extends AbstractRoutineDefinition {
@Override
protected void init0() {
if (is55())
if (((MySQLDatabase) getDatabase()).is5_5())
init55();
else
init54();
@ -208,20 +206,4 @@ public class MySQLRoutineDefinition extends AbstractRoutineDefinition {
return new DefaultParameterDefinition(this, paramName, columnIndex, type);
}
private boolean is55() {
// Check if this is a MySQL 5.5 or later database
if (is55 == null) {
try {
create().selectOne().from(PARAMETERS).limit(1).fetchOne();
is55 = true;
}
catch (Exception e) {
is55 = false;
}
}
return is55;
}
}

View File

@ -42,6 +42,7 @@ import static org.jooq.impl.DSL.coalesce;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.list;
import static org.jooq.impl.DSL.lower;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.noCondition;
import static org.jooq.impl.DSL.one;
@ -635,4 +636,18 @@ public class SQLiteDatabase extends AbstractDatabase implements ResultQueryDatab
return snapshot;
}
private Boolean existsSqliteSequence;
boolean existsSqliteSequence() {
if (existsSqliteSequence == null) {
existsSqliteSequence = create()
.selectCount()
.from(SQLITE_MASTER)
.where(lower(SQLiteMaster.NAME).eq("sqlite_sequence"))
.fetchOne(0, boolean.class);
}
return existsSqliteSequence;
}
}

View File

@ -78,7 +78,6 @@ import org.jooq.tools.JooqLogger;
public class SQLiteTableDefinition extends AbstractTableDefinition {
private static final JooqLogger log = JooqLogger.getLogger(SQLiteTableDefinition.class);
private static Boolean existsSqliteSequence;
private Table<?> interpretedTable;
public SQLiteTableDefinition(SchemaDefinition schema, String name, String comment) {
@ -188,7 +187,7 @@ public class SQLiteTableDefinition extends AbstractTableDefinition {
break identityCheck;
// [#6854] sqlite_sequence only contains identity information once a table contains records.
identity |= existsSqliteSequence() && create()
identity |= ((SQLiteDatabase) getDatabase()).existsSqliteSequence() && create()
.fetchOne("select count(*) from sqlite_sequence where name = ?", getName())
.get(0, Boolean.class);
@ -232,16 +231,4 @@ public class SQLiteTableDefinition extends AbstractTableDefinition {
return result;
}
private boolean existsSqliteSequence() {
if (existsSqliteSequence == null) {
existsSqliteSequence = create()
.selectCount()
.from(SQLITE_MASTER)
.where(lower(SQLiteMaster.NAME).eq("sqlite_sequence"))
.fetchOne(0, boolean.class);
}
return existsSqliteSequence;
}
}