Files
chaisql/internal/expr/constraint.go
2021-07-02 18:41:33 +04:00

55 lines
983 B
Go

package expr
import (
"errors"
"github.com/genjidb/genji/document"
"github.com/genjidb/genji/internal/database"
"github.com/genjidb/genji/internal/environment"
)
type ConstraintExpr struct {
Expr Expr
Catalog database.Catalog
}
func Constraint(e Expr) *ConstraintExpr {
return &ConstraintExpr{
Expr: e,
}
}
func (t *ConstraintExpr) Eval(tx *database.Transaction) (document.Value, error) {
var env environment.Environment
env.Catalog = t.Catalog
env.Tx = tx
if t.Expr == nil {
return NullLitteral, errors.New("missing expression")
}
return t.Expr.Eval(&env)
}
func (t *ConstraintExpr) Bind(catalog database.Catalog) {
t.Catalog = catalog
}
func (t *ConstraintExpr) IsEqual(other database.TableExpression) bool {
if t == nil {
return other == nil
}
if other == nil {
return false
}
o, ok := other.(*ConstraintExpr)
if !ok {
return false
}
return Equal(t.Expr, o.Expr)
}
func (t *ConstraintExpr) String() string {
return t.Expr.String()
}