func (m *SqlVm) ExecuteDelete(writeContext datasource.ContextWriter, readContext datasource.ContextReader) (err error) { //defer errRecover(&err) scanner, ok := readContext.(datasource.RowScanner) if !ok { return fmt.Errorf("Must implement RowScanner: %T", writeContext) } s := &State{ ExprVm: m, ContextReader: readContext, } s.rv = reflect.ValueOf(s) // Check and see if we are where Guarded if m.del.Where != nil { u.Debugf("Has a Where: %v", m.del.Where.StringAST()) for row := scanner.Next(); ; row = scanner.Next() { if row == nil { break } whereValue, ok := s.Walk(m.del.Where) u.Infof("where: %v %v", ok, whereValue) if !ok { continue } switch whereVal := whereValue.(type) { case value.BoolValue: if whereVal == value.BoolValueTrue { if err := writeContext.Delete(row); err != nil { u.Errorf("error %v", err) } } } } } // //u.Debugf("tree.Root: as?%v %#v", col.As, col.Tree.Root) // v, ok := s.Walk(col.Tree.Root) // if ok { // writeContext.Put(col, readContext, v) // } return }