本文整理汇总了Golang中github.com/araddon/qlbridge/expr.ContextWriter类的典型用法代码示例。如果您正苦于以下问题:Golang ContextWriter类的具体用法?Golang ContextWriter怎么用?Golang ContextWriter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ContextWriter类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Execute
// Execute applies a parse expression to the specified context's
func (m *Vm) Execute(writeContext expr.ContextWriter, readContext expr.ContextReader) (err error) {
defer errRecover(&err)
s := &State{
ExprVm: m,
ContextReader: readContext,
}
s.rv = reflect.ValueOf(s)
//u.Debugf("vm.Execute: %#v", m.Tree.Root)
v, ok := s.Walk(m.Tree.Root)
//u.Infof("v:%v ok?%v", v, ok)
// vm unable to walk tree
if !ok {
return ErrExecute
}
// vm returned an error value
if errv, ok := v.(value.ErrorValue); ok {
return errv
}
// Special Vm that doesnt' have named fields, single tree expression
//u.Debugf("vm.Walk val: %v", v)
writeContext.Put(SchemaInfoEmpty, readContext, v)
return nil
}
示例2: EvalSql
// Eval applies a sql statement to the specified context
//
// @writeContext = Write out results of projection
// @readContext = Message to evaluate does it match where clause? if so proceed to projection
//
func EvalSql(sel *rel.SqlSelect, writeContext expr.ContextWriter, readContext expr.ContextReader) (bool, error) {
// Check and see if we are where Guarded, which would discard the entire message
if sel.Where != nil {
whereValue, ok := Eval(readContext, sel.Where.Expr)
if !ok {
// TODO: seriously re-think this. If the where clause is not able to evaluate
// such as WHERE contains(ip,"10.120.") due to missing IP, does that mean it is
// logically true? Would we not need to correctly evaluate and = true to filter?
// Marek made a good point, they would need to expand logical statement to include OR
return false, nil
}
switch whereVal := whereValue.(type) {
case value.BoolValue:
if whereVal.Val() == false {
return false, nil
}
default:
if whereVal.Nil() {
return false, nil
}
}
}
//u.Infof("colct=%v sql=%v", len(sel.Columns), sel.String())
for _, col := range sel.Columns {
//u.Debugf("Eval Col.As:%v mt:%v %#v Has IF Guard?%v ", col.As, col.MergeOp.String(), col, col.Guard != nil)
if col.Guard != nil {
ifColValue, ok := Eval(readContext, col.Guard)
if !ok {
u.Debugf("Could not evaluate if: T:%T v:%v", col.Guard, col.Guard.String())
continue
}
switch ifVal := ifColValue.(type) {
case value.BoolValue:
if ifVal.Val() == false {
continue // filter out this col
}
default:
if ifColValue.Nil() {
continue // filter out this col
}
}
}
v, ok := Eval(readContext, col.Expr)
if !ok {
u.Warnf("Could not evaluate %s", col.Expr)
} else {
//u.Debugf(`writeContext.Put("%v",%v) %s`, col.As, v.Value(), col.String())
writeContext.Put(col, readContext, v)
}
}
return true, nil
}
示例3: Execute
// Execute applies a parse expression to the specified context's
func (m *Vm) Execute(writeContext expr.ContextWriter, readContext expr.ContextReader) (err error) {
defer errRecover(&err)
s := &State{
ExprVm: m,
ContextReader: readContext,
}
s.rv = reflect.ValueOf(s)
//u.Debugf("vm.Execute: %#v", m.Tree.Root)
v, ok := s.Walk(m.Tree.Root)
if ok && v != value.ErrValue {
// Special Vm that doesnt' have named fields, single tree expression
//u.Debugf("vm.Walk val: %v", v)
writeContext.Put(SchemaInfoEmpty, readContext, v)
return nil
}
return ErrExecute
}