package stardb import ( internalconv "b612.me/stardb/internal/convert" "database/sql" ) func (r *StarResult) getColumnValue(name string) (interface{}, error) { if r == nil || r.columnIndex == nil { return nil, wrapColumnNotFound(name) } index, ok := r.columnIndex[name] if !ok { return nil, wrapColumnNotFound(name) } return r.Result()[index], nil } // GetString returns column value as string with error func (r *StarResult) GetString(name string) (string, error) { val, err := r.getColumnValue(name) if err != nil { return "", err } return ConvertToStringSafe(val) } // GetInt64 returns column value as int64 with error func (r *StarResult) GetInt64(name string) (int64, error) { val, err := r.getColumnValue(name) if err != nil { return 0, err } return ConvertToInt64Safe(val) } // GetFloat64 returns column value as float64 with error func (r *StarResult) GetFloat64(name string) (float64, error) { val, err := r.getColumnValue(name) if err != nil { return 0, err } return internalconv.ToFloat64Safe(val) } // GetNullString returns a nullable string value. func (r *StarResult) GetNullString(name string) (sql.NullString, error) { val, err := r.getColumnValue(name) if err != nil { return sql.NullString{}, err } if val == nil { return sql.NullString{}, nil } str, err := ConvertToStringSafe(val) if err != nil { return sql.NullString{}, err } return sql.NullString{String: str, Valid: true}, nil } // GetNullInt64 returns a nullable int64 value. func (r *StarResult) GetNullInt64(name string) (sql.NullInt64, error) { val, err := r.getColumnValue(name) if err != nil { return sql.NullInt64{}, err } if val == nil { return sql.NullInt64{}, nil } i, err := ConvertToInt64Safe(val) if err != nil { return sql.NullInt64{}, err } return sql.NullInt64{Int64: i, Valid: true}, nil } // GetNullFloat64 returns a nullable float64 value. func (r *StarResult) GetNullFloat64(name string) (sql.NullFloat64, error) { val, err := r.getColumnValue(name) if err != nil { return sql.NullFloat64{}, err } if val == nil { return sql.NullFloat64{}, nil } f, err := internalconv.ToFloat64Safe(val) if err != nil { return sql.NullFloat64{}, err } return sql.NullFloat64{Float64: f, Valid: true}, nil } // GetNullBool returns a nullable bool value. func (r *StarResult) GetNullBool(name string) (sql.NullBool, error) { val, err := r.getColumnValue(name) if err != nil { return sql.NullBool{}, err } if val == nil { return sql.NullBool{}, nil } b, err := internalconv.ToBoolSafe(val) if err != nil { return sql.NullBool{}, err } return sql.NullBool{Bool: b, Valid: true}, nil } // GetNullTime returns a nullable time value. func (r *StarResult) GetNullTime(name string) (sql.NullTime, error) { val, err := r.getColumnValue(name) if err != nil { return sql.NullTime{}, err } if val == nil { return sql.NullTime{}, nil } t, err := internalconv.ToTimeSafe(val) if err != nil { return sql.NullTime{}, err } return sql.NullTime{Time: t, Valid: true}, nil }