parser

package
v1.202405300917.1 Latest Latest
Warning

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

Go to latest
Published: May 30, 2024 License: MIT Imports: 12 Imported by: 0

README

General-Purpose Data Types

Data Type (sql-2016) Aliases Description
character varying [(n)] varchar [(n)], text [(n)] variable-length character string of n bytes: 1..65535, def. 255
binary varying [(n)] varbinary [(n)], bytes [(n)] variable-length binary data of n bytes: is 1..65535, def. 255
bigint int64 signed eight-byte integer
integer int, int32 signed four-byte integer
real float, float32 single precision floating-point number (4 bytes)
double precision float64 double precision floating-point number (8 bytes)
timestamp date and time (no time zone)
boolean bool logical Boolean (true/false)
binary large object blob binary data

Voedger-Specific Data Types

Data Type (voedger) Aliases Description
currency money currency amount, accurate to a ten-thousandth of the units
qualified name qname package and entity
record record inherited from crecord/orecord/wrecord

References

Documentation

Overview

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

* Copyright (c) 2023-present unTill Pro, Ltd. * @author Michael Saigachenko

Index

Constants

View Source
const ExportedAppsFile = "apps.yaml"
View Source
const ExportedPkgFolder = "pkg"
View Source
const SqlExt = ".sql"
View Source
const VSqlExt = ".vsql"

Variables

View Source
var ErrAbstractWorkspaceDescriptor = errors.New("abstract workspace cannot have a descriptor")
View Source
var ErrApplicationNotDefined = errors.New("application not defined")
View Source
var ErrApplicationRedefined = errors.New("redefinition of application")
View Source
var ErrBaseTableMustBeAbstract = errors.New("base table must be abstract")
View Source
var ErrBaseWorkspaceMustBeAbstract = errors.New("base workspace must be abstract")
View Source
var ErrCircularReferenceInInherits = errors.New("circular reference in INHERITS")
View Source
var ErrDirContainsNoSchemaFiles = errors.New("no schema files in directory")
View Source
var ErrEmptyFileAstList = errors.New("no valid schema files")
View Source
var ErrFunctionParamsIncorrect = errors.New("function parameters do not match")
View Source
var ErrFunctionResultIncorrect = errors.New("function result do not match")
View Source
var ErrInheritanceFromSysWorkspaceNotAllowed = errors.New("explicit inheritance from sys.Workspace not allowed")
View Source
var ErrMaxFieldLengthTooLarge = fmt.Errorf("maximum field length is %d", appdef.MaxFieldLength)
View Source
var ErrMustBeNotNull = errors.New("field has to be NOT NULL")
View Source
var ErrNestedTableIncorrectKind = errors.New("incorrect nested table kind")
View Source
var ErrNestedTablesNotSupportedInTypes = errors.New("nested tables not supported in types")
View Source
var ErrNoQualifiedName = errors.New("empty qualified name")
View Source
var ErrOnlyInsertForOdocOrORecord = errors.New("only INSERT allowed for ODoc or ORecord")
View Source
var ErrPackageWithSameNameAlreadyIncludedInApp = errors.New("package with the same name already included in application")
View Source
var ErrPkgFolderNotFound = errors.New("pkg folder not found")
View Source
var ErrPrimaryKeyNotDefined = errors.New("primary key not defined")
View Source
var ErrPrimaryKeyRedefined = errors.New("redefinition of primary key")
View Source
var ErrRegexpCheckOnlyForVarcharField = errors.New("regexp CHECK only available for varchar field")
View Source
var ErrScheduledProjectorNotInAppWorkspace = errors.New("scheduled projector must be in app workspace")
View Source
var ErrScheduledProjectorWithIntents = errors.New("scheduled projector cannot have intents")
View Source
var ErrStorageDeclaredOnlyInSys = errors.New("storages are only declared in sys package")
View Source
var ErrSysWorkspaceNotFound = errors.New("sys.Workspace type not found")
View Source
var ErrUndefinedTableKind = errors.New("undefined table kind")

Functions

func BuildAppDefs

func BuildAppDefs(appSchema *AppSchemaAST, builder appdef.IAppDefBuilder, opts ...BuildAppDefsOption) error

func CompareParam

func CompareParam(left, right FunctionParam) bool

func CompareParams

func CompareParams(params []FunctionParam, f *FunctionStmt) error

func ErrAbstractTableNotAlowedInProjectors

func ErrAbstractTableNotAlowedInProjectors(tblName string) error

func ErrAppDoesNotDefineUseOfPackage

func ErrAppDoesNotDefineUseOfPackage(name string) error

func ErrBytesFieldInCC

func ErrBytesFieldInCC(name string) error

func ErrCheckRegexpErr

func ErrCheckRegexpErr(e error) error

func ErrCouldNotImport

func ErrCouldNotImport(pkgName string) error

Golang: could not import github.com/alecthomas/participle/v2/asd (no required module provides package "github.com/alecthomas/participle/v2/asd")

func ErrFieldAlreadyInUnique

func ErrFieldAlreadyInUnique(name string) error

func ErrInvalidCronSchedule

func ErrInvalidCronSchedule(schedule string) error

func ErrLocalPackageNameRedeclared

func ErrLocalPackageNameRedeclared(localPkgName, newLocalPkgName string) error

func ErrNestedAbstractTable

func ErrNestedAbstractTable(tblName string) error

func ErrPackageRedeclared

func ErrPackageRedeclared(name string) error

func ErrProjectorDoesNotDeclareViewIntent

func ErrProjectorDoesNotDeclareViewIntent(projectorName, viewName string) error

func ErrRedefined

func ErrRedefined(name string) error

func ErrReferenceToAbstractTable

func ErrReferenceToAbstractTable(tblName string) error

func ErrReferenceToTableNotInWorkspace

func ErrReferenceToTableNotInWorkspace(tblName string) error

func ErrStorageNotInIntents

func ErrStorageNotInIntents(name string) error

func ErrStorageNotInState

func ErrStorageNotInState(name string) error

func ErrStorageRequiresEntity

func ErrStorageRequiresEntity(name string) error

func ErrTypeNotSupported

func ErrTypeNotSupported(name string) error

func ErrUndefined

func ErrUndefined(name string) error

func ErrUndefinedCommand

func ErrUndefinedCommand(name DefQName) error

func ErrUndefinedDataTypeOrTable

func ErrUndefinedDataTypeOrTable(name DefQName) error

func ErrUndefinedField

func ErrUndefinedField(name string) error

func ErrUndefinedQuery

func ErrUndefinedQuery(name DefQName) error

func ErrUndefinedRate

func ErrUndefinedRate(name DefQName) error

func ErrUndefinedRole

func ErrUndefinedRole(name DefQName) error

func ErrUndefinedTable

func ErrUndefinedTable(name DefQName) error

func ErrUndefinedTag

func ErrUndefinedTag(name DefQName) error

func ErrUndefinedType

func ErrUndefinedType(name DefQName) error

func ErrUndefinedTypeOrOdoc

func ErrUndefinedTypeOrOdoc(name DefQName) error

func ErrUndefinedTypeOrTable

func ErrUndefinedTypeOrTable(name DefQName) error

func ErrUndefinedWorkspace

func ErrUndefinedWorkspace(name DefQName) error

func ErrUnexpectedRootTableKind

func ErrUnexpectedRootTableKind(kind int) error

func ErrUseOfAbstractTable

func ErrUseOfAbstractTable(tblName string) error

func ErrUseOfAbstractWorkspace

func ErrUseOfAbstractWorkspace(wsName string) error

func ErrVarcharFieldInCC

func ErrVarcharFieldInCC(name string) error

func ErrViewFieldBytes

func ErrViewFieldBytes(name string) error

func ErrViewFieldVarchar

func ErrViewFieldVarchar(name string) error

func ErrWorkspaceIsNotAlterable

func ErrWorkspaceIsNotAlterable(wsName string) error

func GetQualifiedPackageName

func GetQualifiedPackageName(pkgName Ident, schema *SchemaAST) string

Types

type AlterWorkspaceStmt

type AlterWorkspaceStmt struct {
	Statement
	Name       DefQName             `parser:"'ALTER' 'WORKSPACE' @@ "`
	A          int                  `parser:"'('"`
	Statements []WorkspaceStatement `parser:"@@? (';' @@)* ';'? ')'"`
	// contains filtered or unexported fields
}

func (*AlterWorkspaceStmt) Iterate

func (s *AlterWorkspaceStmt) Iterate(callback func(stmt interface{}))

type AnyOrVoidOrDef

type AnyOrVoidOrDef struct {
	Any  bool      `parser:"@'any'"`
	Void bool      `parser:"| @'void'"`
	Def  *DefQName `parser:"| @@"`
}

type AppSchemaAST

type AppSchemaAST struct {
	// Application name
	Name string

	// key = Fully Qualified Name
	Packages map[string]*PackageSchemaAST

	LocalNameToFullPath map[string]string
}

func BuildAppSchema

func BuildAppSchema(packages []*PackageSchemaAST) (*AppSchemaAST, error)

Application-level semantic analysis (e.g. cross-package references)

type ApplicationStmt

type ApplicationStmt struct {
	Statement
	Name Ident     `parser:"'APPLICATION' @Ident '('"`
	Uses []UseStmt `parser:"@@? (';' @@)* ';'? ')'"`
}

func FindApplication

func FindApplication(p *PackageSchemaAST) (result *ApplicationStmt, err error)

type Array

type Array struct {
	Expressions []*Expression `parser:"'(' @@ ( ',' @@ )* ')'"`
}

type Between

type Between struct {
	Start *Operand `parser:"@@"`
	End   *Operand `parser:"'AND' @@"`
}

type Boolean

type Boolean bool

func (*Boolean) Capture

func (b *Boolean) Capture(values []string) error

type BuildAppDefsOption

type BuildAppDefsOption = func(*buildContext)

BuildAppDefsOption is a function that can be passed to BuildAppDefs to configure it.

func WithVariableResolver

func WithVariableResolver(resolver IVariableResolver) BuildAppDefsOption

type CheckRegExp

type CheckRegExp struct {
	Pos    lexer.Position
	Regexp string `parser:"@String"`
}

type CommandStmt

type CommandStmt struct {
	Statement
	Name          Ident           `parser:"'COMMAND' @Ident"`
	Param         *AnyOrVoidOrDef `parser:"('(' @@? "`
	UnloggedParam *AnyOrVoidOrDef `parser:"(','? UNLOGGED @@)? ')')?"`
	State         []StateStorage  `parser:"('STATE'   '(' @@ (',' @@)* ')' )?"`
	Intents       []StateStorage  `parser:"('INTENTS' '(' @@ (',' @@)* ')' )?"`
	Returns       *AnyOrVoidOrDef `parser:"('RETURNS' @@)?"`
	With          []WithItem      `parser:"('WITH' @@ (',' @@)* )?"`
	Engine        EngineType      // Initialized with 1st pass
}

func (*CommandStmt) GetName

func (s *CommandStmt) GetName() string

func (*CommandStmt) SetEngineType

func (s *CommandStmt) SetEngineType(e EngineType)

type Compare

type Compare struct {
	Operator string   `parser:"@( '<>' | '<=' | '>=' | '=' | '<' | '>' | '!=' )"`
	Operand  *Operand `parser:"@@"`
}

type Condition

type Condition struct {
	Operand *ConditionOperand `parser:"  @@"`
	Not     *Condition        `parser:"| 'NOT' @@"`
}

type ConditionOperand

type ConditionOperand struct {
	Operand      *Operand      `parser:"@@"`
	ConditionRHS *ConditionRHS `parser:"@@?"`
}

type ConditionRHS

type ConditionRHS struct {
	Compare *Compare `parser:"  @@"`
	Is      *Is      `parser:"| 'IS' @@"`
	Between *Between `parser:"| 'BETWEEN' @@"`
	In      *In      `parser:"| 'IN' '(' @@ ')'"`
}

type DataType

type DataType struct {
	Varchar   *TypeVarchar `parser:"( @@"`
	Bytes     *TypeBytes   `parser:"| @@"`
	Int32     bool         `parser:"| @('integer' | 'int' | 'int32')"`
	Int64     bool         `parser:"| @('bigint' | 'int64')"`
	Float32   bool         `parser:"| @('real' | 'float' | 'float32')"`
	Float64   bool         `parser:"| @(('double' 'precision') | 'float64')"`
	Timestamp bool         `parser:"| @'timestamp'"`
	Currency  bool         `parser:"| @('money' | 'currency')"`
	Bool      bool         `parser:"| @('boolean' | 'bool')"`
	Blob      bool         `parser:"| @(('binary' 'large' 'object') | 'blob')"`
	QName     bool         `parser:"| @(('qualified' 'name') | 'qname')"`
	Record    bool         `parser:"| @'record' )"`
}

func (DataType) String

func (q DataType) String() (s string)

type DataTypeOrDef

type DataTypeOrDef struct {
	DataType *DataType `parser:"( @@"`
	Def      *DefQName `parser:"| @@ )"`
	// contains filtered or unexported fields
}

func (DataTypeOrDef) String

func (q DataTypeOrDef) String() (s string)

type DeclareStmt

type DeclareStmt struct {
	Statement
	Name         Ident  `parser:"'DECLARE' @Ident"`
	DataType     string `parser:"@('int' | 'int32')"`
	DefaultValue *int   `parser:"'DEFAULT' @Int"`
}

func (DeclareStmt) GetName

func (s DeclareStmt) GetName() string

type DefQName

type DefQName struct {
	Pos     lexer.Position
	Package Ident `parser:"(@Ident '.')?"`
	Name    Ident `parser:"@Ident"`
}

func (DefQName) String

func (q DefQName) String() string

type EngineType

type EngineType struct {
	WASM    bool `parser:"@'WASM'"`
	Builtin bool `parser:"| @'BUILTIN'"`
}

type Expression

type Expression struct {
	Or []*OrCondition `parser:"@@ ( 'OR' @@ )*"`
}

type Factor

type Factor struct {
	LHS *Term  `parser:"@@"`
	Op  string `parser:"( @('*' | '/' | '%')"`
	RHS *Term  `parser:"  @@ )?"`
}

type FieldExpr

type FieldExpr struct {
	Statement
	Name               Ident         `parser:"@Ident"`
	Type               DataTypeOrDef `parser:"@@"`
	NotNull            bool          `parser:"@(NOTNULL)?"`
	Verifiable         bool          `parser:"@('VERIFIABLE')?"`
	DefaultIntValue    *int          `parser:"('DEFAULT' @Int)?"`
	DefaultStringValue *string       `parser:"('DEFAULT' @String)?"`
	//	DefaultNextVal     *string       `parser:"(DEFAULTNEXTVAL  '(' @String ')')?"`
	CheckRegexp     *CheckRegExp `parser:"('CHECK' @@ )?"`
	CheckExpression *Expression  `parser:"('CHECK' '(' @@ ')')? "`
}

type FieldSetItem

type FieldSetItem struct {
	Pos  lexer.Position
	Type DefQName `parser:"@@"`
}

type FileSchemaAST

type FileSchemaAST struct {
	FileName string
	Ast      *SchemaAST
}

func ParseFile

func ParseFile(fileName, content string) (*FileSchemaAST, error)

ParseFile parses content of the single file, creates FileSchemaAST and returns pointer to it. Performs syntax analysis

type FunctionParam

type FunctionParam struct {
	NamedParam       *NamedParam    `parser:"@@"`
	UnnamedParamType *DataTypeOrDef `parser:"| @@"`
}

type FunctionStmt

type FunctionStmt struct {
	Statement
	Name    Ident           `parser:"'FUNCTION' @Ident"`
	Params  []FunctionParam `parser:"'(' @@? (',' @@)* ')'"`
	Returns DataTypeOrDef   `parser:"'RETURNS' @@"`
	Engine  EngineType      // Initialized with 1st pass
}

func (*FunctionStmt) GetName

func (s *FunctionStmt) GetName() string

func (*FunctionStmt) SetEngineType

func (s *FunctionStmt) SetEngineType(e EngineType)

type GrantAllTablesWithTagAction

type GrantAllTablesWithTagAction struct {
	Pos    lexer.Position
	Select bool `parser:"@'SELECT'"`
	Insert bool `parser:"| @'INSERT'"`
	Update bool `parser:"| @'UPDATE'"`
}

type GrantAllTablesWithTagActions

type GrantAllTablesWithTagActions struct {
	Pos      lexer.Position
	GrantAll bool                          `parser:"@'ALL' | "`
	Items    []GrantAllTablesWithTagAction `parser:"(@@ (',' @@)*)"`
}

type GrantStmt

type GrantStmt struct {
	Statement
	Command              bool                          `parser:"'GRANT' ( @INSERTONCOMMAND"`
	AllCommandsWithTag   bool                          `parser:"| @INSERTONALLCOMMANDSWITHTAG"`
	Query                bool                          `parser:"| @SELECTONQUERY"`
	AllQueriesWithTag    bool                          `parser:"| @SELECTONALLQUERIESWITHTAG"`
	Workspace            bool                          `parser:"| @INSERTONWORKSPACE"`
	AllWorkspacesWithTag bool                          `parser:"| @INSERTONALLWORKSPACESWITHTAG"`
	AllTablesWithTag     *GrantAllTablesWithTagActions `parser:"| (@@ ONALLTABLESWITHTAG)"`
	Table                *GrantTableActions            `parser:"| (@@ ONTABLE) )"`

	On DefQName `parser:"@@"`
	To DefQName `parser:"'TO' @@"`
}

type GrantTableAction

type GrantTableAction struct {
	Pos     lexer.Position
	Select  bool         `parser:"(@'SELECT'"`
	Insert  bool         `parser:"| @'INSERT'"`
	Update  bool         `parser:"| @'UPDATE')"`
	Columns []Identifier `parser:"( '(' @@ (',' @@)* ')' )?"`
}

type GrantTableActions

type GrantTableActions struct {
	Pos      lexer.Position
	GrantAll *GrantTableAll     `parser:"(@@ | "`
	Items    []GrantTableAction `parser:"(@@ (',' @@)*))"`
}

type GrantTableAll

type GrantTableAll struct {
	Pos      lexer.Position
	GrantAll bool         `parser:"@'ALL'"`
	Columns  []Identifier `parser:"( '(' @@ (',' @@)* ')' )?"`
}

type IExtensionStatement

type IExtensionStatement interface {
	SetEngineType(EngineType)
}

type INamedStatement

type INamedStatement interface {
	IStatement
	GetName() string
}

type IStatement

type IStatement interface {
	GetPos() *lexer.Position
	GetRawCommentBlocks() []string
	SetComments(comments []string)
	GetComments() []string
}

type IStatementCollection

type IStatementCollection interface {
	Iterate(callback func(stmt interface{}))
}

type IVariableResolver

type IVariableResolver interface {
	AsInt32(name appdef.QName) (int32, bool)
}

type Ident

type Ident string

func (*Ident) Capture

func (b *Ident) Capture(values []string) error

type Identifier

type Identifier struct {
	Pos   lexer.Position
	Value Ident `parser:"@Ident"`
}

type ImportStmt

type ImportStmt struct {
	Pos   lexer.Position
	Name  string `parser:"'IMPORT' 'SCHEMA' @String"`
	Alias *Ident `parser:"('AS' @Ident)?"`
}

type In

type In struct {
	Expressions []*Expression `parser:"@@ ( ',' @@ )*"`
}

type Is

type Is struct {
	Not  bool `parser:"[ @'NOT' ]"`
	Null bool `parser:"@'NULL'"`
}

type Like

type Like struct {
	Not     bool     `parser:"[ @'NOT' ]"`
	Operand *Operand `parser:"@@"`
}

type LimitAction

type LimitAction struct {
	Pos        lexer.Position
	Table      *DefQName `parser:"(ONTABLE @@)"`
	Command    *DefQName `parser:"| ('ON' 'COMMAND' @@)"`
	Query      *DefQName `parser:"| ('ON' 'QUERY' @@)"`
	Tag        *DefQName `parser:"| ('ON' 'TAG' @@)"`
	Everything bool      `parser:"| @('ON' 'EVERYTHING')"`
}

type LimitStmt

type LimitStmt struct {
	Statement
	Name     Ident       `parser:"'LIMIT' @Ident"`
	Action   LimitAction `parser:"@@"`
	RateName DefQName    `parser:"'WITH' 'RATE' @@"`
}

func (LimitStmt) GetName

func (s LimitStmt) GetName() string

type NamedParam

type NamedParam struct {
	Name Ident         `parser:"@Ident"`
	Type DataTypeOrDef `parser:"@@"`
}

type NestedTableStmt

type NestedTableStmt struct {
	Pos   lexer.Position
	Name  Ident     `parser:"@Ident"`
	Table TableStmt `parser:"@@"`
}

type Operand

type Operand struct {
	LHS *Factor `parser:"@@"`
	Op  string  `parser:"[ @('+' | '-')"`
	RHS *Factor `parser:"  @@ ]"`
}

type OrCondition

type OrCondition struct {
	And []*Condition `parser:"@@ ( 'AND' @@ )*"`
}

type PackageFS

type PackageFS struct {
	Path string
	FS   coreutils.IReadFS
}

type PackageSchemaAST

type PackageSchemaAST struct {
	Name string // Fill on the analysis stage, when the APPLICATION statement is found
	Path string
	Ast  *SchemaAST
}

func BuildPackageSchema

func BuildPackageSchema(path string, asts []*FileSchemaAST) (*PackageSchemaAST, error)

BuildPackageSchema merges File Schema ASTs into Package Schema AST. Performs package-level semantic analysis

func ParsePackageDir

func ParsePackageDir(path string, fs coreutils.IReadFS, subDir string) (ast *PackageSchemaAST, err error)

ParsePackageDir is a helper which parses all SQL schemas from specified FS and returns Package Schema.

func ParsePackageDirCollectingFiles

func ParsePackageDirCollectingFiles(path string, fs coreutils.IReadFS, subDir string) (*PackageSchemaAST, []string, error)

ParsePackageDirCollectingFiles is a helper which parses all SQL schemas from specified FS Returns package schema and list of schema file names which were parsed

func (*PackageSchemaAST) NewQName

func (p *PackageSchemaAST) NewQName(name Ident) appdef.QName

type PrimaryKeyExpr

type PrimaryKeyExpr struct {
	Pos                     lexer.Position
	PartitionKeyFields      []Identifier `parser:"('(' @@ (',' @@)* ')')?"`
	ClusteringColumnsFields []Identifier `parser:"(','? @@ (',' @@)*)?"`
}

type ProjectionTableAction

type ProjectionTableAction struct {
	Insert     bool `parser:"@'INSERT'"`
	Update     bool `parser:"| @'UPDATE'"`
	Activate   bool `parser:"| @'ACTIVATE'"`
	Deactivate bool `parser:"| @'DEACTIVATE'"`
}

type ProjectorCommandAction

type ProjectorCommandAction struct {
	Execute   bool `parser:"@'EXECUTE'"`
	WithParam bool `parser:"@('WITH' 'PARAM')?"`
}

type ProjectorStmt

type ProjectorStmt struct {
	Statement
	Sync            bool               `parser:"@'SYNC'?"`
	Name            Ident              `parser:"'PROJECTOR' @Ident"`
	Triggers        []ProjectorTrigger `parser:"@@ ('OR' @@)*"`
	State           []StateStorage     `parser:"('STATE'   '(' @@ (',' @@)* ')' )?"`
	Intents         []StateStorage     `parser:"('INTENTS' '(' @@ (',' @@)* ')' )?"`
	IncludingErrors bool               `parser:"@('INCLUDING' 'ERRORS')?"`
	Engine          EngineType         // Initialized with 1st pass
}

func (*ProjectorStmt) GetName

func (s *ProjectorStmt) GetName() string

func (*ProjectorStmt) SetEngineType

func (s *ProjectorStmt) SetEngineType(e EngineType)

type ProjectorTrigger

type ProjectorTrigger struct {
	CronSchedule  *string                 `parser:"('CRON' @String) | ("`
	ExecuteAction *ProjectorCommandAction `parser:"'AFTER' (@@"`
	TableActions  []ProjectionTableAction `parser:"| (@@ ('OR' @@)* ))"`
	QNames        []DefQName              `parser:"'ON' (('(' @@ (',' @@)* ')') | @@)!)"`
	// contains filtered or unexported fields
}

type QueryStmt

type QueryStmt struct {
	Statement
	Name    Ident           `parser:"'QUERY' @Ident"`
	Param   *AnyOrVoidOrDef `parser:"('(' @@? ')')?"`
	State   []StateStorage  `parser:"('STATE'   '(' @@ (',' @@)* ')' )?"`
	Returns AnyOrVoidOrDef  `parser:"'RETURNS' @@"`
	With    []WithItem      `parser:"('WITH' @@ (',' @@)* )?"`
	Engine  EngineType      // Initialized with 1st pass
}

func (*QueryStmt) GetName

func (s *QueryStmt) GetName() string

func (*QueryStmt) SetEngineType

func (s *QueryStmt) SetEngineType(e EngineType)

type RateObjectScope

type RateObjectScope struct {
	PerAppPartition bool `parser:"  @('PER' 'APP' 'PARTITION')"`
	PerWorkspace    bool `parser:" | @('PER' 'WORKSPACE')"`
}

type RateStmt

type RateStmt struct {
	Statement
	Name         Ident             `parser:"'RATE' @Ident"`
	Value        RateValue         `parser:"@@"`
	ObjectScope  *RateObjectScope  `parser:"@@?"`
	SubjectScope *RateSubjectScope `parser:"@@?"`
}

func (RateStmt) GetName

func (s RateStmt) GetName() string

type RateSubjectScope

type RateSubjectScope struct {
	PerUser bool `parser:"@('PER' 'USER')"`
	PerIp   bool `parser:" | @('PER' 'IP')"`
}

type RateValue

type RateValue struct {
	Count           *int              `parser:"(@Int"`
	Variable        *DefQName         `parser:"| @@) 'PER'"`
	TimeUnitAmounts *int              `parser:"@Int?"`
	TimeUnit        RateValueTimeUnit `parser:"@@"`
	// contains filtered or unexported fields
}

type RateValueTimeUnit

type RateValueTimeUnit struct {
	Second bool `parser:"@('SECOND' | 'SECONDS')"`
	Minute bool `parser:"| @('MINUTE' | 'MINUTES')"`
	Hour   bool `parser:"| @('HOUR' | 'HOURS')"`
	Day    bool `parser:"| @('DAY' | 'DAYS')"`
	Year   bool `parser:"| @('YEAR' | 'YEARS')"`
}

type RefFieldExpr

type RefFieldExpr struct {
	Pos     lexer.Position
	Name    Ident      `parser:"@Ident"`
	RefDocs []DefQName `parser:"'ref' ('(' @@ (',' @@)* ')')?"`
	NotNull bool       `parser:"@(NOTNULL)?"`
}

type RoleStmt

type RoleStmt struct {
	Statement
	Name Ident `parser:"'ROLE' @Ident"`
}

func (RoleStmt) GetName

func (s RoleStmt) GetName() string

type RootExtEngineStatement

type RootExtEngineStatement struct {
	Function *FunctionStmt `parser:"@@"`
	Storage  *StorageStmt  `parser:"| @@"`
	// contains filtered or unexported fields
}

type RootExtEngineStmt

type RootExtEngineStmt struct {
	Engine     EngineType               `parser:"EXTENSIONENGINE @@"`
	Statements []RootExtEngineStatement `parser:"'(' @@? (';' @@)* ';'? ')'"`
}

func (*RootExtEngineStmt) Iterate

func (s *RootExtEngineStmt) Iterate(callback func(stmt interface{}))

type RootStatement

type RootStatement struct {
	// Only allowed in root
	Template *TemplateStmt `parser:"@@"`

	// Also allowed in root
	Role           *RoleStmt           `parser:"| @@"`
	Rate           *RateStmt           `parser:"| @@"`
	Limit          *LimitStmt          `parser:"| @@"`
	Tag            *TagStmt            `parser:"| @@"`
	ExtEngine      *RootExtEngineStmt  `parser:"| @@"`
	Workspace      *WorkspaceStmt      `parser:"| @@"`
	AlterWorkspace *AlterWorkspaceStmt `parser:"| @@"`
	Table          *TableStmt          `parser:"| @@"`
	Type           *TypeStmt           `parser:"| @@"`
	Application    *ApplicationStmt    `parser:"| @@"`
	Declare        *DeclareStmt        `parser:"| @@"`
	// contains filtered or unexported fields
}

type SchemaAST

type SchemaAST struct {
	Imports    []ImportStmt    `parser:"@@? (';' @@)* ';'?"`
	Statements []RootStatement `parser:"@@? (';' @@)* ';'?"`
}

func (*SchemaAST) Iterate

func (s *SchemaAST) Iterate(callback func(stmt interface{}))

type StateStorage

type StateStorage struct {
	Storage  DefQName   `parser:"@@"`
	Entities []DefQName `parser:"( '(' @@ (',' @@)* ')')?"`
	// contains filtered or unexported fields
}

type Statement

type Statement struct {
	Pos              lexer.Position
	RawCommentBlocks []string `parser:"@PreStmtComment*"`
	Comments         []string // will be set after 1st pass
}

func (*Statement) GetComments

func (s *Statement) GetComments() []string

func (*Statement) GetPos

func (s *Statement) GetPos() *lexer.Position

func (*Statement) GetRawCommentBlocks

func (s *Statement) GetRawCommentBlocks() []string

func (*Statement) SetComments

func (s *Statement) SetComments(comments []string)

type StorageOp

type StorageOp struct {
	Get      bool           `parser:"( @'GET'"`
	GetBatch bool           `parser:"| @'GETBATCH'"`
	Read     bool           `parser:"| @'READ'"`
	Insert   bool           `parser:"| @'INSERT'"`
	Update   bool           `parser:"| @'UPDATE')"`
	Scope    []StorageScope `parser:"'SCOPE' '(' @@ (',' @@)* ')'"`
}

type StorageScope

type StorageScope struct {
	Commands   bool `parser:" ( @'COMMANDS'"`
	Queries    bool `parser:" | @'QUERIES'"`
	Projectors bool `parser:" | @'PROJECTORS')"`
}

type StorageStmt

type StorageStmt struct {
	Statement
	Name         Ident       `parser:"'STORAGE' @Ident"`
	Ops          []StorageOp `parser:"'(' @@ (',' @@)* ')'"`
	EntityRecord bool        `parser:"@('ENTITY' 'RECORD')?"`
	EntityView   bool        `parser:"@('ENTITY' 'VIEW')?"`
}

func (StorageStmt) GetName

func (s StorageStmt) GetName() string

type SymbolRef

type SymbolRef struct {
	Name       DefQName      `parser:"@@"`
	Parameters []*Expression `parser:"( '(' @@ ( ',' @@ )* ')' )?"`
}

type TableCheckExpr

type TableCheckExpr struct {
	Expression Expression `parser:"'CHECK' '(' @@ ')'"`
}

type TableConstraint

type TableConstraint struct {
	Statement
	ConstraintName Ident            `parser:"('CONSTRAINT' @Ident)?"`
	UniqueField    *UniqueFieldExpr `parser:"(@@"`
	Unique         *UniqueExpr      `parser:"| @@"`
	Check          *TableCheckExpr  `parser:"| @@)"`
}

type TableItemExpr

type TableItemExpr struct {
	NestedTable *NestedTableStmt `parser:"@@"`
	Constraint  *TableConstraint `parser:"| @@"`
	RefField    *RefFieldExpr    `parser:"| @@"`
	Field       *FieldExpr       `parser:"| @@"`
	FieldSet    *FieldSetItem    `parser:"| @@"`
}

type TableStmt

type TableStmt struct {
	Statement
	Abstract bool            `parser:"@'ABSTRACT'?'TABLE'"`
	Name     Ident           `parser:"@Ident"`
	Inherits *DefQName       `parser:"('INHERITS' @@)?"`
	Items    []TableItemExpr `parser:"'(' @@? (',' @@)* ')'"`
	With     []WithItem      `parser:"('WITH' @@ (',' @@)* )?"`
	// contains filtered or unexported fields
}

func (*TableStmt) GetName

func (s *TableStmt) GetName() string

func (*TableStmt) Iterate

func (s *TableStmt) Iterate(callback func(stmt interface{}))

type TagStmt

type TagStmt struct {
	Statement
	Name Ident `parser:"'TAG' @Ident"`
}

func (TagStmt) GetName

func (s TagStmt) GetName() string

type TemplateStmt

type TemplateStmt struct {
	Statement
	Name      Ident    `parser:"'TEMPLATE' @Ident 'OF' 'WORKSPACE'" `
	Workspace DefQName `parser:"@@"`
	Source    Ident    `parser:"'SOURCE' @Ident"`
}

func (TemplateStmt) GetName

func (s TemplateStmt) GetName() string

type Term

type Term struct {
	Value         *Value      `parser:"@@"`
	SymbolRef     *SymbolRef  `parser:"| @@"`
	SubExpression *Expression `parser:"| '(' @@ ')'"`
}

type TypeBytes

type TypeBytes struct {
	Pos    lexer.Position
	MaxLen *uint64 `parser:"(('binary' 'varying') | 'varbinary' | 'bytes') ( '(' @Int ')' )?"`
}

type TypeStmt

type TypeStmt struct {
	Statement
	Name  Ident           `parser:"'TYPE' @Ident "`
	Items []TableItemExpr `parser:"'(' @@? (',' @@)* ')'"`
}

func (TypeStmt) GetName

func (s TypeStmt) GetName() string

type TypeVarchar

type TypeVarchar struct {
	Pos    lexer.Position
	MaxLen *uint64 `parser:"(('character' 'varying') | 'varchar' | 'text') ( '(' @Int ')' )?"`
}

type UniqueExpr

type UniqueExpr struct {
	Fields []Ident `parser:"'UNIQUE' '(' @Ident (',' @Ident)* ')'"`
}

type UniqueFieldExpr

type UniqueFieldExpr struct {
	Field Ident `parser:"'UNIQUEFIELD' @Ident"`
}

type UseStmt

type UseStmt struct {
	Statement
	Name Ident `parser:"'USE' @Ident"`
}

type UseTableStmt

type UseTableStmt struct {
	Statement

	Package   *Identifier `parser:"'USE' 'TABLE' (@@ '.')?"`
	AllTables bool        `parser:"(@'*'"`
	TableName *Identifier `parser:"| @@)"`
	// contains filtered or unexported fields
}

type UseWorkspaceStmt

type UseWorkspaceStmt struct {
	Statement
	Workspace Identifier `parser:"'USE' 'WORKSPACE' @@"`
	// contains filtered or unexported fields
}

type Value

type Value struct {
	Int     *int64   `parser:" (@Int"`
	Float   *float64 `parser:" | @Float"`
	String  *string  `parser:" | @String"`
	Boolean *Boolean `parser:" | @('TRUE' | 'FALSE')"`
	Null    bool     `parser:" | @'NULL' )"`
}

type ViewField

type ViewField struct {
	Statement
	Name    Identifier `parser:"@@"`
	Type    DataType   `parser:"@@"`
	NotNull bool       `parser:"@(NOTNULL)?"`
}

type ViewItemExpr

type ViewItemExpr struct {
	Pos        lexer.Position
	PrimaryKey *PrimaryKeyExpr `parser:"(PRIMARYKEY '(' @@ ')')"`
	RefField   *ViewRefField   `parser:"| @@"`
	Field      *ViewField      `parser:"| @@"`
}

func (ViewItemExpr) FieldName

func (i ViewItemExpr) FieldName() Ident

Returns field name

type ViewRefField

type ViewRefField struct {
	Statement
	Name    Identifier `parser:"@@"`
	RefDocs []DefQName `parser:"'ref' ('(' @@ (',' @@)* ')')?"`
	NotNull bool       `parser:"@(NOTNULL)?"`
	// contains filtered or unexported fields
}

type ViewStmt

type ViewStmt struct {
	Statement
	Name     Ident          `parser:"'VIEW' @Ident"`
	Items    []ViewItemExpr `parser:"'(' @@? (',' @@)* ')'"`
	ResultOf DefQName       `parser:"'AS' 'RESULT' 'OF' @@"`
	// contains filtered or unexported fields
}

func (ViewStmt) ClusteringColumns

func (s ViewStmt) ClusteringColumns(callback func(f *ViewItemExpr))

Iterate view clustering columns

func (ViewStmt) Field

func (s ViewStmt) Field(fieldName Ident) *ViewItemExpr

Returns view item with field by field name

func (ViewStmt) GetName

func (s ViewStmt) GetName() string

func (*ViewStmt) Iterate

func (s *ViewStmt) Iterate(callback func(stmt interface{}))

func (ViewStmt) PartitionFields

func (s ViewStmt) PartitionFields(callback func(f *ViewItemExpr))

Iterate view partition fields

func (ViewStmt) ValueFields

func (s ViewStmt) ValueFields(callback func(f *ViewItemExpr))

Iterate view value fields

type VoidOrDataType

type VoidOrDataType struct {
	Void     bool           `parser:"( @'void'"`
	DataType *DataTypeOrDef `parser:"| @@)"`
}

type VoidOrDef

type VoidOrDef struct {
	Void bool      `parser:"( @'void'"`
	Def  *DefQName `parser:"| @@)"`
}

type WithItem

type WithItem struct {
	Comment *string    `parser:"('Comment' '=' @String)"`
	Tags    []DefQName `parser:"| ('Tags' '=' '(' @@ (',' @@)* ')')"`
}

type WorkspaceExtEngineStatement

type WorkspaceExtEngineStatement struct {
	Function  *FunctionStmt  `parser:"@@"`
	Projector *ProjectorStmt `parser:"| @@"`
	Command   *CommandStmt   `parser:"| @@"`
	Query     *QueryStmt     `parser:"| @@"`
	// contains filtered or unexported fields
}

type WorkspaceExtEngineStmt

type WorkspaceExtEngineStmt struct {
	Engine     EngineType                    `parser:"EXTENSIONENGINE @@"`
	Statements []WorkspaceExtEngineStatement `parser:"'(' @@? (';' @@)* ';'? ')'"`
}

func (*WorkspaceExtEngineStmt) Iterate

func (s *WorkspaceExtEngineStmt) Iterate(callback func(stmt interface{}))

type WorkspaceStatement

type WorkspaceStatement struct {
	// Only allowed in workspace
	Rate         *RateStmt         `parser:"@@"`
	View         *ViewStmt         `parser:"| @@"`
	UseTable     *UseTableStmt     `parser:"| @@"`
	UseWorkspace *UseWorkspaceStmt `parser:"| @@"`

	// Also allowed in workspace
	Role      *RoleStmt               `parser:"| @@"`
	Tag       *TagStmt                `parser:"| @@"`
	ExtEngine *WorkspaceExtEngineStmt `parser:"| @@"`
	Workspace *WorkspaceStmt          `parser:"| @@"`
	Table     *TableStmt              `parser:"| @@"`
	Type      *TypeStmt               `parser:"| @@"`
	Limit     *LimitStmt              `parser:"| @@"`
	// Sequence  *sequenceStmt  `parser:"| @@"`
	Grant *GrantStmt `parser:"| @@"`
	// contains filtered or unexported fields
}

type WorkspaceStmt

type WorkspaceStmt struct {
	Statement
	Abstract   bool                 `parser:"(@'ABSTRACT' "`
	Alterable  bool                 `parser:"| @'ALTERABLE')?"`
	Pool       bool                 `parser:"@('POOL' 'OF')?"`
	Name       Ident                `parser:"'WORKSPACE' @Ident "`
	Inherits   []DefQName           `parser:"('INHERITS' @@ (',' @@)* )? '('"`
	Descriptor *WsDescriptorStmt    `parser:"('DESCRIPTOR' @@)?"`
	Statements []WorkspaceStatement `parser:"@@? (';' @@)* ';'? ')'"`
	// contains filtered or unexported fields
}

func (WorkspaceStmt) GetName

func (s WorkspaceStmt) GetName() string

func (*WorkspaceStmt) Iterate

func (s *WorkspaceStmt) Iterate(callback func(stmt interface{}))

type WsDescriptorStmt

type WsDescriptorStmt struct {
	Statement
	Name  Ident           `parser:"@Ident?"`
	Items []TableItemExpr `parser:"'(' @@? (',' @@)* ')'"`
	// contains filtered or unexported fields
}

func (WsDescriptorStmt) GetName

func (s WsDescriptorStmt) GetName() string

Jump to

Keyboard shortcuts

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