diff --git a/templates/singleton/boil_queries.tpl b/templates/singleton/boil_queries.tpl index 3e9ebb8..416de3d 100644 --- a/templates/singleton/boil_queries.tpl +++ b/templates/singleton/boil_queries.tpl @@ -82,7 +82,13 @@ func deleteOneToOneConflictsBeforeMerge(tx boil.Executor, conflict conflictingUn func deleteOneToManyConflictsBeforeMerge(tx boil.Executor, conflict conflictingUniqueKey, primaryID uint64, secondaryID uint64) error { conflictingColumns := strmangle.SetComplement(conflict.columns, []string{conflict.objectIdColumn}) - + var objectIDIndex int + for i, column := range conflict.columns { + if column == conflict.objectIdColumn { + objectIDIndex = i + break + } + } query := fmt.Sprintf( "SELECT %s FROM %s WHERE %s IN (%s) GROUP BY %s HAVING count(distinct %s) > 1", strings.Join(conflictingColumns, ","), conflict.table, conflict.objectIdColumn, @@ -137,7 +143,7 @@ func deleteOneToManyConflictsBeforeMerge(tx boil.Executor, conflict conflictingU //There could be multiple conflicting rows between ObjectIDs. In the SELECT query we grab each row and their column // keys to be deleted here in a loop. for _, rowToDelete := range rowsToRemove { - rowToDelete = append(rowToDelete, secondaryID) + rowToDelete = insert(rowToDelete, objectIDIndex, secondaryID) _, err = tx.Exec(query, rowToDelete...) if err != nil { return errors.Err(err) @@ -146,6 +152,10 @@ func deleteOneToManyConflictsBeforeMerge(tx boil.Executor, conflict conflictingU return nil } +func insert(slice []interface{}, index int, value interface{}) []interface{} { + return append(slice[:index], append([]interface{}{value}, slice[index:]...)...) +} + func checkMerge(tx boil.Executor, foreignKeys []foreignKey) error { uniqueColumns := []interface{}{} uniqueColumnNames := map[string]bool{}