package mysqldialect

import (
	
	

	
	
	
)

var timeType = reflect.TypeOf((*time.Time)(nil)).Elem()

func ( reflect.Type) schema.AppenderFunc {
	if  == timeType {
		return appendTimeValue
	}
	return schema.Appender(, customAppender)
}

func ( reflect.Type) schema.AppenderFunc {
	switch .Kind() {
	case reflect.Array, reflect.Slice, reflect.Map, reflect.Struct:
		return appendJSONValue
	}
	return nil
}

func ( schema.Formatter,  []byte,  reflect.Value) []byte {
	return appendTime(, .Interface().(time.Time))
}

func ( []byte,  time.Time) []byte {
	 = append(, '\'')
	 = .UTC().AppendFormat(, "2006-01-02 15:04:05.999999")
	 = append(, '\'')
	return 
}

func ( schema.Formatter,  []byte,  reflect.Value) []byte {
	,  := bunjson.Marshal(.Interface())
	if  != nil {
		return dialect.AppendError(, )
	}

	if len() > 0 && [len()-1] == '\n' {
		 = [:len()-1]
	}

	return appendJSON(, )
}

func (,  []byte) []byte {
	 = append(, '\'')

	for ,  := range  {
		switch  {
		case '\'':
			 = append(, "''"...)
		case '\\':
			 = append(, `\\`...)
		default:
			 = append(, )
		}
	}

	 = append(, '\'')

	return 
}