Supported Go types and their format¶
Supported Go types¶
SQLair supports the following types:
In input expressions:
structs
maps
slices
In output expressions:
structs
maps
All types used with SQLair must be named so they can be referenced in the query.
Type format¶
Structs¶
For a struct to be usable by SQLair, all struct fields that correspond to a
database column must be tagged with a db
tag containing the column name. These
fields must be public (i.e. start with a capital letter), though the struct
itself does not have to be. Any fields without a tag will be ignored.
If a struct contains an embedded struct then SQLair will treat the fields of the embedded structs as if they were fields in the parent struct.
For example:
type Person struct {
Name string `db:"name"`
ID int `db:"id_number"`
DoB string `db:"date_of_birth"`
Weight int
height int
}
In this example the Weight
and height
fields will be ignored by SQLair.
The “omitempty” keyword¶
In a struct tag, the omitempty
keyword tells SQLair to omit the column
from an insert operation if the value in the
corresponding struct field zeroed.
This is useful if the content of the column is generated by the database, e.g. if it has an auto-increment directive.
To add the omitempty
keyword, write it in the db
tag after the column name.
For example:
type Address struct {
ID string `db:"id, omitempty"`
City string `db:"city"`
}
See more
Maps¶
Named maps can be used with SQLair and must have a key with a base type of
string
. This is because SQLair uses the column names as keys when reading from
and writing to the map. The value type of the map can be anything.
For example:
type Cols map[string]int
sqlair.M¶
For convenience, SQLair provides a named map type
sqlair.M
which has the
type map[string]any
.
Slices¶
Named slices can only be used as inputs and will expand into a comma separated list of input placeholders for each value in the slice. The slice must be named and can be of any type.
For example:
type Names []string
sqlair.S¶
For convenience, SQLair provides a named slice type
sqlair.S
which has the
type []any
.