stardb/result_safe.go

125 lines
3.0 KiB
Go
Raw Permalink Normal View History

2026-03-07 19:27:44 +08:00
package stardb
import (
internalconv "b612.me/stardb/internal/convert"
"database/sql"
2026-03-07 19:27:44 +08:00
)
func (r *StarResult) getColumnValue(name string) (interface{}, error) {
if r == nil || r.columnIndex == nil {
return nil, wrapColumnNotFound(name)
}
2026-03-07 19:27:44 +08:00
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
2026-03-07 19:27:44 +08:00
}
return ConvertToStringSafe(val)
2026-03-07 19:27:44 +08:00
}
// 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
2026-03-07 19:27:44 +08:00
}
return ConvertToInt64Safe(val)
2026-03-07 19:27:44 +08:00
}
// 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
2026-03-07 19:27:44 +08:00
}
return sql.NullTime{Time: t, Valid: true}, nil
2026-03-07 19:27:44 +08:00
}