Documentation
¶
Index ¶
- type Condition
- type Executor
- type ExpandRelationship
- type FilterWhere
- type Lexer
- type MatchClause
- type NodePattern
- type Parser
- type Pattern
- type PatternElement
- type Plan
- type PlanStep
- type Query
- type RelPattern
- type Result
- type ReturnClause
- type ReturnItem
- type ScanNodes
- type SkippedProject
- type Token
- type TokenType
- type WhereClause
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Condition ¶
type Condition struct {
Variable string // "f"
Property string // "name"
Operator string // "=", "<>", "=~", "CONTAINS", "STARTS WITH", "ENDS WITH", "IS NULL", "IS NOT NULL", "IN", ">", "<", ">=", "<="
Value string // the comparison value (unused for IN, IS NULL, IS NOT NULL)
// ValueIsString is true when Value came from a string literal. Ordered
// comparisons (<, >, <=, >=) use it to pick lexicographic vs numeric
// semantics, matching openCypher's type-aware comparison.
ValueIsString bool
// Values holds the list literal for the IN operator: WHERE n.x IN ['a','b'].
// Empty for all other operators.
Values []string
}
Condition is a single property comparison.
type Executor ¶
type Executor struct {
Store *store.Store
MaxRows int // 0 means defaultMaxRows
// MaxUnboundedPathDepth overrides the depth used when a query uses a
// bare `*` variable-length pattern with no upper bound. Zero means
// defaultUnboundedPathDepth. The effective cap is always reported on
// Result.UnboundedDepthCap when the cap fires so callers see when
// their `*` was clipped.
MaxUnboundedPathDepth int
// contains filtered or unexported fields
}
Executor runs Cypher execution plans against a store.
type ExpandRelationship ¶
type ExpandRelationship struct {
FromVar string // source variable (already bound)
ToVar string // target variable (to bind)
RelVar string // optional relationship variable (to bind edge)
ToLabel string // optional label filter on target
ToProps map[string]string
EdgeTypes []string // required edge types
Direction string // "outbound", "inbound", "any"
MinHops int
MaxHops int
}
ExpandRelationship follows edges from bound nodes to match target nodes.
type FilterWhere ¶
FilterWhere applies WHERE conditions to the bindings.
type Lexer ¶
type Lexer struct {
// contains filtered or unexported fields
}
Lexer tokenizes a Cypher query string.
type MatchClause ¶
type MatchClause struct {
Pattern *Pattern
}
MatchClause holds the MATCH pattern.
type NodePattern ¶
type NodePattern struct {
Variable string // e.g. "f"
Label string // e.g. "Function" (optional)
Props map[string]string // inline property filters (optional)
}
NodePattern matches a graph node with optional label and inline properties.
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
Parser converts a token stream into an AST.
type Pattern ¶
type Pattern struct {
Elements []PatternElement
}
Pattern is a sequence of alternating nodes and relationships.
type PatternElement ¶
type PatternElement interface {
// contains filtered or unexported methods
}
PatternElement is either a NodePattern or a RelPattern.
type Plan ¶
type Plan struct {
Steps []PlanStep
ReturnSpec *ReturnClause
}
Plan represents an execution plan for a parsed Cypher query.
type PlanStep ¶
type PlanStep interface {
// contains filtered or unexported methods
}
PlanStep is a single step in the execution plan.
type Query ¶
type Query struct {
Match *MatchClause
Where *WhereClause
Return *ReturnClause
}
Query represents a parsed Cypher query.
type RelPattern ¶
type RelPattern struct {
Variable string // (optional)
Types []string // relationship types, e.g. ["CALLS", "HTTP_CALLS"]
Direction string // "outbound", "inbound", "any"
MinHops int // for variable-length, default 1
MaxHops int // for variable-length, default 1 (0 means unbounded)
}
RelPattern matches a graph relationship with optional types, direction, and hops.
type Result ¶
type Result struct {
Columns []string `json:"columns"`
Rows []map[string]any `json:"rows"`
// Truncated is true if any clipping step (final LIMIT/max_rows cap or an
// intermediate binding-set cap during path expansion) dropped rows. When
// true, the returned Rows is a sample — not the full matching set. Clients
// should either raise max_rows, narrow the query with WHERE filters, or
// shard the query to retrieve the complete result.
Truncated bool `json:"truncated,omitempty"`
// EffectiveCap is the row cap that was active for this query. Reflects the
// lower of (user-supplied max_rows, absoluteMaxRows), defaulting to
// defaultMaxRows when max_rows is not set. Always populated so clients
// can report "capped at N" even when Truncated is false.
EffectiveCap int `json:"effective_cap"`
// SkippedProjects lists projects whose execution returned an error and
// were excluded from the merged result. Empty when no projects were
// skipped. Populating this (instead of silently dropping the project)
// lets callers see when a single corrupt project DB or transient query
// failure is shaping the result set.
SkippedProjects []SkippedProject `json:"skipped_projects,omitempty"`
// UnboundedDepthCap is set to the depth used when a query uses a bare
// `*` variable-length pattern and the engine had to apply its default
// cap. Zero means no unbounded pattern was capped. Callers that issued
// an unbounded `*` should treat any non-zero value as "this is a
// sample to depth N — raise MaxUnboundedPathDepth or use an explicit
// upper bound for full coverage."
UnboundedDepthCap int `json:"unbounded_depth_cap,omitempty"`
}
Result holds the tabular output of a query.
type ReturnClause ¶
type ReturnClause struct {
Items []ReturnItem
OrderBy string // "f.name" (optional)
OrderDir string // "ASC" or "DESC"
Limit int // meaningful only when HasLimit; LIMIT 0 is a valid empty result
HasLimit bool // true when an explicit LIMIT clause was present
Distinct bool
}
ReturnClause specifies which data to return from the query.
type ReturnItem ¶
type ReturnItem struct {
Variable string // "f"
Property string // "name" (empty = return whole node)
Alias string // "AS call_count" (optional)
Func string // "COUNT" / "LABELS" (optional aggregation or function)
// Distinct is true for COUNT(DISTINCT x) — count unique non-null
// values of x rather than total bindings. Only meaningful when
// Func == "COUNT".
Distinct bool
}
ReturnItem is a single item in the RETURN clause.
type ScanNodes ¶
type ScanNodes struct {
Variable string
Label string
Props map[string]string // inline property filters
}
ScanNodes finds nodes matching label and/or inline property filters.
type SkippedProject ¶
SkippedProject describes a project that errored during execution and was excluded from the merged result. Err is the error string at the time of skip.
type Token ¶
Token is a single lexer token.
type TokenType ¶
type TokenType int
TokenType classifies a lexer token.
const ( // Keywords TokMatch TokenType = iota // MATCH TokWhere // WHERE TokReturn // RETURN TokOrder // ORDER TokBy // BY TokLimit // LIMIT TokAnd // AND TokOr // OR TokAs // AS TokDistinct // DISTINCT TokCount // COUNT TokContains // CONTAINS TokStarts // STARTS TokEnds // ENDS TokWith // WITH TokIs // IS TokNull // NULL TokNot // NOT TokIn // IN TokAsc // ASC TokDesc // DESC // Write keywords — reserved for parser-level rejection. // code-graph implements a read-only Cypher subset; these are // recognized so the parser can produce a clear "not supported in // read-only subset" error rather than a confusing "unexpected token" // or silent acceptance via trailing-token tolerance. TokCreate // CREATE TokDelete // DELETE TokSet // SET TokMerge // MERGE TokRemove // REMOVE // Symbols TokLParen // ( TokRParen // ) TokLBracket // [ TokRBracket // ] TokDash // - TokGT // > TokLT // < TokColon // : TokDot // . TokLBrace // { TokRBrace // } TokStar // * TokComma // , TokEQ // = TokRegex // =~ TokGTE // >= TokLTE // <= TokNEQ // <> TokPipe // | TokDotDot // .. // Literals TokIdent // identifier TokString // "..." or '...' TokNumber // integer TokEOF // end of input )
type WhereClause ¶
WhereClause holds filter conditions joined by AND/OR.