Ejemplo n.º 1
0
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
}