package mysql import ( "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...) res, err := q.Exec() if err != nil { return nil, err } lastID, err := res.LastInsertId() if err == nil && len(pKey) <= 1 { return lastID, nil } keyMap := mydb.Cond{} for i := range columnNames { for j := 0; j < len(pKey); j++ { if pKey[j] == columnNames[i] { keyMap[pKey[j]] = columnValues[i] } } } // There was an auto column among primary keys, let's search for it. if lastID > 0 { for j := 0; j < len(pKey); j++ { if keyMap[pKey[j]] == nil { keyMap[pKey[j]] = lastID } } } return keyMap, nil }