Skip to content

Commit

Permalink
fix: Mssql ExecutePendingChanges syntax and parameter count
Browse files Browse the repository at this point in the history
  • Loading branch information
SysIntruder committed Dec 14, 2024
1 parent d9b5b5d commit b62215a
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions drivers/mssqql.go
Original file line number Diff line number Diff line change
Expand Up @@ -507,21 +507,25 @@ func (db *MsSQL) ExecutePendingChanges(changes []models.DBDMLChange) error {

for i, column := range columnNames {
if i == 0 {
queryStr += fmt.Sprintf(" SET `%s` = %s", column, valuesPlaceholder[i])
queryStr += fmt.Sprintf(" SET %s = %s", column, valuesPlaceholder[i])
} else {
queryStr += fmt.Sprintf(", `%s` = %s", column, valuesPlaceholder[i])
queryStr += fmt.Sprintf(", %s = %s", column, valuesPlaceholder[i])
}
}

args := make([]any, len(values))

copy(args, values)

// start counting from valuesPlaceholder
// then add 1 by 1 on loop
updateCounterParams := len(valuesPlaceholder)
for i, pki := range change.PrimaryKeyInfo {
updateCounterParams += 1
if i == 0 {
queryStr += fmt.Sprintf(" WHERE `%s` = @p%d", pki.Name, i+1)
queryStr += fmt.Sprintf(" WHERE %s = @p%d", pki.Name, updateCounterParams)
} else {
queryStr += fmt.Sprintf(" AND `%s` = @p%d", pki.Name, i+1)
queryStr += fmt.Sprintf(" AND %s = @p%d", pki.Name, updateCounterParams)
}
args = append(args, pki.Value)
}
Expand All @@ -531,6 +535,8 @@ func (db *MsSQL) ExecutePendingChanges(changes []models.DBDMLChange) error {
Args: args,
}

// EZ way to log
// _ = os.WriteFile("/tmp/lazysql", []byte(queryStr+"\n"), 0644)
queries = append(queries, newQuery)
case models.DMLDeleteType:
queryStr := fmt.Sprintf("DELETE FROM %s", change.Table)
Expand All @@ -539,9 +545,9 @@ func (db *MsSQL) ExecutePendingChanges(changes []models.DBDMLChange) error {

for i, pki := range change.PrimaryKeyInfo {
if i == 0 {
queryStr += fmt.Sprintf(" WHERE `%s` = @p%d", pki.Name, i+1)
queryStr += fmt.Sprintf(" WHERE %s = @p%d", pki.Name, i+1)
} else {
queryStr += fmt.Sprintf(" AND `%s` = @p%d", pki.Name, i+1)
queryStr += fmt.Sprintf(" AND %s = @p%d", pki.Name, i+1)
}
deleteArgs[i] = pki.Value
}
Expand Down

0 comments on commit b62215a

Please sign in to comment.