DefaultColumns() helper on Table

This commit is contained in:
charlie 2025-02-06 09:34:22 +01:00
parent 00b8155f74
commit 38ea65434f
8 changed files with 50 additions and 3 deletions

View file

@ -21,3 +21,16 @@ func (t Table) MutableColumns() []Column {
return ret
}
// DefaultColumns returns list of columns with default values set for table
func (t Table) DefaultColumns() []Column {
var ret []Column
for _, column := range t.Columns {
if column.HasDefault {
ret = append(ret, column)
}
}
return ret
}

View file

@ -33,6 +33,7 @@ type {{structImplName}} struct {
AllColumns {{dialect.PackageName}}.ColumnList
MutableColumns {{dialect.PackageName}}.ColumnList
DefaultColumns {{dialect.PackageName}}.ColumnList
}
type {{tableTemplate.TypeName}} struct {
@ -78,6 +79,7 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st
{{- end}}
allColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .Columns}} }
mutableColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .MutableColumns}} }
defaultColumns = {{dialect.PackageName}}.ColumnList{ {{columnList .DefaultColumns}} }
)
return {{structImplName}}{
@ -93,6 +95,7 @@ func new{{tableTemplate.TypeName}}Impl(schemaName, tableName, alias string) {{st
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`

View file

@ -136,7 +136,7 @@ type TableSQLBuilderColumn struct {
Type string
}
var reservedKeywords = []string{"TableName", "Table", "SchemaName", "Alias", "AllColumns", "MutableColumns"}
var reservedKeywords = []string{"TableName", "Table", "SchemaName", "Alias", "AllColumns", "MutableColumns", "DefaultColumns"}
func renameIfReserved(name string) string {
if slices.Contains(reservedKeywords, name) {

View file

@ -22,6 +22,7 @@ func TestColumnRenameReserved(t *testing.T) {
{col: "Alias", want: "Alias_"},
{col: "AllColumns", want: "AllColumns_"},
{col: "MutableColumns", want: "MutableColumns_"},
{col: "DefaultColumns", want: "DefaultColumns_"},
{col: "OtherColumn", want: "OtherColumn"},
}

View file

@ -14,7 +14,7 @@ checkout-latest-testdata: checkout-testdata
# database with testdata retrieved in previous step.
# On the first run this action might take couple of minutes. Docker temp data are stored in .docker directory.
docker-compose-up:
docker-compose up
docker compose up
init-all:
go run ./init/init.go -testsuite all
@ -74,4 +74,4 @@ jet-gen-cockroach:
# docker-compose-cleanup will stop and remove test containers, volumes, and images.
cleanup:
docker-compose down --volumes
docker compose down --volumes

View file

@ -260,6 +260,7 @@ type linkTable struct {
AllColumns mysql.ColumnList
MutableColumns mysql.ColumnList
DefaultColumns mysql.ColumnList
}
type LinkTable struct {
@ -303,6 +304,7 @@ func newLinkTableImpl(schemaName, tableName, alias string) linkTable {
DescriptionColumn = mysql.StringColumn("description")
allColumns = mysql.ColumnList{IDColumn, URLColumn, NameColumn, DescriptionColumn}
mutableColumns = mysql.ColumnList{URLColumn, NameColumn, DescriptionColumn}
defaultColumns = mysql.ColumnList{DescriptionColumn}
)
return linkTable{
@ -316,6 +318,7 @@ func newLinkTableImpl(schemaName, tableName, alias string) linkTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`)
@ -375,6 +378,7 @@ type actorTable struct {
AllColumns mysql.ColumnList
MutableColumns mysql.ColumnList
DefaultColumns mysql.ColumnList
}
type ActorTable struct {
@ -418,6 +422,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
LastUpdateColumn = mysql.TimestampColumn("last_update")
allColumns = mysql.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, LastUpdateColumn}
mutableColumns = mysql.ColumnList{FirstNameColumn, LastNameColumn, LastUpdateColumn}
defaultColumns = mysql.ColumnList{LastUpdateColumn}
)
return actorTable{
@ -431,6 +436,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -516,6 +522,7 @@ type actorInfoTable struct {
AllColumns mysql.ColumnList
MutableColumns mysql.ColumnList
DefaultColumns mysql.ColumnList
}
type ActorInfoTable struct {
@ -559,6 +566,7 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable {
FilmInfoColumn = mysql.StringColumn("film_info")
allColumns = mysql.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, FilmInfoColumn}
mutableColumns = mysql.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, FilmInfoColumn}
defaultColumns = mysql.ColumnList{ActorIDColumn}
)
return actorInfoTable{
@ -572,6 +580,7 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`

View file

@ -520,6 +520,7 @@ type actorTable struct {
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
DefaultColumns postgres.ColumnList
}
type ActorTable struct {
@ -563,6 +564,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
LastUpdateColumn = postgres.TimestampColumn("last_update")
allColumns = postgres.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, LastUpdateColumn}
mutableColumns = postgres.ColumnList{FirstNameColumn, LastNameColumn, LastUpdateColumn}
defaultColumns = postgres.ColumnList{ActorIDColumn}
)
return actorTable{
@ -576,6 +578,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -660,6 +663,7 @@ type actorInfoTable struct {
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
DefaultColumns postgres.ColumnList
}
type ActorInfoTable struct {
@ -703,6 +707,7 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable {
FilmInfoColumn = postgres.StringColumn("film_info")
allColumns = postgres.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, FilmInfoColumn}
mutableColumns = postgres.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, FilmInfoColumn}
defaultColumns = postgres.ColumnList{}
)
return actorInfoTable{
@ -716,6 +721,7 @@ func newActorInfoTableImpl(schemaName, tableName, alias string) actorInfoTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -1011,6 +1017,7 @@ type allTypesTable struct {
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
DefaultColumns postgres.ColumnList
}
type AllTypesTable struct {
@ -1113,6 +1120,7 @@ func newAllTypesTableImpl(schemaName, tableName, alias string) allTypesTable {
MoodColumn = postgres.StringColumn("mood")
allColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn}
mutableColumns = postgres.ColumnList{SmallIntPtrColumn, SmallIntColumn, IntegerPtrColumn, IntegerColumn, BigIntPtrColumn, BigIntColumn, DecimalPtrColumn, DecimalColumn, NumericPtrColumn, NumericColumn, RealPtrColumn, RealColumn, DoublePrecisionPtrColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharPtrColumn, VarCharColumn, CharPtrColumn, CharColumn, TextPtrColumn, TextColumn, ByteaPtrColumn, ByteaColumn, TimestampzPtrColumn, TimestampzColumn, TimestampPtrColumn, TimestampColumn, DatePtrColumn, DateColumn, TimezPtrColumn, TimezColumn, TimePtrColumn, TimeColumn, IntervalPtrColumn, IntervalColumn, BooleanPtrColumn, BooleanColumn, PointPtrColumn, BitPtrColumn, BitColumn, BitVaryingPtrColumn, BitVaryingColumn, TsvectorPtrColumn, TsvectorColumn, UUIDPtrColumn, UUIDColumn, XMLPtrColumn, XMLColumn, JSONPtrColumn, JSONColumn, JsonbPtrColumn, JsonbColumn, IntegerArrayPtrColumn, IntegerArrayColumn, TextArrayPtrColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayPtrColumn, TextMultiDimArrayColumn, MoodPtrColumn, MoodColumn}
defaultColumns = postgres.ColumnList{SmallIntColumn, IntegerColumn, BigIntColumn, DecimalColumn, NumericColumn, RealColumn, DoublePrecisionColumn, SmallserialColumn, SerialColumn, BigserialColumn, VarCharColumn, CharColumn, TextColumn, ByteaColumn, TimestampzColumn, TimestampColumn, DateColumn, TimezColumn, TimeColumn, IntervalColumn, BooleanColumn, BitColumn, BitVaryingColumn, TsvectorColumn, UUIDColumn, XMLColumn, JSONColumn, JsonbColumn, IntegerArrayColumn, TextArrayColumn, JsonbArrayColumn, TextMultiDimArrayColumn, MoodColumn}
)
return allTypesTable{
@ -1185,6 +1193,7 @@ func newAllTypesTableImpl(schemaName, tableName, alias string) allTypesTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -1218,6 +1227,7 @@ type sampleRangesTable struct {
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
DefaultColumns postgres.ColumnList
}
type SampleRangesTable struct {
@ -1263,6 +1273,7 @@ func newSampleRangesTableImpl(schemaName, tableName, alias string) sampleRangesT
NumRangeColumn = postgres.NumericRangeColumn("num_range")
allColumns = postgres.ColumnList{DateRangeColumn, TimestampRangeColumn, TimestampzRangeColumn, Int4RangeColumn, Int8RangeColumn, NumRangeColumn}
mutableColumns = postgres.ColumnList{DateRangeColumn, TimestampRangeColumn, TimestampzRangeColumn, Int4RangeColumn, Int8RangeColumn, NumRangeColumn}
defaultColumns = postgres.ColumnList{DateRangeColumn, TimestampRangeColumn, TimestampzRangeColumn, Int4RangeColumn, Int8RangeColumn, NumRangeColumn}
)
return sampleRangesTable{
@ -1278,6 +1289,7 @@ func newSampleRangesTableImpl(schemaName, tableName, alias string) sampleRangesT
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -1310,6 +1322,7 @@ type linkTable struct {
AllColumns postgres.ColumnList
MutableColumns postgres.ColumnList
DefaultColumns postgres.ColumnList
}
type LinkTable struct {
@ -1353,6 +1366,7 @@ func newLinkTableImpl(schemaName, tableName, alias string) linkTable {
DescriptionColumn = postgres.StringColumn("description")
allColumns = postgres.ColumnList{IDColumn, URLColumn, NameColumn, DescriptionColumn}
mutableColumns = postgres.ColumnList{URLColumn, NameColumn, DescriptionColumn}
defaultColumns = postgres.ColumnList{IDColumn}
)
return linkTable{
@ -1366,6 +1380,7 @@ func newLinkTableImpl(schemaName, tableName, alias string) linkTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`

View file

@ -185,6 +185,7 @@ type actorTable struct {
AllColumns sqlite.ColumnList
MutableColumns sqlite.ColumnList
DefaultColumns sqlite.ColumnList
}
type ActorTable struct {
@ -228,6 +229,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
LastUpdateColumn = sqlite.TimestampColumn("last_update")
allColumns = sqlite.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, LastUpdateColumn}
mutableColumns = sqlite.ColumnList{FirstNameColumn, LastNameColumn, LastUpdateColumn}
defaultColumns = sqlite.ColumnList{LastUpdateColumn}
)
return actorTable{
@ -241,6 +243,7 @@ func newActorTableImpl(schemaName, tableName, alias string) actorTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`
@ -307,6 +310,7 @@ type filmListTable struct {
AllColumns sqlite.ColumnList
MutableColumns sqlite.ColumnList
DefaultColumns sqlite.ColumnList
}
type FilmListTable struct {
@ -354,6 +358,7 @@ func newFilmListTableImpl(schemaName, tableName, alias string) filmListTable {
ActorsColumn = sqlite.StringColumn("actors")
allColumns = sqlite.ColumnList{FidColumn, TitleColumn, DescriptionColumn, CategoryColumn, PriceColumn, LengthColumn, RatingColumn, ActorsColumn}
mutableColumns = sqlite.ColumnList{FidColumn, TitleColumn, DescriptionColumn, CategoryColumn, PriceColumn, LengthColumn, RatingColumn, ActorsColumn}
defaultColumns = sqlite.ColumnList{}
)
return filmListTable{
@ -371,6 +376,7 @@ func newFilmListTableImpl(schemaName, tableName, alias string) filmListTable {
AllColumns: allColumns,
MutableColumns: mutableColumns,
DefaultColumns: defaultColumns,
}
}
`