Ariel Mashraki has uploaded this change for review.
database/sql: add NullByte
Fixes #40082
Change-Id: I88e25595ff74ace457bff505635e986e63a5dedd
---
M src/database/sql/fakedb_test.go
M src/database/sql/sql.go
M src/database/sql/sql_test.go
3 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/src/database/sql/fakedb_test.go b/src/database/sql/fakedb_test.go
index 72e16e0..b1d3c29 100644
--- a/src/database/sql/fakedb_test.go
+++ b/src/database/sql/fakedb_test.go
@@ -1186,6 +1186,10 @@
return driver.Bool
case "nullbool":
return driver.Null{Converter: driver.Bool}
+ case "byte":
+ return driver.NotNull{Converter: driver.DefaultParameterConverter}
+ case "nullbyte":
+ return driver.Null{Converter: driver.DefaultParameterConverter}
case "int32":
return driver.Int32
case "nullint32":
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go
index 61b5018..4c784d0 100644
--- a/src/database/sql/sql.go
+++ b/src/database/sql/sql.go
@@ -260,6 +260,32 @@
return int64(n.Int32), nil
}
+// NullByte represents a byte that may be null.
+// NullByte implements the Scanner interface so
+// it can be used as a scan destination, similar to NullString.
+type NullByte struct {
+ Byte byte
+ Valid bool // Valid is true if Byte is not NULL
+}
+
+// Scan implements the Scanner interface.
+func (n *NullByte) Scan(value interface{}) error {
+ if value == nil {
+ n.Byte, n.Valid = 0, false
+ return nil
+ }
+ n.Valid = true
+ return convertAssign(&n.Byte, value)
+}
+
+// Value implements the driver Valuer interface.
+func (n NullByte) Value() (driver.Value, error) {
+ if !n.Valid {
+ return nil, nil
+ }
+ return int64(n.Byte), nil
+}
+
// NullFloat64 represents a float64 that may be null.
// NullFloat64 implements the Scanner interface so
// it can be used as a scan destination, similar to NullString.
diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go
index 94af39c..c320bd2 100644
--- a/src/database/sql/sql_test.go
+++ b/src/database/sql/sql_test.go
@@ -1819,6 +1819,18 @@
nullTestRun(t, spec)
}
+func TestNullByteParam(t *testing.T) {
+ spec := nullTestSpec{"nullbyte", "byte", [6]nullTestRow{
+ {NullByte{31, true}, 1, NullByte{31, true}},
+ {NullByte{0, false}, 1, NullByte{0, false}},
+ {22, 1, NullByte{22, true}},
+ {NullByte{33, true}, 1, NullByte{33, true}},
+ {NullByte{222, false}, 1, NullByte{0, false}},
+ {0, NullByte{31, false}, nil},
+ }}
+ nullTestRun(t, spec)
+}
+
func TestNullFloat64Param(t *testing.T) {
spec := nullTestSpec{"nullfloat64", "float64", [6]nullTestRow{
{NullFloat64{31.2, true}, 1, NullFloat64{31.2, true}},
To view, visit change 311989. To unsubscribe, or for help writing mail filters, visit settings.
Ariel Mashraki abandoned this change.
To view, visit change 311989. To unsubscribe, or for help writing mail filters, visit settings.