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 }