diff --git a/generator/metadata/column_info.go b/generator/metadata/column_info.go index 11fe637..80ebed1 100644 --- a/generator/metadata/column_info.go +++ b/generator/metadata/column_info.go @@ -54,7 +54,9 @@ func (c ColumnInfo) GoBaseType() string { return "[]byte" case "text": return "string" - case "numeric", "real": + case "real": + return "float32" + case "numeric", "double precision": return "float64" default: return "string" diff --git a/sqlbuilder/execution/null_types.go b/sqlbuilder/execution/null_types.go index b74ee8a..11302b8 100644 --- a/sqlbuilder/execution/null_types.go +++ b/sqlbuilder/execution/null_types.go @@ -87,3 +87,32 @@ func (n NullInt16) Value() (driver.Value, error) { } return n.Int16, nil } + +type NullFloat32 struct { + Float32 float32 + Valid bool // Valid is true if Int64 is not NULL +} + +// Scan implements the Scanner interface. +func (n *NullFloat32) Scan(value interface{}) error { + switch v := value.(type) { + case float64: + n.Float32, n.Valid = float32(v), true + return nil + case float32: + n.Float32, n.Valid = v, true + return nil + } + + n.Valid = false + + return nil +} + +// Value implements the driver Valuer interface. +func (n NullFloat32) Value() (driver.Value, error) { + if !n.Valid { + return nil, nil + } + return n.Float32, nil +}