Documentation
¶
Overview ¶
Package bydbql provides BanyanDB Query Language (BydbQL) parsing and translation capabilities.
Index ¶
- type Grammar
- type GrammarAggregateFunction
- type GrammarAndExpr
- type GrammarAndRight
- type GrammarBinaryPredicate
- type GrammarBinaryPredicateTail
- type GrammarColumn
- type GrammarCompareTail
- type GrammarFromClause
- type GrammarGroupByClause
- type GrammarGroupByColumn
- type GrammarHavingPredicate
- type GrammarHavingValues
- type GrammarIdentifierPart
- type GrammarIdentifierPath
- type GrammarInClause
- type GrammarInPredicate
- type GrammarLimitClause
- type GrammarMatchTail
- type GrammarMatchValues
- type GrammarOffsetClause
- type GrammarOrExpr
- type GrammarOrRight
- type GrammarOrderByTail
- type GrammarOrderByWithIdent
- type GrammarPredicate
- type GrammarProjection
- type GrammarSelectOrderByClause
- type GrammarSelectStatement
- type GrammarSelectWhereClause
- type GrammarStageClause
- type GrammarTimeBetween
- type GrammarTimeClause
- type GrammarTimeValue
- type GrammarTopNAggregateByClause
- type GrammarTopNAggregateFunction
- type GrammarTopNOrderByClause
- type GrammarTopNProjection
- type GrammarTopNStatement
- type GrammarTopNWhereClause
- type GrammarValue
- type GrammarWithTraceClause
- type QueryType
- type TransformResult
- type Transformer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Grammar ¶
type Grammar struct {
Select *GrammarSelectStatement `parser:" @@"`
TopN *GrammarTopNStatement `parser:"| @@"`
}
Grammar represents the root of a BydbQL statement parsed by Participle.
func ParseQuery ¶
ParseQuery parses a BydbQL query string into a Grammar struct.
type GrammarAggregateFunction ¶
type GrammarAggregateFunction struct {
Function string `parser:"@('SUM'|'MEAN'|'AVG'|'COUNT'|'MAX'|'MIN')"`
Column *GrammarIdentifierPath `parser:"'(' @@ ')'"`
}
GrammarAggregateFunction represents aggregate functions.
type GrammarAndExpr ¶
type GrammarAndExpr struct {
Left *GrammarPredicate `parser:"@@"`
Right []*GrammarAndRight `parser:"@@*"`
}
GrammarAndExpr represents AND expression.
type GrammarAndRight ¶
type GrammarAndRight struct {
And string `parser:"@'AND'"`
Right *GrammarPredicate `parser:"@@"`
}
GrammarAndRight represents right side of AND.
type GrammarBinaryPredicate ¶
type GrammarBinaryPredicate struct {
Identifier *GrammarIdentifierPath `parser:"@@"`
Tail *GrammarBinaryPredicateTail `parser:"@@"`
}
GrammarBinaryPredicate captures comparison or MATCH predicates sharing an identifier left-hand side.
type GrammarBinaryPredicateTail ¶
type GrammarBinaryPredicateTail struct {
Match *GrammarMatchTail `parser:" @@"`
Compare *GrammarCompareTail `parser:"| @@"`
}
GrammarBinaryPredicateTail distinguishes between a MATCH suffix and a standard comparison operator.
type GrammarColumn ¶
type GrammarColumn struct {
Aggregate *GrammarAggregateFunction `parser:" @@"`
Identifier *GrammarIdentifierPath `parser:"| @@"`
TypeSpec *string `parser:"( '::' @('TAG'|'FIELD') )?"`
}
GrammarColumn represents a column in projection.
type GrammarCompareTail ¶
type GrammarCompareTail struct {
Operator string `parser:"@( '=' | '!=' | '>=' | '<=' | '>' | '<' )"`
Value *GrammarValue `parser:"@@"`
}
GrammarCompareTail represents traditional binary comparison operators.
type GrammarFromClause ¶
type GrammarFromClause struct {
From string `parser:"@'FROM'"`
ResourceType string `parser:"@('STREAM'|'MEASURE'|'TRACE'|'PROPERTY')"`
ResourceName string `parser:"@Ident"`
In *GrammarInClause `parser:"@@"`
Stage *GrammarStageClause `parser:"@@?"`
}
GrammarFromClause represents FROM clause.
type GrammarGroupByClause ¶
type GrammarGroupByClause struct {
Group string `parser:"@'GROUP'"`
By string `parser:"@'BY'"`
Columns []*GrammarGroupByColumn `parser:"@@ ( ',' @@ )*"`
}
GrammarGroupByClause represents GROUP BY clause.
type GrammarGroupByColumn ¶
type GrammarGroupByColumn struct {
Identifier *GrammarIdentifierPath `parser:"@@"`
TypeSpec *string `parser:"( '::' @('TAG'|'FIELD') )?"`
}
GrammarGroupByColumn represents a column in GROUP BY.
type GrammarHavingPredicate ¶
type GrammarHavingPredicate struct {
Identifier *GrammarIdentifierPath `parser:"@@"`
Not *string `parser:"@'NOT'?"`
Having string `parser:"@'HAVING'"`
Values *GrammarHavingValues `parser:"@@"`
}
GrammarHavingPredicate represents HAVING/NOT HAVING predicate.
type GrammarHavingValues ¶
type GrammarHavingValues struct {
Single *GrammarValue `parser:" @@"`
Array []*GrammarValue `parser:"| '(' @@ ( ',' @@ )* ')'"`
}
GrammarHavingValues represents values in HAVING.
type GrammarIdentifierPart ¶
type GrammarIdentifierPart struct {
Ident *string `parser:" @Ident"`
Keyword *string `parser:"| @Keyword"`
}
GrammarIdentifierPart Can be either an Ident or a Keyword (keywords are allowed in paths, but not as standalone identifiers).
func (*GrammarIdentifierPart) Value ¶
func (p *GrammarIdentifierPart) Value() string
Value returns the string value of the identifier part.
type GrammarIdentifierPath ¶
type GrammarIdentifierPath struct {
QuotedIdent *string `parser:" ( @QuotedIdent | @String )"`
First *GrammarIdentifierPart `parser:"| @@"`
Rest []*GrammarIdentifierPart `parser:" ( '.' @@ )*"`
}
GrammarIdentifierPath Examples: column_name, _column, response.time, metadata.service.id, "count", 'trace.span.id'.
type GrammarInClause ¶
type GrammarInClause struct {
In string `parser:"@'IN'"`
LParen bool `parser:"@'('?"`
Groups []string `parser:"@Ident ( ',' @Ident )*"`
RParen bool `parser:"@')'?"`
}
GrammarInClause represents IN clause.
type GrammarInPredicate ¶
type GrammarInPredicate struct {
Identifier *GrammarIdentifierPath `parser:"@@"`
Not *string `parser:"@'NOT'?"`
In string `parser:"@'IN'"`
Values []*GrammarValue `parser:"'(' @@? ( ',' @@ )* ')'"`
}
GrammarInPredicate represents IN/NOT IN predicate.
type GrammarLimitClause ¶
GrammarLimitClause represents LIMIT clause.
type GrammarMatchTail ¶
type GrammarMatchTail struct {
MatchToken string `parser:"@'MATCH'"`
LParen string `parser:"@'('"`
Values *GrammarMatchValues `parser:"@@"`
Analyzer *string `parser:"( ',' @String"`
Operator *string `parser:" ( ',' @String )? )?"`
RParen string `parser:"@')'"`
}
GrammarMatchTail represents the RHS of a MATCH predicate.
type GrammarMatchValues ¶
type GrammarMatchValues struct {
Single *GrammarValue `parser:" @@"`
Array []*GrammarValue `parser:"| '(' @@ ( ',' @@ )* ')'"`
}
GrammarMatchValues represents values in MATCH.
type GrammarOffsetClause ¶
GrammarOffsetClause represents OFFSET clause.
type GrammarOrExpr ¶
type GrammarOrExpr struct {
Left *GrammarAndExpr `parser:"@@"`
Right []*GrammarOrRight `parser:"@@*"`
}
GrammarOrExpr represents OR expression.
type GrammarOrRight ¶
type GrammarOrRight struct {
Or string `parser:"@'OR'"`
Right *GrammarAndExpr `parser:"@@"`
}
GrammarOrRight represents right side of OR.
type GrammarOrderByTail ¶
type GrammarOrderByTail struct {
DirOnly *string `parser:" @('ASC'|'DESC')"`
WithIdent *GrammarOrderByWithIdent `parser:"| @@ "`
}
GrammarOrderByTail represents the tail of ORDER BY clause, Identifier with optional direction or direction only.
type GrammarOrderByWithIdent ¶
type GrammarOrderByWithIdent struct {
Identifier *GrammarIdentifierPath `parser:"@@"`
Direction *string `parser:"@( 'ASC' | 'DESC' )?"`
}
GrammarOrderByWithIdent represents ORDER BY with identifier and optional direction.
type GrammarPredicate ¶
type GrammarPredicate struct {
Paren *GrammarOrExpr `parser:" '(' @@ ')'"`
Binary *GrammarBinaryPredicate `parser:"| @@"`
In *GrammarInPredicate `parser:"| @@"`
Having *GrammarHavingPredicate `parser:"| @@"`
}
GrammarPredicate represents a predicate.
type GrammarProjection ¶
type GrammarProjection struct {
All bool `parser:" @'*'"`
Empty bool `parser:"| @'(' ')'"`
TopN *GrammarTopNProjection `parser:"| 'TOP' @@"`
Columns []*GrammarColumn `parser:"| @@ ( ',' @@ )*"`
}
GrammarProjection represents projection in SELECT.
type GrammarSelectOrderByClause ¶
type GrammarSelectOrderByClause struct {
Order string `parser:"@'ORDER'"`
By string `parser:"@'BY'"`
Tail GrammarOrderByTail `parser:"@@"`
}
GrammarSelectOrderByClause represents ORDER BY clause in SELECT statement.
type GrammarSelectStatement ¶
type GrammarSelectStatement struct {
Pos lexer.Position
Select string `parser:"@'SELECT'"`
Projection *GrammarProjection `parser:"@@"`
From *GrammarFromClause `parser:"@@"`
Time *GrammarTimeClause `parser:"@@?"`
Where *GrammarSelectWhereClause `parser:"@@?"`
GroupBy *GrammarGroupByClause `parser:"@@?"`
OrderBy *GrammarSelectOrderByClause `parser:"@@?"`
WithQueryTrace *GrammarWithTraceClause `parser:"@@?"`
Limit *GrammarLimitClause `parser:"@@?"`
Offset *GrammarOffsetClause `parser:"@@?"`
}
GrammarSelectStatement represents a SELECT statement in Participle grammar.
type GrammarSelectWhereClause ¶
type GrammarSelectWhereClause struct {
Where string `parser:"@'WHERE'"`
Expr *GrammarOrExpr `parser:"@@"`
}
GrammarSelectWhereClause represents WHERE clause.
type GrammarStageClause ¶
type GrammarStageClause struct {
On string `parser:"@'ON'"`
LParen bool `parser:"@'('?"`
Stages []string `parser:"@Ident ( ',' @Ident )*"`
RParen bool `parser:"@')'?"`
Stages2 string `parser:"@'STAGES'"`
}
GrammarStageClause represents STAGES clause.
type GrammarTimeBetween ¶
type GrammarTimeBetween struct {
Between string `parser:"@'BETWEEN'"`
Begin *GrammarTimeValue `parser:"@@"`
And string `parser:"@'AND'"`
End *GrammarTimeValue `parser:"@@"`
}
GrammarTimeBetween represents TIME BETWEEN.
type GrammarTimeClause ¶
type GrammarTimeClause struct {
Time string `parser:"@'TIME'"`
Comparator *string `parser:"( @( '=' | '>' | '<' | '>=' | '<=' )"`
Value *GrammarTimeValue `parser:" @@"`
Between *GrammarTimeBetween `parser:"| @@ )"`
}
GrammarTimeClause represents TIME clause.
type GrammarTimeValue ¶
type GrammarTimeValue struct {
String *string `parser:" @String"`
Integer *int64 `parser:"| @Int"`
}
GrammarTimeValue represents a time value (string or integer).
func (*GrammarTimeValue) ToString ¶
func (g *GrammarTimeValue) ToString() string
ToString converts time value to string representation.
type GrammarTopNAggregateByClause ¶
type GrammarTopNAggregateByClause struct {
Aggregate string `parser:"@'AGGREGATE'"`
By string `parser:"@'BY'"`
Function *GrammarTopNAggregateFunction `parser:"@@"`
}
GrammarTopNAggregateByClause represents AGGREGATE BY clause.
type GrammarTopNAggregateFunction ¶
type GrammarTopNAggregateFunction struct {
Function string `parser:"@('SUM'|'MEAN'|'AVG'|'COUNT'|'MAX'|'MIN')"`
}
GrammarTopNAggregateFunction represents aggregate functions without column (for TOP N).
type GrammarTopNOrderByClause ¶
type GrammarTopNOrderByClause struct {
Order string `parser:"@'ORDER'"`
By string `parser:"@'BY'"`
Dir *string `parser:"@('ASC'|'DESC')?"`
}
GrammarTopNOrderByClause represents ORDER BY clause in TOP N statement.
type GrammarTopNProjection ¶
type GrammarTopNProjection struct {
N int `parser:"@Int"`
OrderField *GrammarIdentifierPath `parser:"@@"`
Direction *string `parser:"@('ASC'|'DESC')?"`
OtherColumns []*GrammarColumn `parser:" ( ',' @@ ( ',' @@ )* )?"`
}
GrammarTopNProjection represents TOP N projection.
type GrammarTopNStatement ¶
type GrammarTopNStatement struct {
Pos lexer.Position
Show string `parser:"@'SHOW'"`
Top string `parser:"@'TOP'"`
N int `parser:"@Int"`
From *GrammarFromClause `parser:"@@"`
Time *GrammarTimeClause `parser:"@@?"`
Where *GrammarTopNWhereClause `parser:"@@?"`
AggregateBy *GrammarTopNAggregateByClause `parser:"@@?"`
OrderBy *GrammarTopNOrderByClause `parser:"@@?"`
WithQueryTrace *GrammarWithTraceClause `parser:"@@?"`
}
GrammarTopNStatement represents a SHOW TOP N statement.
type GrammarTopNWhereClause ¶
type GrammarTopNWhereClause struct {
Where string `parser:"@'WHERE'"`
Expr *GrammarAndExpr `parser:"@@"`
}
GrammarTopNWhereClause represents WHERE clause in TOP N.
type GrammarValue ¶
type GrammarValue struct {
String *string `parser:" @String"`
Integer *int64 `parser:"| @Int"`
Null bool `parser:"| @'NULL'"`
}
GrammarValue represents a value.
type GrammarWithTraceClause ¶
type GrammarWithTraceClause struct {
With string `parser:"@'WITH'"`
QueryTrace string `parser:"@'QUERY_TRACE'"`
}
GrammarWithTraceClause represents WITH QUERY_TRACE clause.
type QueryType ¶
type QueryType int
QueryType represents the type of query.
type TransformResult ¶
TransformResult is the result of transforming a Grammar into a query request.
type Transformer ¶
type Transformer struct {
// contains filtered or unexported fields
}
Transformer transforms a Grammar into a native query request.
func NewTransformer ¶
func NewTransformer(registry metadata.Repo) *Transformer
NewTransformer creates a new Transformer with the given schema registry.
func (*Transformer) Transform ¶
func (t *Transformer) Transform(ctx context.Context, grammar *Grammar) (*TransformResult, error)
Transform transforms a Grammar into a native query request.