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

  1. Check the lang string spelling against registered languages (see query.GetLanguage and the language packages' init registration).
  2. Add a blank import for the language package, e.g. _ "github.com/hknutzen/cayley/query/gremlin" or the gopl dialect you need.
  3. 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

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


AI-assisted analysis of cayleygraph/cayley@81dcd7d73e (2026-09-06). Data as JSON: /api/errors/6dd885425f5499d2. Report an issue: GitHub.