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

  1. Wrap getFunctionColumns in try-catch (SQLFeatureNotSupportedException) and degrade to 'no function metadata'.
  2. Skip the call entirely when DatabaseMetaData.getSQLKeywords-style capability checks or driver name indicate the Turso driver.
  3. Query pragma table_info / sqlite_master directly for the schema information you actually need.
  4. 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

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


AI-assisted analysis of tursodatabase/turso@bad083fafb (2026-08-16). Data as JSON: /api/errors/3bca779c916bae30. Report an issue: GitHub.