Esempio n. 1
0
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)
}
Esempio n. 2
0
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
}
Esempio n. 3
0
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
}
Esempio n. 4
0
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))
	}
}