From 371b6ce799231935ed394dd773a9ab7fccb0349d Mon Sep 17 00:00:00 2001 From: zer0sub Date: Sat, 30 Mar 2019 09:48:54 +0100 Subject: [PATCH] Support more numeric types. --- generator/metadata/column_info.go | 4 +++- sqlbuilder/execution/null_types.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) 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 +}