tursodatabase/turso · warning · SQLFeatureNotSupportedException
Not yet implemented by SQLite JDBC driver
Error message
Not yet implemented by SQLite JDBC driver
What it means
DatabaseMetaData.getFunctionColumns throws SQLFeatureNotSupportedException because the JDBC metadata layer does not implement function-column introspection (the neighboring getFunctions and getPseudoColumns are likewise unimplemented). Callers that walk this metadata during schema discovery will fail even though ordinary table metadata methods work.
Source
Thrown at bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java:1186
@Override
public ResultSet getClientInfoProperties() throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
@SkipNullableCheck
public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern)
throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
@SkipNullableCheck
public ResultSet getFunctionColumns(
String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)
throws SQLException {
throw new SQLFeatureNotSupportedException("Not yet implemented by SQLite JDBC driver");
}
@Override
@SkipNullableCheck
public ResultSet getPseudoColumns(
String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
public boolean generatedKeyAlwaysReturned() throws SQLException {
throw new SQLFeatureNotSupportedException();
}
@Override
@SkipNullableCheck
public <T> T unwrap(Class<T> iface) throws SQLException {View on GitHub (pinned to bad083fafb)
Solutions
- Wrap getFunctionColumns in try-catch (SQLFeatureNotSupportedException) and degrade to 'no function metadata'.
- Skip the call entirely when DatabaseMetaData.getSQLKeywords-style capability checks or driver name indicate the Turso driver.
- Query pragma table_info / sqlite_master directly for the schema information you actually need.
- For GUI tools, restrict browsing to tables and views, or file a tool-side issue to tolerate unsupported function metadata.
Example fix
// before
ResultSet rs = metaData.getFunctionColumns(null, null, "myFunc", "%");
// after
List<Map<String, Object>> params = List.of();
try {
try (ResultSet rs = metaData.getFunctionColumns(null, null, "myFunc", "%")) {
params = readRows(rs);
}
} catch (SQLFeatureNotSupportedException e) {
// driver does not expose function-column metadata; proceed without it
} Defensive patterns
Strategy: try-catch
Validate before calling
DatabaseMetaData md = conn.getMetaData();
// no direct capability flag exists for getFunctionColumns; probe once and cache
boolean functionColumnsSupported;
try {
md.getFunctionColumns(null, null, "%", "%").close();
functionColumnsSupported = true;
} catch (SQLFeatureNotSupportedException e) {
functionColumnsSupported = false;
} Try / catch
try {
try (ResultSet rs = metaData.getFunctionColumns(catalog, schema, fnPattern, colPattern)) {
return readRows(rs);
}
} catch (SQLFeatureNotSupportedException e) {
return Collections.emptyList(); // function-column metadata unavailable; degrade gracefully
} Prevention
- Never assume full DatabaseMetaData coverage on alternative JDBC drivers.
- Isolate metadata sweeps in a capability-aware adapter that catches SQLFeatureNotSupportedException per method.
- For schema inspection, prefer engine-native queries (pragma table_info, sqlite_master) over exhaustive JDBC metadata.
- When shipping tools that browse schemas, test them against more than one driver.
When it happens
Trigger: metaData.getFunctionColumns(catalog, schema, functionPattern, columnPattern) invoked directly; schema-diff or migration tools enumerating function parameters; IDE database browsers (DBeaver, DataGrip, IntelliJ) opening the Functions node; Hibernate/Spring Data performing full metadata sweeps at startup.
Common situations: Pointing a database GUI tool at a Turso JDBC URL and expanding the functions tree; running Liquibase/Flyway community extensions that probe function metadata; ORM bootstrap with aggressive metadata collection; custom admin consoles that render full schemas.
Related errors
- database connection closed
- Failed to convert ${sql} into bytes
- SQLite only supports TYPE_FORWARD_ONLY cursors
- SQLite only supports CONCUR_READ_ONLY cursors
- SQLite only supports closing cursors at commit
AI-assisted analysis of tursodatabase/turso@bad083fafb (2026-08-16).
Data as JSON: /api/errors/3bca779c916bae30.
Report an issue: GitHub.