package clause

import 

type Set []Assignment

type Assignment struct {
	Column Column
	Value  interface{}
}

func ( Set) () string {
	return "SET"
}

func ( Set) ( Builder) {
	if len() > 0 {
		for ,  := range  {
			if  > 0 {
				.WriteByte(',')
			}
			.WriteQuoted(.Column)
			.WriteByte('=')
			.AddVar(, .Value)
		}
	} else {
		.WriteQuoted(Column{Name: PrimaryKey})
		.WriteByte('=')
		.WriteQuoted(Column{Name: PrimaryKey})
	}
}

// MergeClause merge assignments clauses
func ( Set) ( *Clause) {
	 := make([]Assignment, len())
	copy(, )
	.Expression = Set()
}

func ( map[string]interface{}) Set {
	 := make([]string, 0, len())
	for  := range  {
		 = append(, )
	}
	sort.Strings()

	 := make([]Assignment, len())
	for ,  := range  {
		[] = Assignment{Column: Column{Name: }, Value: []}
	}
	return 
}

func ( []string) Set {
	 := make([]Assignment, len())
	for ,  := range  {
		[] = Assignment{Column: Column{Name: }, Value: Column{Table: "excluded", Name: }}
	}
	return 
}