func (this *builder) VisitExecute(stmt *algebra.Execute) (interface{}, error) { expr := stmt.Prepared() if (expr == nil) || expr.Type() != value.STRING && expr.Type() != value.OBJECT { return nil, errors.NewUnrecognizedPreparedError(errBadFormat) } return plan.GetPrepared(expr) }
func unmarshalPrepared(bytes []byte) (*Prepared, errors.Error) { prepared := &Prepared{} err := prepared.UnmarshalJSON(bytes) if err != nil { return nil, errors.NewUnrecognizedPreparedError(fmt.Errorf("JSON unmarshalling error: %v", err)) } if prepared.Name() != "" { cache.add(prepared) } return prepared, nil }
func unmarshalPrepared(bytes []byte) (*Prepared, errors.Error) { prepared := &Prepared{} err := prepared.UnmarshalJSON(bytes) if err != nil { return nil, errors.NewUnrecognizedPreparedError(errBadFormat) } if prepared.Name() != "" { cache.add(prepared) } return prepared, nil }
func doGetPrepared(prepared_stmt value.Value, track bool) (*Prepared, errors.Error) { switch prepared_stmt.Type() { case value.STRING: prepared := cache.get(prepared_stmt, track) if prepared == nil { return nil, errors.NewNoSuchPreparedError(prepared_stmt.Actual().(string)) } return prepared, nil case value.OBJECT: name_value, has_name := prepared_stmt.Field("name") if has_name { if prepared := cache.get(name_value, track); prepared != nil { return prepared, nil } } prepared_bytes, err := prepared_stmt.MarshalJSON() if err != nil { return nil, errors.NewUnrecognizedPreparedError(err) } return unmarshalPrepared(prepared_bytes) default: return nil, errors.NewUnrecognizedPreparedError(fmt.Errorf("Invalid prepared stmt %v", prepared_stmt)) } }