query

package
v25.0.0-custom-qt-impr... Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 5, 2025 License: Apache-2.0 Imports: 37 Imported by: 2

Documentation

Overview

Copyright 2016 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

Index

Constants

View Source
const (
	INT valType = iota
	FLOAT
	VFLOAT
	DEFAULT
	BIGFLOAT
)

Variables

View Source
var (
	ErrorIntOverflow     = errors.New("Integer overflow")
	ErrorFloat32Overflow = errors.New("Float32 overflow")
	ErrorDivisionByZero  = errors.New("Division by zero")
	ErrorFractionalPower = errors.New("Fractional power of negative number")
	ErrorNegativeLog     = errors.New("Log of negative number")
	ErrorNegativeRoot    = errors.New("Root of negative number")
	ErrorVectorsNotMatch = errors.New("The length of vectors must match")
	ErrorArgsDisagree    = errors.New("Left and right arguments must match")
	ErrorShouldBeVector  = errors.New("Type should be []float, but is not. Cannot determine type.")
	ErrorBadVectorMult   = errors.New("Cannot multiply vector by vector")
)
View Source
var (
	// ErrEmptyVal is returned when a value is empty.
	ErrEmptyVal = errors.New("Query: harmless error, e.g. task.Val is nil")
	// ErrWrongAgg is returned when value aggregation is attempted in the root level of a query.
	ErrWrongAgg = errors.New("Wrong level for var aggregation")
)
View Source
var ErrStopIteration = errors.New("stop iteration")

Functions

func ApplyMutations

func ApplyMutations(ctx context.Context, m *pb.Mutations) (*api.TxnContext, error)

ApplyMutations performs the required edge expansions and forwards the results to the worker to perform the mutations.

func AssignUids

func AssignUids(ctx context.Context, gmuList []*dql.Mutation) (map[string]uint64, error)

AssignUids tries to assign unique ids to each identity in the subjects and objects in the format of _:xxx. An identity, e.g. _:a, will only be assigned one uid regardless how many times it shows up in the subjects or objects

func ExpandEdges

func ExpandEdges(ctx context.Context, m *pb.Mutations) ([]*pb.DirectedEdge, error)

func ExtractBlankUIDs

func ExtractBlankUIDs(ctx context.Context, gmuList []*dql.Mutation) (map[string]uint64, error)

func ProcessGraph

func ProcessGraph(ctx context.Context, sg, parent *SubGraph, rch chan error)

ProcessGraph processes the SubGraph instance accumulating result for the query from different instances. Note: taskQuery is nil for root node.

func StripBlankNode

func StripBlankNode(mp map[string]uint64) map[string]uint64

StripBlankNode returns a copy of the map where all the keys have the blank node prefix removed.

func ToDirectedEdges

func ToDirectedEdges(gmuList []*dql.Mutation, newUids map[string]uint64) (
	edges []*pb.DirectedEdge, err error)

ToDirectedEdges converts the dql.Mutation input into a set of directed edges.

func ToJson

func ToJson(ctx context.Context, l *Latency, sgl []*SubGraph, field gqlSchema.Field) ([]byte,
	error)

ToJson converts the list of subgraph into a JSON response by calling toFastJSON.

func ToRDF

func ToRDF(l *Latency, sgl []*SubGraph) ([]byte, error)

ToRDF converts the given subgraph list into rdf format.

func UidToHex

func UidToHex(uid uint64) string

func UidsToHex

func UidsToHex(m map[string]uint64) map[string]string

UidsToHex converts the new UIDs to hex string.

Types

type CascadeArgs

type CascadeArgs struct {
	Fields []string
	First  int
	Offset int
}

CascadeArgs stores the arguments needed to process @cascade directive. It is introduced to ensure correct behaviour for cascade with pagination.

type ContextKey

type ContextKey int

ContextKey is used to set options in the context object.

const (
	// DebugKey is the key used to toggle debug mode.
	DebugKey ContextKey = iota
)

type ExecutionResult

type ExecutionResult struct {
	Subgraphs  []*SubGraph
	SchemaNode []*pb.SchemaNode
	Types      []*pb.TypeUpdate
	Metrics    map[string]uint64
}

ExecutionResult holds the result of running a query.

type Extensions

type Extensions struct {
	Latency *api.Latency    `json:"server_latency,omitempty"`
	Txn     *api.TxnContext `json:"txn,omitempty"`
	Metrics *api.Metrics    `json:"metrics,omitempty"`
}

Extensions represents the extra information appended to query results.

type Function

type Function struct {
	Name       string    // Specifies the name of the function.
	Args       []dql.Arg // Contains the arguments of the function.
	IsCount    bool      // gt(count(friends),0)
	IsValueVar bool      // eq(val(s), 10)
	IsLenVar   bool      // eq(len(s), 10)
}

Function holds the information about dql functions.

type Latency

type Latency struct {
	Start           time.Time     `json:"-"`
	Parsing         time.Duration `json:"query_parsing"`
	AssignTimestamp time.Duration `json:"assign_timestamp"`
	Processing      time.Duration `json:"processing"`
	Json            time.Duration `json:"json_conversion"`
}

Latency is used to keep track of the latency involved in parsing and processing the query. It also contains information about the time it took to convert the result into a format(JSON/Protocol Buffer) that the client expects.

type Request

type Request struct {
	ReadTs   uint64 // ReadTs for the transaction.
	Cache    int    // 0 represents use txn cache, 1 represents not to use cache.
	Latency  *Latency
	DqlQuery *dql.Result

	Subgraphs []*SubGraph

	Vars map[string]varValue
}

Request wraps the state that is used when executing query. Initially ReadTs, Cache and DQLQuery are set. Subgraphs, Vars and Latency are filled when processing query.

func (*Request) Process

func (req *Request) Process(ctx context.Context) (er ExecutionResult, err error)

Process handles a query request.

func (*Request) ProcessQuery

func (req *Request) ProcessQuery(ctx context.Context) (err error)

ProcessQuery processes query part of the request (without mutations). Fills Subgraphs and Vars. It can process multiple query blocks that are part of the query..

type SubGraph

type SubGraph struct {
	ReadTs      uint64
	Cache       int
	Attr        string
	UnknownAttr bool
	// read only parameters which are populated before the execution of the query and are used to
	// execute this query.
	Params params

	ExpandPreds []*pb.ValueList
	GroupbyRes  []*groupResults // one result for each uid list.
	LangTags    []*pb.LangList

	// SrcUIDs is a list of unique source UIDs. They are always copies of destUIDs
	// of parent nodes in GraphQL structure.
	SrcUIDs *pb.List
	// SrcFunc specified using func. Should only be non-nil at root. At other levels,
	// filters are used.
	SrcFunc *Function

	FilterOp string
	Filters  []*SubGraph // List of filters specified at the current node.

	MathExp  *mathTree
	Children []*SubGraph // children of the current node, should be empty for leaf nodes.

	// destUIDs is a list of destination UIDs, after applying filters, pagination.
	DestUIDs *pb.List
	List     bool // whether predicate is of list type
	// contains filtered or unexported fields
}

SubGraph is the way to represent data. It contains both the request parameters and the response. Once generated, this can then be encoded to other client convenient formats, like GraphQL / JSON. SubGraphs are recursively nested. Each SubGraph contain the following:

  • SrcUIDS: A list of UIDs that were sent to this query. If this subgraph is a child graph, then the DestUIDs of the parent must match the SrcUIDs of the children.
  • DestUIDs: A list of UIDs for which there can be output found in the Children field
  • Children: A list of child results for this query
  • valueMatrix: A list of values, against a single attribute, such as name (for a scalar subgraph). This must be the same length as the SrcUIDs
  • uidMatrix: A list of outgoing edges. This must be same length as the SrcUIDs list.

Example, say we are creating a SubGraph for a query "users", which returns one user with name 'Foo', you may get SubGraph

Params: { Alias: "users" }
SrcUIDs: [1]
DestUIDs: [1]
uidMatrix: [[1]]
Children:
  SubGraph:
    Attr: "name"
    SrcUIDs: [1]
    uidMatrix: [[]]
    valueMatrix: [["Foo"]]

func ToSubGraph

func ToSubGraph(ctx context.Context, gq *dql.GraphQuery) (*SubGraph, error)

ToSubGraph converts the GraphQuery into the pb.SubGraph instance type.

func (*SubGraph) DebugPrint

func (sg *SubGraph) DebugPrint(prefix string)

DebugPrint prints out the SubGraph tree in a nice format for debugging purposes.

func (*SubGraph) IsGroupBy

func (sg *SubGraph) IsGroupBy() bool

IsGroupBy returns whether this subgraph is part of a groupBy query.

func (*SubGraph) IsInternal

func (sg *SubGraph) IsInternal() bool

IsInternal returns whether this subgraph is marked as internal.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL