Documentation
¶
Index ¶
- Constants
- func AddFromClauseBindings(localScope *pgsql.IdentifierSet, fromClauses []pgsql.FromClause)
- func AddFromExpressionBinding(localScope *pgsql.IdentifierSet, expression pgsql.Expression)
- func ExpressionReferencesOnlyLocalIdentifiers(expression pgsql.Expression, localScope *pgsql.IdentifierSet) bool
- func FlattenConjunction(expr pgsql.Expression) []pgsql.Expression
- func FromExpressionReferencesOnlyLocalIdentifiers(expression pgsql.Expression, localScopes ...*pgsql.IdentifierSet) bool
- func IndexPatternPredicateTargets(query *cypher.RegularQuery) map[*cypher.PatternPredicate]PatternTarget
- func IndexPatternTargets(query *cypher.RegularQuery) map[*cypher.PatternPart]PatternTarget
- func IsBidirectionalSearchAnchor(selectivity int) bool
- func IsLocalToScope(expression pgsql.Expression, localScope *pgsql.IdentifierSet) bool
- func MeasureSelectivity(bindings BindingLookup, expression pgsql.Expression) (int, error)
- func PartitionConstraintByLocality(expression pgsql.Expression, localScope *pgsql.IdentifierSet) (pgsql.Expression, pgsql.Expression)
- func QueryReferencesOnlyLocalIdentifiers(query pgsql.Query, localScope *pgsql.IdentifierSet) bool
- func SelectReferencesOnlyLocalIdentifiers(selectBody pgsql.Select, localScope *pgsql.IdentifierSet) bool
- func SubqueryReferencesOnlyLocalIdentifiers(subquery pgsql.Subquery, localScope *pgsql.IdentifierSet) bool
- type AggregateTraversalCountDecision
- type AggregateTraversalCountShape
- type Analysis
- type Barrier
- type BarrierKind
- type Binding
- type BindingKind
- type BindingLookup
- type ConservativePatternReorderingRule
- type CountStoreFastPathDecision
- type CountStoreFastPathTarget
- type ExpandIntoDecision
- type ExpansionSuffixPushdownDecision
- type LatePathMaterializationDecision
- type LatePathMaterializationMode
- type LimitPushdownDecision
- type LimitPushdownMode
- type LoweringDecision
- type LoweringPlan
- type MatchClause
- type Optimizer
- type PathVariable
- type PatternPredicatePlacementDecision
- type PatternPredicatePlacementMode
- type PatternTarget
- type Plan
- type Predicate
- type PredicateAttachment
- type PredicateAttachmentRule
- type PredicateAttachmentScope
- type PredicatePlacementDecision
- type ProjectionPruningDecision
- type QueryPart
- type QueryPartKind
- type Region
- type Rule
- type RuleResult
- type SelectivityModel
- func (s SelectivityModel) EndpointSelectivity(expression pgsql.Expression, bound, hasPreviousFrameBinding bool) (int, error)
- func (s SelectivityModel) Measure(expression pgsql.Expression) (int, error)
- func (s SelectivityModel) ShouldFlipTraversalDirection(leftBound, rightBound bool, leftExpression, rightExpression pgsql.Expression) (bool, error)
- type ShortestPathFilterDecision
- type ShortestPathFilterMode
- type ShortestPathStrategy
- type ShortestPathStrategyDecision
- type TraversalDirectionDecision
- type TraversalStepTarget
Constants ¶
View Source
const ( LoweringProjectionPruning = "ProjectionPruning" LoweringLatePathMaterialization = "LatePathMaterialization" LoweringExpandIntoDetection = "ExpandIntoDetection" LoweringTraversalDirection = "TraversalDirectionSelection" LoweringShortestPathStrategy = "ShortestPathStrategySelection" LoweringShortestPathFilter = "ShortestPathFilterMaterialization" LoweringLimitPushdown = "LimitPushdown" LoweringExpansionSuffixPushdown = "ExpansionSuffixPushdown" LoweringPredicatePlacement = "PredicatePlacement" LoweringCountStoreFastPath = "CountStoreFastPath" LoweringCollectIDMembership = "CollectIDMembership" LoweringAggregateTraversalCount = "AggregateTraversalCount" )
Variables ¶
This section is empty.
Functions ¶
func AddFromClauseBindings ¶
func AddFromClauseBindings(localScope *pgsql.IdentifierSet, fromClauses []pgsql.FromClause)
func AddFromExpressionBinding ¶
func AddFromExpressionBinding(localScope *pgsql.IdentifierSet, expression pgsql.Expression)
func ExpressionReferencesOnlyLocalIdentifiers ¶
func ExpressionReferencesOnlyLocalIdentifiers(expression pgsql.Expression, localScope *pgsql.IdentifierSet) bool
ExpressionReferencesOnlyLocalIdentifiers returns true only when every binding reference found in the expression is a member of localScope.
func FlattenConjunction ¶
func FlattenConjunction(expr pgsql.Expression) []pgsql.Expression
FlattenConjunction collects the leaf operands of a left-recursive AND chain.
func FromExpressionReferencesOnlyLocalIdentifiers ¶
func FromExpressionReferencesOnlyLocalIdentifiers(expression pgsql.Expression, localScopes ...*pgsql.IdentifierSet) bool
func IndexPatternPredicateTargets ¶
func IndexPatternPredicateTargets(query *cypher.RegularQuery) map[*cypher.PatternPredicate]PatternTarget
func IndexPatternTargets ¶
func IndexPatternTargets(query *cypher.RegularQuery) map[*cypher.PatternPart]PatternTarget
func IsLocalToScope ¶
func IsLocalToScope(expression pgsql.Expression, localScope *pgsql.IdentifierSet) bool
func MeasureSelectivity ¶
func MeasureSelectivity(bindings BindingLookup, expression pgsql.Expression) (int, error)
func PartitionConstraintByLocality ¶
func PartitionConstraintByLocality(expression pgsql.Expression, localScope *pgsql.IdentifierSet) (pgsql.Expression, pgsql.Expression)
PartitionConstraintByLocality splits a conjunction (A AND B AND ...) into two expressions: one whose every binding reference is contained in localScope (safe for JOIN ON), and one that references outside identifiers (must stay in WHERE).
Only top-level AND operands are split. If an expression is not a BinaryExpression with OperatorAnd, the whole expression is tested as a unit.
func QueryReferencesOnlyLocalIdentifiers ¶
func QueryReferencesOnlyLocalIdentifiers(query pgsql.Query, localScope *pgsql.IdentifierSet) bool
func SelectReferencesOnlyLocalIdentifiers ¶
func SelectReferencesOnlyLocalIdentifiers(selectBody pgsql.Select, localScope *pgsql.IdentifierSet) bool
func SubqueryReferencesOnlyLocalIdentifiers ¶
func SubqueryReferencesOnlyLocalIdentifiers(subquery pgsql.Subquery, localScope *pgsql.IdentifierSet) bool
Types ¶
type AggregateTraversalCountDecision ¶
type AggregateTraversalCountDecision struct {
QueryPartIndex int `json:"query_part_index"`
SourceSymbol string `json:"source_symbol"`
TerminalSymbol string `json:"terminal_symbol"`
CountAlias string `json:"count_alias"`
Limit int64 `json:"limit,omitempty"`
Target TraversalStepTarget `json:"target"`
}
type AggregateTraversalCountShape ¶
type AggregateTraversalCountShape struct {
QueryPartIndex int
SourceSymbol string
TerminalSymbol string
CountAlias string
ReturnSourceAlias string
ReturnCountAlias string
ReturnCount bool
Limit int64
SourceMatch *cypher.Match
TerminalMatch *cypher.Match
SourceKinds graph.Kinds
TerminalKinds graph.Kinds
RelationshipKinds graph.Kinds
Direction graph.Direction
MinDepth int64
MaxDepth int64
Target TraversalStepTarget
}
func AggregateTraversalCountShapeForQuery ¶
func AggregateTraversalCountShapeForQuery(query *cypher.RegularQuery) (AggregateTraversalCountShape, bool)
type Analysis ¶
type Analysis struct {
QueryParts []QueryPart
}
func Analyze ¶
func Analyze(query *cypher.RegularQuery) Analysis
func (Analysis) Diagnostics ¶
type Barrier ¶
type Barrier struct {
QueryPartIndex int
ClauseIndex int
Kind BarrierKind
Dependencies []string
}
type BarrierKind ¶
type BarrierKind string
const ( BarrierKindReturn BarrierKind = "return" BarrierKindWith BarrierKind = "with" BarrierKindUnwind BarrierKind = "unwind" BarrierKindOptionalMatch BarrierKind = "optional_match" BarrierKindUpdate BarrierKind = "update" )
type Binding ¶
type Binding struct {
Symbol string
Kind BindingKind
ClauseIndex int
PatternIndex int
}
type BindingKind ¶
type BindingKind string
const ( BindingKindNode BindingKind = "node" BindingKindRelationship BindingKind = "relationship" BindingKindPath BindingKind = "path" )
type BindingLookup ¶
type BindingLookup interface {
LookupDataType(identifier pgsql.Identifier) (pgsql.DataType, bool)
}
type ConservativePatternReorderingRule ¶
type ConservativePatternReorderingRule struct{}
func (ConservativePatternReorderingRule) Apply ¶
func (s ConservativePatternReorderingRule) Apply(plan *Plan) (bool, error)
func (ConservativePatternReorderingRule) Name ¶
func (s ConservativePatternReorderingRule) Name() string
type CountStoreFastPathDecision ¶
type CountStoreFastPathDecision struct {
QueryPartIndex int `json:"query_part_index"`
ClauseIndex int `json:"clause_index"`
PatternIndex int `json:"pattern_index"`
BindingSymbol string `json:"binding_symbol,omitempty"`
Target CountStoreFastPathTarget `json:"target"`
KindSymbols []string `json:"kind_symbols,omitempty"`
}
type CountStoreFastPathTarget ¶
type CountStoreFastPathTarget string
const ( CountStoreFastPathNode CountStoreFastPathTarget = "node" CountStoreFastPathEdge CountStoreFastPathTarget = "edge" )
type ExpandIntoDecision ¶
type ExpandIntoDecision struct {
Target TraversalStepTarget `json:"target"`
}
type ExpansionSuffixPushdownDecision ¶
type ExpansionSuffixPushdownDecision struct {
Target TraversalStepTarget `json:"target"`
SuffixLength int `json:"suffix_length"`
SuffixStartStep int `json:"suffix_start_step"`
SuffixEndStep int `json:"suffix_end_step"`
PredicateAttachments []PredicateAttachment `json:"predicate_attachments,omitempty"`
}
type LatePathMaterializationDecision ¶
type LatePathMaterializationDecision struct {
Target TraversalStepTarget `json:"target"`
Mode LatePathMaterializationMode `json:"mode"`
}
type LatePathMaterializationMode ¶
type LatePathMaterializationMode string
const ( LatePathMaterializationPathEdgeID LatePathMaterializationMode = "path_edge_id" LatePathMaterializationExpansionPath LatePathMaterializationMode = "expansion_path" LatePathMaterializationEdgeComposite LatePathMaterializationMode = "edge_composite" )
type LimitPushdownDecision ¶
type LimitPushdownDecision struct {
Target TraversalStepTarget `json:"target"`
Mode LimitPushdownMode `json:"mode"`
}
type LimitPushdownMode ¶
type LimitPushdownMode string
const ( LimitPushdownTraversalCTE LimitPushdownMode = "traversal_cte" LimitPushdownShortestPathHarness LimitPushdownMode = "shortest_path_harness" )
type LoweringDecision ¶
type LoweringDecision struct {
Name string `json:"name"`
}
type LoweringPlan ¶
type LoweringPlan struct {
ProjectionPruning []ProjectionPruningDecision `json:"projection_pruning,omitempty"`
LatePathMaterialization []LatePathMaterializationDecision `json:"late_path_materialization,omitempty"`
ExpandInto []ExpandIntoDecision `json:"expand_into,omitempty"`
TraversalDirection []TraversalDirectionDecision `json:"traversal_direction,omitempty"`
ShortestPathStrategy []ShortestPathStrategyDecision `json:"shortest_path_strategy,omitempty"`
ShortestPathFilter []ShortestPathFilterDecision `json:"shortest_path_filter,omitempty"`
LimitPushdown []LimitPushdownDecision `json:"limit_pushdown,omitempty"`
ExpansionSuffixPushdown []ExpansionSuffixPushdownDecision `json:"expansion_suffix_pushdown,omitempty"`
PredicatePlacement []PredicatePlacementDecision `json:"predicate_placement,omitempty"`
PatternPredicate []PatternPredicatePlacementDecision `json:"pattern_predicate_placement,omitempty"`
CountStoreFastPath []CountStoreFastPathDecision `json:"count_store_fast_path,omitempty"`
AggregateTraversalCount []AggregateTraversalCountDecision `json:"aggregate_traversal_count,omitempty"`
}
func BuildLoweringPlan ¶
func BuildLoweringPlan(query *cypher.RegularQuery, predicateAttachments []PredicateAttachment) (LoweringPlan, error)
func (LoweringPlan) Decisions ¶
func (s LoweringPlan) Decisions() []LoweringDecision
func (LoweringPlan) Empty ¶
func (s LoweringPlan) Empty() bool
type MatchClause ¶
type Optimizer ¶
type Optimizer struct {
// contains filtered or unexported fields
}
func NewOptimizer ¶
type PathVariable ¶
type PatternPredicatePlacementDecision ¶
type PatternPredicatePlacementDecision struct {
Target TraversalStepTarget `json:"target"`
Mode PatternPredicatePlacementMode `json:"mode"`
}
type PatternPredicatePlacementMode ¶
type PatternPredicatePlacementMode string
const (
PatternPredicatePlacementExistence PatternPredicatePlacementMode = "existence"
)
type PatternTarget ¶
type PatternTarget struct {
QueryPartIndex int `json:"query_part_index"`
ClauseIndex int `json:"clause_index"`
PatternIndex int `json:"pattern_index"`
Predicate bool `json:"predicate,omitempty"`
PredicateIndex int `json:"predicate_index,omitempty"`
}
func (PatternTarget) TraversalStep ¶
func (s PatternTarget) TraversalStep(stepIndex int) TraversalStepTarget
type Plan ¶
type Plan struct {
Query *cypher.RegularQuery
Analysis Analysis
LoweringPlan LoweringPlan
Rules []RuleResult
PredicateAttachments []PredicateAttachment
}
type PredicateAttachment ¶
type PredicateAttachment struct {
QueryPartIndex int `json:"query_part_index"`
RegionIndex int `json:"region_index"`
ClauseIndex int `json:"clause_index"`
ExpressionIndex int `json:"expression_index"`
Scope PredicateAttachmentScope `json:"scope"`
BindingSymbols []string `json:"binding_symbols"`
Dependencies []string `json:"dependencies"`
}
func AttachPredicates ¶
func AttachPredicates(analysis Analysis) []PredicateAttachment
type PredicateAttachmentRule ¶
type PredicateAttachmentRule struct{}
func (PredicateAttachmentRule) Apply ¶
func (s PredicateAttachmentRule) Apply(plan *Plan) (bool, error)
func (PredicateAttachmentRule) Name ¶
func (s PredicateAttachmentRule) Name() string
type PredicateAttachmentScope ¶
type PredicateAttachmentScope string
const ( PredicateAttachmentScopeBinding PredicateAttachmentScope = "binding" PredicateAttachmentScopeRegion PredicateAttachmentScope = "region" )
type PredicatePlacementDecision ¶
type PredicatePlacementDecision struct {
Target TraversalStepTarget `json:"target"`
Attachment PredicateAttachment `json:"attachment"`
Placement PredicateAttachmentScope `json:"placement"`
}
type ProjectionPruningDecision ¶
type ProjectionPruningDecision struct {
Target TraversalStepTarget `json:"target"`
ReferencedSymbols []string `json:"referenced_symbols,omitempty"`
PatternBindingReferenced bool `json:"pattern_binding_referenced,omitempty"`
OmitLeftNode bool `json:"omit_left_node,omitempty"`
OmitRelationship bool `json:"omit_relationship,omitempty"`
OmitRightNode bool `json:"omit_right_node,omitempty"`
OmitPathBinding bool `json:"omit_path_binding,omitempty"`
}
type QueryPart ¶
type QueryPart struct {
Index int
Kind QueryPartKind
Regions []Region
Barriers []Barrier
ProjectionDependencies []string
}
type QueryPartKind ¶
type QueryPartKind string
const ( QueryPartKindSingle QueryPartKind = "single" QueryPartKindMulti QueryPartKind = "multi" )
type Region ¶
type Region struct {
QueryPartIndex int
StartClause int
EndClause int
Clauses []MatchClause
Bindings []Binding
BindingOccurrences []Binding
PathVariables []PathVariable
Predicates []Predicate
}
type Rule ¶
func DefaultRules ¶
func DefaultRules() []Rule
type RuleResult ¶
type SelectivityModel ¶
type SelectivityModel struct {
// contains filtered or unexported fields
}
func NewSelectivityModel ¶
func NewSelectivityModel(bindings BindingLookup) SelectivityModel
func (SelectivityModel) EndpointSelectivity ¶
func (s SelectivityModel) EndpointSelectivity(expression pgsql.Expression, bound, hasPreviousFrameBinding bool) (int, error)
func (SelectivityModel) Measure ¶
func (s SelectivityModel) Measure(expression pgsql.Expression) (int, error)
func (SelectivityModel) ShouldFlipTraversalDirection ¶
func (s SelectivityModel) ShouldFlipTraversalDirection(leftBound, rightBound bool, leftExpression, rightExpression pgsql.Expression) (bool, error)
type ShortestPathFilterDecision ¶
type ShortestPathFilterDecision struct {
Target TraversalStepTarget `json:"target"`
Mode ShortestPathFilterMode `json:"mode"`
Reason string `json:"reason,omitempty"`
}
type ShortestPathFilterMode ¶
type ShortestPathFilterMode string
const ( ShortestPathFilterTerminal ShortestPathFilterMode = "terminal" ShortestPathFilterEndpointPair ShortestPathFilterMode = "endpoint_pair" )
type ShortestPathStrategy ¶
type ShortestPathStrategy string
const ( ShortestPathStrategyBidirectional ShortestPathStrategy = "bidirectional" ShortestPathStrategyUnidirectional ShortestPathStrategy = "unidirectional" )
type ShortestPathStrategyDecision ¶
type ShortestPathStrategyDecision struct {
Target TraversalStepTarget `json:"target"`
Strategy ShortestPathStrategy `json:"strategy"`
Reason string `json:"reason,omitempty"`
}
type TraversalDirectionDecision ¶
type TraversalDirectionDecision struct {
Target TraversalStepTarget `json:"target"`
Flip bool `json:"flip,omitempty"`
Reason string `json:"reason,omitempty"`
}
type TraversalStepTarget ¶
Click to show internal directories.
Click to hide internal directories.