apache/incubator-seata · error · IllegalArgumentException

"The DB type :" + dbType + " is not supported yet"

Error message

"The DB type :" + dbType + " is not supported yet"

What it means

PageUtil.getTimeStartSql builds a 'time >= ?' SQL fragment converting an epoch-seconds bound, currently supporting mysql, oracle, postgresql, sqlserver, dm and oscar (all via FLOOR(col/1000) >= ?). Any other dbType throws IllegalArgumentException("The DB type :X is not supported yet").

Source

Thrown at common/src/main/java/org/apache/seata/common/util/PageUtil.java:200

    }

    /**
     * get sql for time start
     * @param dbType
     * @param timeColumnName
     * @return java.lang.String
     */
    public static String getTimeStartSql(String dbType, String timeColumnName) {
        switch (dbType.toLowerCase()) {
            case "mysql":
            case "oracle":
            case "postgresql":
            case "sqlserver":
            case "dm":
            case "oscar":
                return " and FLOOR(" + timeColumnName + "/1000) >= ? ";
            default:
                throw new IllegalArgumentException("The DB type :" + dbType + " is not supported yet");
        }
    }

    /**
     * get sql for time end
     * @param dbType
     * @param timeColumnName
     * @return java.lang.String
     */
    public static String getTimeEndSql(String dbType, String timeColumnName) {
        switch (dbType.toLowerCase()) {
            case "mysql":
            case "oracle":
            case "postgresql":
            case "sqlserver":
            case "dm":
            case "oscar":
                return " and FLOOR(" + timeColumnName + "/1000) <= ? ";

View on GitHub (pinned to e01f97c6db)

Solutions

  1. Use a supported dbType: mysql, oracle, postgresql, sqlserver, dm, or oscar
  2. Correct the store.db.dbType configuration value (exact lowercase name)
  3. Skip time-filter parameters when the dialect is unsupported, or add a dialect case upstream

Example fix

# before
store.db.dbType = h2 // getTimeStartSql throws

# after
store.db.dbType = mysql
Defensive patterns

Strategy: type-guard

Validate before calling

Set<String> TIME_DB = Set.of("mysql", "oracle", "postgresql", "sqlserver", "dm", "oscar");
if (!TIME_DB.contains(dbType)) skipTimeFilter = true;

Type guard

static boolean supportsEpochTimeFilter(String dbType) { return dbType != null && Set.of("mysql","oracle","postgresql","sqlserver","dm","oscar").contains(dbType.toLowerCase()); }

Try / catch

try { frag = PageUtil.getTimeStartSql(dbType, col); } catch (IllegalArgumentException e) { throw new ConfigurationException("time filters unsupported on " + dbType, e); }

Prevention

When it happens

Trigger: Calling getTimeStartSql(dbType, timeColumnName) with a dbType not in {mysql, oracle, postgresql, sqlserver, dm, oscar} — e.g. h2, db2, mariadb spelled as 'maria', or a casing/whitespace variant (the method lowercases dbType itself, so case is tolerated but the name must match exactly).

Common situations: Console time-range queries (transaction list filtered by start time) against an unsupported store; custom store implementations reusing PageUtil with their own dbType constant.

Related errors


AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14). Data as JSON: /api/errors/9d173f6abe5e6f05. Report an issue: GitHub.