{"record":{"id":"916eb93591a4cd8d","repo":"t8y2/dbx","slug":"hive-driver-does-not-expose-hiveserver2-metadata-r-916eb9","errorCode":null,"errorMessage":"Hive driver does not expose HiveServer2 metadata RPCs","messagePattern":"Hive driver does not expose HiveServer2 metadata RPCs","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/hive-go/metadata.go","lineNumber":188,"sourceCode":"}\n\nfunc normalizeMetadataColumn(value string) string {\n\treturn strings.NewReplacer(\"_\", \"\", \"-\", \"\", \" \", \"\").Replace(strings.ToUpper(strings.TrimSpace(value)))\n}\n\nfunc (server *server) hiveMetadata(operation func(context.Context, gohive.MetadataProvider) (gohive.MetadataResult, error)) (gohive.MetadataResult, error) {\n\tconnection, err := server.requireConnection()\n\tif err != nil {\n\t\treturn gohive.MetadataResult{}, err\n\t}\n\tctx, cancel := context.WithCancel(context.Background())\n\tserver.setActiveOperation(cancel)\n\tdefer server.clearActiveOperation(cancel)\n\tvar result gohive.MetadataResult\n\terr = connection.Raw(func(rawConnection any) error {\n\t\tprovider, ok := rawConnection.(gohive.MetadataProvider)\n\t\tif !ok {\n\t\t\treturn errors.New(\"Hive driver does not expose HiveServer2 metadata RPCs\")\n\t\t}\n\t\tvar operationErr error\n\t\tresult, operationErr = operation(ctx, provider)\n\t\treturn operationErr\n\t})\n\treturn result, err\n}\n\nfunc (server *server) connectionInfo() (map[string]any, error) {\n\tversion := \"\"\n\tif result, err := server.executeQuery(queryOptions{SQL: \"SELECT VERSION()\", MaxRows: 1, TimeoutSecs: 5}); err == nil && len(result.Rows) > 0 && len(result.Rows[0]) > 0 {\n\t\tversion = stringValue(result.Rows[0][0])\n\t}\n\tusername := server.config.Username\n\tif result, err := server.executeQuery(queryOptions{SQL: \"SELECT CURRENT_USER()\", MaxRows: 1, TimeoutSecs: 5}); err == nil && len(result.Rows) > 0 && len(result.Rows[0]) > 0 {\n\t\tif current := stringValue(result.Rows[0][0]); current != \"\" {\n\t\t\tusername = current\n\t\t}","sourceCodeStart":170,"sourceCodeEnd":206,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/hive-go/metadata.go#L170-L206","documentation":"Inside hiveMetadata, the raw underlying driver connection is type-asserted to gohive.MetadataProvider. If the raw connection returned by connection.Raw does not implement that interface, the driver build in use cannot issue HiveServer2 metadata RPCs (GetTables, GetColumns, etc.), so this error is thrown. It is a driver-capability mismatch, not a server problem.","triggerScenarios":"Calling any metadata-backed operation (listDatabases, listTables, getColumns, getTableComment) when the underlying gohive driver/connection type does not implement gohive.MetadataProvider — e.g. a different or older gohive version, or a wrapped/proxied connection that hides the concrete type.","commonSituations":"Upgrading or swapping the gohive dependency to a version whose connection type no longer implements MetadataProvider; injecting a custom dialer/wrapper that returns a non-standard connection; vendoring an old fork of the driver.","solutions":["Use a gohive version whose connection implements gohive.MetadataProvider; pin/upgrade the dependency (go get -u the driver and go mod tidy).","Remove any wrapper around the raw connection so connection.Raw receives the concrete gohive connection type.","If the driver cannot provide metadata RPCs, avoid metadata endpoints or fall back to SQL-based metadata (SHOW TABLES / DESCRIBE).","Add a startup capability check: call a cheap metadata RPC at connect time to fail fast with a clear message."],"exampleFix":"// before\nrequire github.com/sql-machine-language/gohive v0.0.0-old // lacks MetadataProvider\n// after\ngo get github.com/yourorg/gohive@v1.2.3 // connection implements gohive.MetadataProvider\ngo mod tidy","handlingStrategy":"type-guard","validationCode":"// Go — verify capability at startup\nvar _ gohive.MetadataProvider = conn // compile-time check where possible\n_, err := srv.ListDatabases(); if err != nil { fail fast }","typeGuard":"func supportsMetadata(raw any) bool {\n    _, ok := raw.(gohive.MetadataProvider)\n    return ok\n}","tryCatchPattern":"tables, err := srv.ListTables(schema)\nif err != nil && strings.Contains(err.Error(), \"Metadata RPCs\") {\n    // fallback to SQL-based metadata\n    tables, err = srv.Dispatch(queryOptions{SQL: \"SHOW TABLES IN \" + schema})\n}","preventionTips":["Pin a gohive version known to implement gohive.MetadataProvider.","Do not wrap or proxy the raw driver connection.","Smoke-test one metadata RPC at connect time.","Keep a SQL-based metadata fallback (SHOW TABLES / DESCRIBE)."],"tags":["hive","driver-capability","metadata","type-assertion","go"],"backgroundTag":"driver-capability-missing","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}