codegen: CreateUpdateDelete test no longer creates an "Update" block if there's no updateable fields
This commit is contained in:
@@ -76,3 +76,21 @@ func (t Table) HasSoftDelete() bool {
|
||||
}
|
||||
return hasIsDeleted && hasDeletedAt
|
||||
}
|
||||
|
||||
// GetUpdateableColumns returns the columns that should be written to by an "update" operation.
|
||||
func (t Table) GetUpdateableColumns() (ret []Column) {
|
||||
hasCreatedAt, _ := t.HasAutoTimestamps()
|
||||
for _, col := range t.Columns {
|
||||
if col.Name == "rowid" || col.IsPrimaryKey {
|
||||
continue // Rowid / primary key is never updateable
|
||||
}
|
||||
if col.Name == "created_at" && hasCreatedAt {
|
||||
continue // Update shouldn't write `created_at`
|
||||
}
|
||||
if t.HasSoftDelete() && (col.Name == "is_deleted" || col.Name == "deleted_at") {
|
||||
continue // Soft-delete state is managed by SoftDeleteXyz(), not by updates
|
||||
}
|
||||
ret = append(ret, col)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
34
pkg/schema/table_test.go
Normal file
34
pkg/schema/table_test.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package schema
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestTableGetUpdateableColumns(t *testing.T) {
|
||||
tbl := Table{
|
||||
Columns: []Column{
|
||||
{Name: "rowid"},
|
||||
{Name: "version", Type: "integer", IsPrimaryKey: true},
|
||||
{Name: "created_at", Type: "integer"},
|
||||
{Name: "updated_at", Type: "integer"},
|
||||
{Name: "is_deleted", Type: "integer"},
|
||||
{Name: "deleted_at", Type: "integer"},
|
||||
{Name: "owner_id", Type: "integer", IsForeignKey: true},
|
||||
{Name: "name", Type: "text"},
|
||||
},
|
||||
}
|
||||
|
||||
gotColumns := tbl.GetUpdateableColumns()
|
||||
got := make([]string, 0, len(gotColumns))
|
||||
for _, col := range gotColumns {
|
||||
got = append(got, col.Name)
|
||||
}
|
||||
|
||||
want := []string{"updated_at", "owner_id", "name"}
|
||||
if len(got) != len(want) {
|
||||
t.Fatalf("GetUpdateableColumns() = %v, want %v", got, want)
|
||||
}
|
||||
for i := range want {
|
||||
if got[i] != want[i] {
|
||||
t.Fatalf("GetUpdateableColumns() = %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user