optgen ops test.opt
[Relational]
define Project {
    Input       RelExpr
    Projections ProjectionsExpr

    Passthrough ColSet
}

[Scalar, List]
define Projections {
}

[Scalar, ListItem]
define ProjectionsItem {
    Element ScalarExpr

    _ ColPrivate
}

[Private]
define ColPrivate {
    Col    ColumnID
    scalar ScalarProps
}

[Enforcer]
define Sort {
    Input Expr
}
----
----
// Code generated by optgen; [omitted]

package opt

const (
	UnknownOp Operator = iota

	ColPrivateOp

	ProjectOp

	ProjectionsOp

	ProjectionsItemOp

	SortOp

	NumOperators
)

const opNames = "unknowncol-privateprojectprojectionsprojections-itemsort"

var opNameIndexes = [...]uint32{0, 7, 18, 25, 36, 52, 56}

const opSyntaxTags = "UNKNOWNCOL PRIVATEPROJECTPROJECTIONSPROJECTIONS ITEMSORT"

var opSyntaxTagIndexes = [...]uint32{0, 7, 18, 25, 36, 52, 56}

var RelationalOperators = [...]Operator{
	ProjectOp,
}

func IsRelationalOp(e Expr) bool {
	switch e.Op() {
	case ProjectOp:
		return true
	}
	return false
}

var ScalarOperators = [...]Operator{
	ProjectionsOp,
	ProjectionsItemOp,
}

func IsScalarOp(e Expr) bool {
	switch e.Op() {
	case ProjectionsOp, ProjectionsItemOp:
		return true
	}
	return false
}

var ListOperators = [...]Operator{
	ProjectionsOp,
}

func IsListOp(e Expr) bool {
	switch e.Op() {
	case ProjectionsOp:
		return true
	}
	return false
}

var ListItemOperators = [...]Operator{
	ProjectionsItemOp,
}

func IsListItemOp(e Expr) bool {
	switch e.Op() {
	case ProjectionsItemOp:
		return true
	}
	return false
}

var PrivateOperators = [...]Operator{
	ColPrivateOp,
}

func IsPrivateOp(e Expr) bool {
	switch e.Op() {
	case ColPrivateOp:
		return true
	}
	return false
}

var EnforcerOperators = [...]Operator{
	SortOp,
}

func IsEnforcerOp(e Expr) bool {
	switch e.Op() {
	case SortOp:
		return true
	}
	return false
}
----
----
