cayleygraph/cayley · error
unsupported language: %q
Error message
unsupported language: %q
What it means
Execute() looks up a query language by name via GetLanguage(lang). If no language plugin is registered under that name (e.g. "gremlin", "gql", "sparql"), it returns this error instead of running the query. It is a guard against calling Session() on a nil language.
Source
Thrown at query/session.go:137
}
return nil
}
// Languages returns names of registered query languages.
func Languages() []string {
out := make([]string, 0, len(languages))
for name := range languages {
out = append(out, name)
}
return out
}
// Execute runs the query in a given language and returns an iterator over the results.
// Type of results depends on Collation. See Options for details.
func Execute(ctx context.Context, qs graph.QuadStore, lang, query string, opt Options) (Iterator, error) {
l := GetLanguage(lang)
if l == nil {
return nil, fmt.Errorf("unsupported language: %q", lang)
}
sess := l.Session(qs)
return sess.Execute(ctx, query, opt)
}
View on GitHub (pinned to 81dcd7d73e)
Solutions
- Check the lang string spelling against registered languages (see query.GetLanguage and the language packages' init registration).
- Add a blank import for the language package, e.g. _ "github.com/hknutzen/cayley/query/gremlin" or the gopl dialect you need.
- Log or enumerate available languages before executing to confirm registration.
Example fix
// before
it, err := query.Execute(ctx, qs, "gql", q, query.Options{})
// after
import _ "github.com/hknutzen/cayley/query/gql"
it, err := query.Execute(ctx, qs, "gql", q, query.Options{}) Defensive patterns
Strategy: validation
Validate before calling
if query.GetLanguage(lang) == nil {
return fmt.Errorf("query language %q not registered; check imports", lang)
} Type guard
func languageAvailable(lang string) bool { return query.GetLanguage(lang) != nil } Try / catch
it, err := query.Execute(ctx, qs, lang, q, opt)
if err != nil {
if strings.HasPrefix(err.Error(), "unsupported language") {
// register/import the language package or fix the name
}
return err
} Prevention
- Blank-import every query language package you use in one init file.
- Centralize the language name in a constant to avoid typos.
- Smoke-test query execution in CI for each supported language.
When it happens
Trigger: Calling query.Execute(ctx, qs, lang, q, opt) with a lang string that has not been registered, misspelled, or whose language package was never imported.
Common situations: Typos like "gremelin"; using a language whose side-effect import (which registers it via init) was removed during refactoring; building with a trimmed dependency set that excludes a query language package.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- unsupported query language: %q
- cannot count iterator without a valid context
- node tokens not valid
- varint: overflow
- ErrNoBucket
AI-assisted analysis of cayleygraph/cayley@81dcd7d73e (2026-09-06).
Data as JSON: /api/errors/6dd885425f5499d2.
Report an issue: GitHub.