WIP: Insert sets PK

This commit is contained in:
2026-05-21 21:57:44 +02:00
parent 4726204413
commit 5d607c3ecb
4 changed files with 86 additions and 69 deletions
+31 -28
View File
@@ -25,13 +25,14 @@ func ExecuteDDL(conn *simpleorm.DBConnection, orm *simpleorm.ORM) {
} }
type Exec[T any] interface { type Exec[T any] interface {
Execute(conn *simpleorm.DBConnection) ([]T, error) Execute(conn *simpleorm.DBConnection) error
} }
type Select[T any] struct { type Select[T any] struct {
target schema.Table target schema.Table
whereStmt string whereStmt string
args []any args []any
result []T
} }
func CreateSelect[T any](orm *simpleorm.ORM, whereStmt string, args ...any) (Select[T], error) { func CreateSelect[T any](orm *simpleorm.ORM, whereStmt string, args ...any) (Select[T], error) {
@@ -43,10 +44,14 @@ func CreateSelect[T any](orm *simpleorm.ORM, whereStmt string, args ...any) (Sel
return Select[T]{target: *table, whereStmt: whereStmt, args: args}, nil return Select[T]{target: *table, whereStmt: whereStmt, args: args}, nil
} }
func (s Select[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) { func (s Select[T]) GetResult() []T {
return s.result
}
func (s Select[T]) Execute(conn *simpleorm.DBConnection) error {
dml, err := s.target.GetSelectDML() dml, err := s.target.GetSelectDML()
if err != nil { if err != nil {
return []T{}, err return err
} }
if s.whereStmt != "" { if s.whereStmt != "" {
@@ -57,7 +62,7 @@ func (s Select[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
stmt, err := conn.Prepare(dml) stmt, err := conn.Prepare(dml)
if err != nil { if err != nil {
return nil, err return err
} }
defer stmt.Close() defer stmt.Close()
@@ -81,17 +86,15 @@ func (s Select[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
} }
if err != nil { if err != nil {
return nil, err return err
} }
rowContainer := createSelectResultContainer(s.target) rowContainer := createSelectResultContainer(s.target)
var results []T
for rows.Next() { for rows.Next() {
err = rows.Scan(rowContainer...) err = rows.Scan(rowContainer...)
if err != nil { if err != nil {
return nil, err return err
} }
targetType := s.target.Type targetType := s.target.Type
@@ -106,10 +109,10 @@ func (s Select[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
targetField.Set(decoded) targetField.Set(decoded)
} }
parsedObj := reflect.Indirect(parsedResult).Interface().(T) parsedObj := reflect.Indirect(parsedResult).Interface().(T)
results = append(results, parsedObj) s.result = append(s.result, parsedObj)
} }
return results, nil return nil
} }
type Insert[T any] struct { type Insert[T any] struct {
@@ -127,10 +130,10 @@ func NewInsert[T any](orm *simpleorm.ORM, toInsert ...T) (Insert[T], error) {
return Insert[T]{target: *table, toInsert: toInsert}, nil return Insert[T]{target: *table, toInsert: toInsert}, nil
} }
func (ins Insert[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) { func (ins Insert[T]) Execute(conn *simpleorm.DBConnection) error {
dml, err := ins.target.GetInsertDML(len(ins.toInsert)) dml, err := ins.target.GetInsertDML(len(ins.toInsert))
if err != nil { if err != nil {
return []T{}, err return err
} }
var params []any var params []any
@@ -148,7 +151,7 @@ func (ins Insert[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
stmt, err := conn.Prepare(dml) stmt, err := conn.Prepare(dml)
if err != nil { if err != nil {
return []T{}, err return err
} }
defer stmt.Close() defer stmt.Close()
@@ -158,9 +161,9 @@ func (ins Insert[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
rowsAffected, _ := result.RowsAffected() rowsAffected, _ := result.RowsAffected()
log.LogInfo("Inserted %s row", rowsAffected) log.LogInfo("Inserted %s row", rowsAffected)
ins.lastInsertId, _ = result.LastInsertId() ins.lastInsertId, _ = result.LastInsertId()
log.LogInfo("Last ID: %s", ins.lastInsertId) log.LogInfo("Last inserted ID: %s", ins.lastInsertId)
} }
return []T{}, nil return nil
} }
func (ins Insert[T]) LastInsertId() int64 { func (ins Insert[T]) LastInsertId() int64 {
@@ -181,17 +184,17 @@ func NewUpdate[T any](orm *simpleorm.ORM, toUpdate T) (Update[T], error) {
return Update[T]{target: *table, toUpdate: toUpdate}, nil return Update[T]{target: *table, toUpdate: toUpdate}, nil
} }
func (u Update[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) { func (u Update[T]) Execute(conn *simpleorm.DBConnection) error {
dml, err := u.target.GetUpdateDML() dml, err := u.target.GetUpdateDML()
if err != nil { if err != nil {
return []T{}, err return err
} }
params := prepareParams(u.toUpdate, u.target) params := prepareParams(u.toUpdate, u.target)
pkCols, err := getPk(u.toUpdate, u.target) pkCols, err := getPk(u.toUpdate, u.target)
if err != nil { if err != nil {
return []T{}, err return err
} }
// Put the pks back at the end // Put the pks back at the end
for _, pk := range pkCols { for _, pk := range pkCols {
@@ -202,19 +205,19 @@ func (u Update[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
stmt, err := conn.Prepare(dml) stmt, err := conn.Prepare(dml)
if err != nil { if err != nil {
return []T{}, err return err
} }
defer stmt.Close() defer stmt.Close()
result, err := stmt.Exec(params...) result, err := stmt.Exec(params...)
if err != nil { if err != nil {
return []T{}, err return err
} else { } else {
rowsAffected, _ := result.RowsAffected() rowsAffected, _ := result.RowsAffected()
log.LogInfo("Updated %s row", rowsAffected) log.LogInfo("Updated %s row", rowsAffected)
result.LastInsertId() result.LastInsertId()
} }
return []T{u.toUpdate}, nil return nil
} }
type Delete[T any] struct { type Delete[T any] struct {
@@ -222,7 +225,7 @@ type Delete[T any] struct {
toDelete []T toDelete []T
} }
func NewDelete[T any](orm *simpleorm.ORM, toDelete []T) (Delete[T], error) { func NewDelete[T any](orm *simpleorm.ORM, toDelete ...T) (Delete[T], error) {
table, ok := orm.Cache().Get(reflect.TypeFor[T]().Name()) table, ok := orm.Cache().Get(reflect.TypeFor[T]().Name())
if !ok { if !ok {
return Delete[T]{}, errors.New("Failed to get table from schema cache") return Delete[T]{}, errors.New("Failed to get table from schema cache")
@@ -231,11 +234,11 @@ func NewDelete[T any](orm *simpleorm.ORM, toDelete []T) (Delete[T], error) {
return Delete[T]{target: *table, toDelete: toDelete}, nil return Delete[T]{target: *table, toDelete: toDelete}, nil
} }
func (d Delete[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) { func (d Delete[T]) Execute(conn *simpleorm.DBConnection) error {
count := len(d.toDelete) count := len(d.toDelete)
dml, err := d.target.GetDeleteDML(count) dml, err := d.target.GetDeleteDML(count)
if err != nil { if err != nil {
return []T{}, err return err
} }
var params []any var params []any
@@ -243,7 +246,7 @@ func (d Delete[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
for _, del := range d.toDelete { for _, del := range d.toDelete {
pkCols, err := getPk(del, d.target) pkCols, err := getPk(del, d.target)
if err != nil { if err != nil {
return []T{}, err return err
} }
for _, pk := range pkCols { for _, pk := range pkCols {
@@ -255,19 +258,19 @@ func (d Delete[T]) Execute(conn *simpleorm.DBConnection) ([]T, error) {
stmt, err := conn.Prepare(dml) stmt, err := conn.Prepare(dml)
if err != nil { if err != nil {
return []T{}, err return err
} }
defer stmt.Close() defer stmt.Close()
result, err := stmt.Exec(params...) result, err := stmt.Exec(params...)
if err != nil { if err != nil {
return []T{}, err return err
} else { } else {
rowsAffected, _ := result.RowsAffected() rowsAffected, _ := result.RowsAffected()
log.LogInfo("Deleted %s row", rowsAffected) log.LogInfo("Deleted %s row", rowsAffected)
} }
return d.toDelete, nil return nil
} }
+8 -6
View File
@@ -31,11 +31,12 @@ func (r *Repository[T]) SelectAll() []*T {
return []*T{} return []*T{}
} }
selecRes, err := selectExec.Execute(r.conn) err = selectExec.Execute(r.conn)
if err != nil { if err != nil {
log.LogError("Failed to load projects: %s", err) log.LogError("Failed to load projects: %s", err)
return []*T{} return []*T{}
} }
selecRes := selectExec.GetResult()
res := make([]*T, 0, len(selecRes)) res := make([]*T, 0, len(selecRes))
for i := range selecRes { for i := range selecRes {
@@ -75,7 +76,8 @@ func (r *Repository[T]) SelectByPk(pks ...any) *T {
return nil return nil
} }
res, err := selectExec.Execute(r.conn) err = selectExec.Execute(r.conn)
res := selectExec.GetResult()
if err != nil { if err != nil {
log.LogError("Failed to load entity: %s", err) log.LogError("Failed to load entity: %s", err)
return nil return nil
@@ -97,7 +99,7 @@ func (r *Repository[T]) Save(entity T) (*T, error) {
log.LogError("Failed to create insert execution: %s", err) log.LogError("Failed to create insert execution: %s", err)
return nil, errors.New("") return nil, errors.New("")
} }
if _, err := insertExec.Execute(r.conn); err != nil { if err = insertExec.Execute(r.conn); err != nil {
log.LogError("Insert failed for entity: %s", entity) log.LogError("Insert failed for entity: %s", entity)
} }
@@ -111,7 +113,7 @@ func (r *Repository[T]) Save(entity T) (*T, error) {
} }
_, err = updateExec.Execute(r.conn) err = updateExec.Execute(r.conn)
if err != nil { if err != nil {
log.LogError("Update failed: %s", err) log.LogError("Update failed: %s", err)
return nil, errors.New("") return nil, errors.New("")
@@ -122,12 +124,12 @@ func (r *Repository[T]) Save(entity T) (*T, error) {
} }
func (r *Repository[T]) Delete(entity T) { func (r *Repository[T]) Delete(entity T) {
deleteExec, err := exec.NewDelete[T](r.orm, []T{entity}) deleteExec, err := exec.NewDelete[T](r.orm, entity)
if err != nil { if err != nil {
log.LogError("Failed to create delete execution: %s", err) log.LogError("Failed to create delete execution: %s", err)
return return
} }
_, err = deleteExec.Execute(r.conn) err = deleteExec.Execute(r.conn)
if err != nil { if err != nil {
log.LogError("Delete failed: %s", err) log.LogError("Delete failed: %s", err)
return return
+41 -29
View File
@@ -36,14 +36,14 @@ func TestSelectEmpty(t *testing.T) {
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("Select failure. %s", err) log.LogError("Select failure. %s", err)
t.Fail() t.Fail()
return return
} }
if len(res) > 0 { if len(selectExec.GetResult()) > 0 {
log.LogError("Expected empty result.") log.LogError("Expected empty result.")
t.Fail() t.Fail()
return return
@@ -61,7 +61,7 @@ func TestInsertAndSelectSingle(t *testing.T) {
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestInsertAndSelectSingle setup failed: %s", err) log.LogError("TestInsertAndSelectSingle setup failed: %s", err)
t.Fail() t.Fail()
@@ -76,16 +76,18 @@ func TestInsertAndSelectSingle(t *testing.T) {
} }
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertAndSelectSingle insert failed: %s", err) log.LogError("TestInsertAndSelectSingle insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
// THEN // THEN
res := selectExec.GetResult()
if err != nil { if err != nil {
log.LogError("TestInsertAndSelectSingle failure. %s", err) log.LogError("TestInsertAndSelectSingle failure. %s", err)
t.Fail() t.Fail()
@@ -116,7 +118,7 @@ func TestInsertSelectWithCompositePk(t *testing.T) {
testObj := TestWithCompositePk{ID: 12, Name: "Test"} testObj := TestWithCompositePk{ID: 12, Name: "Test"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestInsertSelectWithCompositePk setup failed: %s", err) log.LogError("TestInsertSelectWithCompositePk setup failed: %s", err)
t.Fail() t.Fail()
@@ -131,14 +133,15 @@ func TestInsertSelectWithCompositePk(t *testing.T) {
} }
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertSelectWithCompositePk insert failed: %s", err) log.LogError("TestInsertSelectWithCompositePk insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
res := selectExec.GetResult()
// THEN // THEN
if err != nil { if err != nil {
@@ -173,14 +176,14 @@ func TestInsertMultipleAndSelectWithParam(t *testing.T) {
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
testObjSecond := Test{Int64Field: 12, IntField: 54, StringField: "fdsa"} testObjSecond := Test{Int64Field: 12, IntField: 54, StringField: "fdsa"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err)
t.Fail() t.Fail()
return return
} }
insertSecond, err := exec.NewInsert(orm, testObjSecond) insertSecond, err := exec.NewInsert(orm, &testObjSecond)
if err != nil { if err != nil {
log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err)
t.Fail() t.Fail()
@@ -196,21 +199,22 @@ func TestInsertMultipleAndSelectWithParam(t *testing.T) {
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertMultipleAndSelectWithParam first insert failed: %s", err) log.LogError("TestInsertMultipleAndSelectWithParam first insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
_, err = insertSecond.Execute(conn) err = insertSecond.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertMultipleAndSelectWithParam second insert failed: %s", err) log.LogError("TestInsertMultipleAndSelectWithParam second insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
res := selectExec.GetResult()
// THEN // THEN
if err != nil { if err != nil {
@@ -243,7 +247,7 @@ func TestInsertAndUpdate(t *testing.T) {
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestInsertAndUpdate setup failed: %s", err) log.LogError("TestInsertAndUpdate setup failed: %s", err)
t.Fail() t.Fail()
@@ -259,14 +263,16 @@ func TestInsertAndUpdate(t *testing.T) {
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertAndUpdate insert failed: %s", err) log.LogError("TestInsertAndUpdate insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
res := selectExec.GetResult()
if err != nil { if err != nil {
log.LogError("TestInsertAndUpdate re-select failed: %s", err) log.LogError("TestInsertAndUpdate re-select failed: %s", err)
t.Fail() t.Fail()
@@ -285,8 +291,9 @@ func TestInsertAndUpdate(t *testing.T) {
return return
} }
_, err = updateExec.Execute(conn) err = updateExec.Execute(conn)
res, selectErr := selectExec.Execute(conn) selectErr := selectExec.Execute(conn)
res = selectExec.GetResult()
// THEN // THEN
if err != nil { if err != nil {
@@ -326,14 +333,14 @@ func TestInsertAndDelete(t *testing.T) {
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestInsertAndDelete setup failed: %s", err) log.LogError("TestInsertAndDelete setup failed: %s", err)
t.Fail() t.Fail()
return return
} }
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestInsertAndDelete setup failed: %s", err) log.LogError("TestInsertAndDelete setup failed: %s", err)
t.Fail() t.Fail()
@@ -347,7 +354,8 @@ func TestInsertAndDelete(t *testing.T) {
return return
} }
selectRes, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
selectRes := selectExec.GetResult()
if err != nil { if err != nil {
log.LogError("TestInsertAndDelete setup failed. %s", err) log.LogError("TestInsertAndDelete setup failed. %s", err)
@@ -358,7 +366,7 @@ func TestInsertAndDelete(t *testing.T) {
deleteExec, err := exec.NewDelete(orm, selectRes) deleteExec, err := exec.NewDelete(orm, selectRes)
// WHEN // WHEN
_, err = deleteExec.Execute(conn) err = deleteExec.Execute(conn)
// THEN // THEN
if err != nil { if err != nil {
@@ -367,7 +375,9 @@ func TestInsertAndDelete(t *testing.T) {
return return
} }
selectRes, err = selectExec.Execute(conn) err = selectExec.Execute(conn)
selectRes = selectExec.GetResult()
if len(selectRes) != 0 { if len(selectRes) != 0 {
log.LogError("TestInsertAndDelete test failed. Expected: 0, Actual: %s", len(selectRes)) log.LogError("TestInsertAndDelete test failed. Expected: 0, Actual: %s", len(selectRes))
t.Fail() t.Fail()
@@ -386,7 +396,7 @@ func TestBoolInsertAndSelectSingle(t *testing.T) {
testObj := TestWithBool{BoolField: true} testObj := TestWithBool{BoolField: true}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestBoolInsertAndSelectSingle setup failed: %s", err) log.LogError("TestBoolInsertAndSelectSingle setup failed: %s", err)
t.Fail() t.Fail()
@@ -401,14 +411,15 @@ func TestBoolInsertAndSelectSingle(t *testing.T) {
} }
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestBoolInsertAndSelectSingle insert failed: %s", err) log.LogError("TestBoolInsertAndSelectSingle insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
res := selectExec.GetResult()
// THEN // THEN
if err != nil { if err != nil {
@@ -441,7 +452,7 @@ func TestTimeInsertAndSelectSingle(t *testing.T) {
now := time.Now().UnixMilli() now := time.Now().UnixMilli()
testObj := TestWithTime{TimeField: now} testObj := TestWithTime{TimeField: now}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestTimeInsertAndSelectSingle setup failed: %s", err) log.LogError("TestTimeInsertAndSelectSingle setup failed: %s", err)
t.Fail() t.Fail()
@@ -456,14 +467,15 @@ func TestTimeInsertAndSelectSingle(t *testing.T) {
} }
// WHEN // WHEN
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
if err != nil { if err != nil {
log.LogError("TestTimeInsertAndSelectSingle insert failed: %s", err) log.LogError("TestTimeInsertAndSelectSingle insert failed: %s", err)
t.Fail() t.Fail()
return return
} }
res, err := selectExec.Execute(conn) err = selectExec.Execute(conn)
res := selectExec.GetResult()
// THEN // THEN
if err != nil { if err != nil {
+6 -6
View File
@@ -26,13 +26,13 @@ func TestRepoSelectAll(t *testing.T) {
defer cleanUp("test.db", conn) defer cleanUp("test.db", conn)
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestRepoSelectAll setup failed: %s", err) log.LogError("TestRepoSelectAll setup failed: %s", err)
t.Fail() t.Fail()
return return
} }
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
repo := repository.NewRepository[*Test](conn, orm) repo := repository.NewRepository[*Test](conn, orm)
// WHEN // WHEN
@@ -52,13 +52,13 @@ func TestRepoSelectByPk(t *testing.T) {
defer cleanUp("test.db", conn) defer cleanUp("test.db", conn)
testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestRepoSelectByPk setup failed: %s", err) log.LogError("TestRepoSelectByPk setup failed: %s", err)
t.Fail() t.Fail()
return return
} }
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
repo := repository.NewRepository[*Test](conn, orm) repo := repository.NewRepository[*Test](conn, orm)
// WHEN // WHEN
@@ -78,13 +78,13 @@ func TestRepoSelectByCompundPk(t *testing.T) {
defer cleanUp("test.db", conn) defer cleanUp("test.db", conn)
testObj := TestWithCompositePk{ID: 42069, Name: "Test"} testObj := TestWithCompositePk{ID: 42069, Name: "Test"}
insertExec, err := exec.NewInsert(orm, testObj) insertExec, err := exec.NewInsert(orm, &testObj)
if err != nil { if err != nil {
log.LogError("TestRepoSelectByCompundPk setup failed: %s", err) log.LogError("TestRepoSelectByCompundPk setup failed: %s", err)
t.Fail() t.Fail()
return return
} }
_, err = insertExec.Execute(conn) err = insertExec.Execute(conn)
repo := repository.NewRepository[*TestWithCompositePk](conn, orm) repo := repository.NewRepository[*TestWithCompositePk](conn, orm)
// WHEN // WHEN