Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BelongsTo ¶
type BelongsTo struct {
// The table that this table belongs to
Table string `toml:"table"`
// The name of the foreign key which points to the table this table
// belongs to.
KeyField string `toml:"key_field"`
// Optional. If true the owning table has at most one of this table
OneToOne bool `toml:"one_to_one"`
// Optional. The name to give the pointer field in the generated parent
// struct. If not provided, this will just be the name of the child struct.
ParentFieldName string `toml:"parent_field_name"`
// Optional. The name to give the pointer field in the generated child
// struct. If not provided, this will just be the name of the parent struct.
ChildFieldName string `toml:"child_field_name"`
}
An explicitly configured foreign key relationship which can be attached to a table's config.
type DbConfig ¶
type DbConfig struct {
// The name of the field that should be updated by pggen's generated
// `Insert` methods. Overridden by the config option of the same name
// on TableConfig.
CreatedAtField string `toml:"created_at_field"`
// The name of the field that should be updated by pggen's generated
// `Update` and `Insert` methods. Overridden by the config option of
// the same name on TableConfig.
UpdatedAtField string `toml:"updated_at_field"`
// The name of the nullable timestamp field that should be used to
// implement soft deletes. Overridden by the config option of the
// same name on TableConfig.
DeletedAtField string `toml:"deleted_at_field"`
// If true, it is an error for any [[query]] config block to be missing
// the `comment` field. Useful if you want to be strict about documentation.
RequireQueryComments bool `toml:"require_query_comments"`
TypeOverrides []TypeOverride `toml:"type_override"`
Queries []QueryConfig `toml:"query"`
Stmts []StmtConfig `toml:"statement"`
Tables []TableConfig `toml:"table"`
}
The configuration file format used to specify the database objects to generate code for.
type JsonType ¶
type JsonType struct {
// The name of the `json` or `jsonb` column which should be parsed and serialized
// into a structured type using the encoding/json package.
ColumnName string `toml:"column_name"`
// The name of the type, including package name, that the column should be parsed
// into.
TypeName string `toml:"type_name"`
// The import string for the package in which the type lives. Should include quotes.
Pkg string `toml:"pkg"`
}
type QueryConfig ¶
type QueryConfig struct {
// The name that should be used to identify this query in generated go
// code.
Name string `toml:"name"`
// A comment to place on the generated method so that IDEs can provide
// online documentation for the method.
Comment string `toml:"comment"`
// The actual text of the query.
Body string `toml:"body"`
// A string consisting of the runes '-' and 'n' to indicate the
// nullability of return columns. '-' indicates that the column is
// not nullable (NOT NULL), while 'n' indicates that it is nullable.
// These need to be specified manually because postgres does not expose
// a mechanism for infering the nullability of query results that I
// could discover. The flags string must be exactly as long as the
// result set is wide.
NullFlags string `toml:"null_flags"`
// A long-form way of specifying the same thing as `NullFlags`. Only one
// of the two options should be provided. Any fields appearing in this list
// will be treated as not nullable, with all other fields being considered
// nullable as is the default.
NotNullFields []string `toml:"not_null_fields"`
// The name that should be used for this query's return type.
// This is useful because it allows multiple queries to return
// values of the same type so that client code does not have to
// perform a series of endless conversions. If two queries which
// return different types are given the same name to use for their
// return type, it is an error.
ReturnType string `toml:"return_type"`
// A mapping of argument numbers to names to generate for them.
// This configuration option allows you to give useful names to the
// query arguments in the genrated code (normaly pggen will just make up
// names like `arg0`, `arg1` and so on). An example mapping is
// `"1:foo 2:bar 3:baz"`.
ArgNames string `toml:"arg_names"`
// If true, this query is expected to return just one result row, so
// `pggen` will generate code that returns just a single result rather
// than a slice that always has just one record you have to unpack.
// If `single_result` is true, `pggen` will not generate a *Query method
// for this query, as there is no point to supporting streaming mode for
// a single-result query.
SingleResult bool `toml:"single_result"`
// If true, allow nullable types to be passed in as arguments to the query.
// Normally, query arguments are always non-null so making every argument
// a pointer type would just be annoying for client code, but sometimes you
// do actually want nullable arguments.
NullableArguments bool `toml:"nullable_arguments"`
// If true and the query returns a slice, the values will be boxed as a slice
// of pointers. Otherwise, it will be a slice of struct values.
BoxResults bool `toml:"box_results"`
}
Queries registered in the config file represent arbitrary bits of SQL, possibly parameterized by $N arguments. The generated code will use `sql.QueryContext` and marshal the results into a list of rows returned.
type StmtConfig ¶
type StmtConfig struct {
// The name that should be used to identify this statement in generated
// go code.
Name string `toml:"name"`
// The actual text of this statement.
Body string `toml:"body"`
// A mapping of argument numbers to names to generate for them.
// This configuration option allows you to give useful names to the
// query arguments in the genrated code (normaly pggen will just make up
// names like `arg0`, `arg1` and so on). An example mapping is
// `"1:foo 2:bar 3:baz"`.
ArgNames string `toml:"arg_names"`
// If true, allow nullable types to be passed in as arguments to the statement.
// Normally, statement arguments are always non-null so making every argument
// a pointer type would just be annoying for client code, but sometimes you
// do actually want nullable arguments.
NullableArguments bool `toml:"nullable_arguments"`
// A comment to place on the generated method so that IDEs can provide
// online documentation for the method.
Comment string `toml:"comment"`
}
Statements are like queries but they are executed for side effects and therefore return `(sql.Result, error)` rather than a set of rows. Statements should be used for INSERT, UPDATE, and DELETE operations.
type TableConfig ¶
type TableConfig struct {
// The name of the table in the database
Name string `toml:"name"`
// If true, pggen will not infer a relationship between this table
// and any owning tables based on any foreign keys in this table.
NoInferBelongsTo bool `toml:"no_infer_belongs_to"`
// A list of tables that this table belongs to
BelongsTo []BelongsTo `toml:"belongs_to"`
// The timestamp to update in `Insert`. Overriddes global version.
CreatedAtField string `toml:"created_at_field"`
// The timestamp to update in `Update` and `Insert`.
// Overriddes global version.
UpdatedAtField string `toml:"updated_at_field"`
// The nullable timestamp for implementing soft deletes.
// Overriddes global version.
DeletedAtField string `toml:"deleted_at_field"`
// A list of extra annotations to add to the generated fields.
FieldTags []FieldTag `toml:"field_tags"`
// A list of annotations indicating types that specific json columns should
// be (de)serialized into. By default, all `json` and `jsonb` columns will
// become byte arrays.
JsonTypes []JsonType `toml:"json_type"`
// If true, queries that return sliced results will return a slice of pointers.
// Otherwise, it will be a slice of struct values.
BoxResults bool `toml:"box_results"`
}
type TypeOverride ¶
type TypeOverride struct {
// The name of the type in postgres
PgTypeName string `toml:"postgres_type_name"`
// The name of the package in which the type appears as it would
// appear in an import list, including quotes. The package name
// may include an alias just like an import might.
//
// Examples:
// - '"github.com/google/uuid"'
// - 'my_uuid_alias "github.com/google/uuid"'
Pkg string `toml:"pkg"`
// The go name for the type, including package name
TypeName string `toml:"type_name"`
// The name of the package in which the nullable version of the type
// appears. If `pkg` was already provided, `nullable_pkg` may be omitted.
NullPkg string `toml:"nullable_pkg"`
// The name of a go type which might be null (often Null<TypeName>)
NullableTypeName string `toml:"nullable_type_name"`
// This should contain a golang template that expands to a go expressions of type
// `type_name`. The template can expect a context which includes key `.Value` which
// will be an expression which evaluates to a value of type `nullable_type_name`.
// It `pkg` and `nullable_pkg` will have been imported, so you can use them in the
// expression if needed.
//
// For example, the nullable_to_boxed template for the binding the UUID type from the
// github.com/gofrs/uuid package to postgres' `uuid` type might look like:
//
// “`
// func(u uuid.NullUUID) *uuid.UUID {
// if u.Valid {
// return &u.UUID
// }
// return nil
// }({{ .Value }})
// “`
//
// If no template expression is provided, `.Value` will be assumed to be directly
// assignable to a boxed version of `type_name`.
NullableToBoxed string `toml:"nullable_to_boxed"`
}
Click to show internal directories.
Click to hide internal directories.