apache/dolphinscheduler · error · UnsupportedOperationException
Can't get validation query without compatible mode
Error message
Can't get validation query without compatible mode
What it means
OceanBase supports two compatible modes (MySQL and Oracle), each with a different validation query. The no-arg getValidationQuery() has no mode context, so it always throws UnsupportedOperationException; callers must use getValidationQuery(compatibleMode) instead.
Source
Thrown at dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java:113
connectionParam.setDriverClassName(getDatasourceDriver());
connectionParam.setValidationQuery(getValidationQuery(connectionParam.getCompatibleMode()));
connectionParam.setOther(obDataSourceParamDTO.getOther());
return connectionParam;
}
@Override
public ConnectionParam createConnectionParams(String connectionJson) {
return JSONUtils.parseObject(connectionJson, OceanBaseConnectionParam.class);
}
@Override
public String getDatasourceDriver() {
return DataSourceConstants.COM_OCEANBASE_JDBC_DRIVER;
}
@Override
public String getValidationQuery() {
throw new UnsupportedOperationException("Can't get validation query without compatible mode");
}
public String getValidationQuery(String compatibleMode) {
if (compatibleMode != null) {
switch (compatibleMode.trim().toLowerCase()) {
case "mysql":
return DataSourceConstants.MYSQL_VALIDATION_QUERY;
case "oracle":
return DataSourceConstants.ORACLE_VALIDATION_QUERY;
}
}
throw new UnsupportedOperationException("Invalid compatible mode: " + compatibleMode);
}
@Override
public String getJdbcUrl(ConnectionParam connectionParam) {
OceanBaseConnectionParam obConnectionParam = (OceanBaseConnectionParam) connectionParam;View on GitHub (pinned to 02eac45a1b)
Solutions
- Ensure the OceanBase datasource defines compatibleMode (mysql or oracle) in its params so the overload getValidationQuery(compatibleMode) is invoked
- If you maintain calling code, call getValidationQuery(((OceanBaseConnectionParam) cp).getCompatibleMode()) instead of the no-arg version
- Set compatibleMode in the datasource form/JSON when creating the OceanBase datasource
Example fix
// before
String vq = processor.getValidationQuery(); // throws
// after
String vq = processor.getValidationQuery(
((OceanBaseConnectionParam) connectionParam).getCompatibleMode()); Defensive patterns
Strategy: try-catch
Validate before calling
if ("OCEANBASE".equals(type) &&
!"mysql".equalsIgnoreCase(mode) && !"oracle".equalsIgnoreCase(mode)) {
throw new IllegalArgumentException("OceanBase datasource needs compatibleMode=mysql|oracle");
} Type guard
boolean hasCompatibleMode(OceanBaseConnectionParam p) {
String m = p.getCompatibleMode();
return m != null && ("mysql".equalsIgnoreCase(m.trim()) || "oracle".equalsIgnoreCase(m.trim()));
} Try / catch
try {
vq = processor.getValidationQuery();
} catch (UnsupportedOperationException e) {
if (e.getMessage().contains("validation query")) {
vq = processor.getValidationQuery(obParam.getCompatibleMode());
} else throw e;
} Prevention
- Always set compatibleMode when defining OceanBase datasources
- Use the mode-aware overload in custom code
- Add form validation for compatibleMode in tooling
When it happens
Trigger: Any code path calling the interface-default getValidationQuery() on OceanBaseDataSourceProcessor — i.e. code that resolves a validation query without first reading the datasource's compatibleMode parameter.
Common situations: Generic datasource framework code fetching the validation query via the no-arg API; misconfiguration where the OceanBase datasource's compatibleMode is absent so the mode-aware overload is not used.
Related errors
- Invalid compatible mode: " + compatibleMode
- DATASOURCE_CONNECT_FAILED
- GET_DATASOURCE_TABLES_ERROR
- Unsupported executeType: {0}
- The file type: ${fileExtension} cannot be fetched
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/38fd89a300073372.
Report an issue: GitHub.