mydb/adapter/sqlite/collection.go

50 lines
896 B
Go
Raw Normal View History

2023-09-18 15:15:42 +08:00
package sqlite
import (
"database/sql"
"git.hexq.cn/tiglog/mydb"
"git.hexq.cn/tiglog/mydb/internal/sqladapter"
"git.hexq.cn/tiglog/mydb/internal/sqlbuilder"
)
type collectionAdapter struct {
}
func (*collectionAdapter) Insert(col sqladapter.Collection, item interface{}) (interface{}, error) {
columnNames, columnValues, err := sqlbuilder.Map(item, nil)
if err != nil {
return nil, err
}
pKey, err := col.PrimaryKeys()
if err != nil {
return nil, err
}
q := col.SQL().InsertInto(col.Name()).
Columns(columnNames...).
Values(columnValues...)
var res sql.Result
if res, err = q.Exec(); err != nil {
return nil, err
}
if len(pKey) <= 1 {
return res.LastInsertId()
}
keyMap := mydb.Cond{}
for i := range columnNames {
for j := 0; j < len(pKey); j++ {
if pKey[j] == columnNames[i] {
keyMap[pKey[j]] = columnValues[i]
}
}
}
return keyMap, nil
}