github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-mysql/driver/override/main/singleton/mysql_upsert.go.tpl (about) 1 // buildUpsertQueryMySQL builds a SQL statement string using the upsertData provided. 2 func buildUpsertQueryMySQL(dia drivers.Dialect, tableName string, update, whitelist []string) string { 3 whitelist = strmangle.IdentQuoteSlice(dia.LQ, dia.RQ, whitelist) 4 tableName = strmangle.IdentQuote(dia.LQ, dia.RQ, tableName) 5 6 buf := strmangle.GetBuffer() 7 defer strmangle.PutBuffer(buf) 8 9 var columns string 10 if len(whitelist) != 0 { 11 columns = strings.Join(whitelist, ",") 12 } 13 14 if len(update) == 0 { 15 fmt.Fprintf( 16 buf, 17 "INSERT IGNORE INTO %s (%s) VALUES (%s)", 18 tableName, 19 columns, 20 strmangle.Placeholders(dia.UseIndexPlaceholders, len(whitelist), 1, 1), 21 ) 22 return buf.String() 23 } 24 25 fmt.Fprintf( 26 buf, 27 "INSERT INTO %s (%s) VALUES (%s) ON DUPLICATE KEY UPDATE ", 28 tableName, 29 columns, 30 strmangle.Placeholders(dia.UseIndexPlaceholders, len(whitelist), 1, 1), 31 ) 32 33 for i, v := range update { 34 if i != 0 { 35 buf.WriteByte(',') 36 } 37 quoted := strmangle.IdentQuote(dia.LQ, dia.RQ, v) 38 buf.WriteString(quoted) 39 buf.WriteString(" = VALUES(") 40 buf.WriteString(quoted) 41 buf.WriteByte(')') 42 } 43 44 return buf.String() 45 }