mirror of
https://github.com/chaisql/chai.git
synced 2025-10-05 07:36:56 +08:00
55 lines
983 B
Go
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()
|
|
}
|