...
1package zeronull
2
3import (
4 "database/sql/driver"
5 "fmt"
6 "math"
7
8 "github.com/jackc/pgx/v5/pgtype"
9)
10
11<% [2, 4, 8].each do |pg_byte_size| %>
12<% pg_bit_size = pg_byte_size * 8 %>
13type Int<%= pg_byte_size %> int<%= pg_bit_size %>
14
15func (Int<%= pg_byte_size %>) SkipUnderlyingTypePlan() {}
16
17// ScanInt64 implements the Int64Scanner interface.
18func (dst *Int<%= pg_byte_size %>) ScanInt64(n int64, valid bool) error {
19 if !valid {
20 *dst = 0
21 return nil
22 }
23
24 if n < math.MinInt<%= pg_bit_size %> {
25 return fmt.Errorf("%d is greater than maximum value for Int<%= pg_byte_size %>", n)
26 }
27 if n > math.MaxInt<%= pg_bit_size %> {
28 return fmt.Errorf("%d is greater than maximum value for Int<%= pg_byte_size %>", n)
29 }
30 *dst = Int<%= pg_byte_size %>(n)
31
32 return nil
33}
34
35// Scan implements the database/sql Scanner interface.
36func (dst *Int<%= pg_byte_size %>) Scan(src any) error {
37 if src == nil {
38 *dst = 0
39 return nil
40 }
41
42 var nullable pgtype.Int<%= pg_byte_size %>
43 err := nullable.Scan(src)
44 if err != nil {
45 return err
46 }
47
48 *dst = Int<%= pg_byte_size %>(nullable.Int<%= pg_bit_size %>)
49
50 return nil
51}
52
53// Value implements the database/sql/driver Valuer interface.
54func (src Int<%= pg_byte_size %>) Value() (driver.Value, error) {
55 if src == 0 {
56 return nil, nil
57 }
58 return int64(src), nil
59}
60<% end %>
View as plain text