{"record":{"id":"3bca779c916bae30","repo":"tursodatabase/turso","slug":"not-yet-implemented-by-sqlite-jdbc-driver","errorCode":null,"errorMessage":"Not yet implemented by SQLite JDBC driver","messagePattern":"Not yet implemented by SQLite JDBC driver","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java","lineNumber":1186,"sourceCode":"\n  @Override\n  public ResultSet getClientInfoProperties() throws SQLException {\n    throw new SQLFeatureNotSupportedException();\n  }\n\n  @Override\n  @SkipNullableCheck\n  public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern)\n      throws SQLException {\n    throw new SQLFeatureNotSupportedException();\n  }\n\n  @Override\n  @SkipNullableCheck\n  public ResultSet getFunctionColumns(\n      String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)\n      throws SQLException {\n    throw new SQLFeatureNotSupportedException(\"Not yet implemented by SQLite JDBC driver\");\n  }\n\n  @Override\n  @SkipNullableCheck\n  public ResultSet getPseudoColumns(\n      String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)\n      throws SQLException {\n    throw new SQLFeatureNotSupportedException();\n  }\n\n  @Override\n  public boolean generatedKeyAlwaysReturned() throws SQLException {\n    throw new SQLFeatureNotSupportedException();\n  }\n\n  @Override\n  @SkipNullableCheck\n  public <T> T unwrap(Class<T> iface) throws SQLException {","sourceCodeStart":1168,"sourceCodeEnd":1204,"githubUrl":"https://github.com/tursodatabase/turso/blob/244cde92a7df7f9b8b8b7a4075c35a12977e303e/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java#L1168-L1204","documentation":"JDBC4DatabaseMetaData.getFunctionColumns(...) throws SQLFeatureNotSupportedException('Not yet implemented by SQLite JDBC driver') at JDBC4DatabaseMetaData.java:1186 - the driver has not implemented the JDBC function-metadata catalog (the sibling getFunctions and getPseudoColumns are also unimplemented). It is a metadata-surface gap, not a statement about your schema: the engine functions exist but are not enumerated through this API.","triggerScenarios":"DatabaseMetaData.getFunctionColumns(catalog, schema, functionPattern, columnPattern) called by SQL clients (DBeaver function-columns tab, DataGrip, SQuirreL), schema-documentation tools, or ORM introspection during startup.","commonSituations":"Browsing a turso database in a JDBC-capable IDE/tool that enumerates functions; tools generating ER diagrams or schema reports; migration tooling that inventories all DatabaseMetaData methods; JDBC conformance checkers.","solutions":["Skip/avoid the function-columns metadata view in your tool for turso databases.","Catch SQLFeatureNotSupportedException around DatabaseMetaData introspection and degrade gracefully to table/column metadata.","Query sqlite's own catalogs instead (pragma table_info, pragma function_list) when you need engine-level function info.","Watch driver updates - the message says 'not yet implemented', so a later release may add it."],"exampleFix":"// before\nResultSet cols = meta.getFunctionColumns(null, null, \"%, \"%\"); // throws\n\n// after\ntry {\n    ResultSet cols = meta.getFunctionColumns(null, null, \"%\", \"%\");\n} catch (SQLFeatureNotSupportedException e) {\n    // function metadata not implemented; degrade gracefully\n}","handlingStrategy":"try-catch","validationCode":"// probe metadata capability safely before building UI/reports\nDatabaseMetaData md = conn.getMetaData();\n// wrap function-metadata calls; turso has not implemented getFunctionColumns","typeGuard":null,"tryCatchPattern":"try {\n    ResultSet rs = md.getFunctionColumns(catalog, schema, fnPat, colPat);\n} catch (SQLFeatureNotSupportedException e) {\n    // function metadata unavailable: skip that view / use pragma function_list\n}","preventionTips":["Treat optional DatabaseMetaData methods as fallible in DB tools.","Degrade to table/column metadata when function metadata is unavailable.","Use SQLite pragmas (pragma function_list) for engine-level function info.","Keep JDBC conformance expectations per-driver when building generic tooling."],"tags":["java","jdbc","turso","database-metadata","introspection"],"backgroundTag":"jdbc-metadata-not-implemented","analyzedSha":"244cde92a7df7f9b8b8b7a4075c35a12977e303e","analyzedAt":"2026-08-20T07:02:18.389Z","contentChangedAt":"2026-08-20T07:02:18.389Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}