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  }