gorm/dialects/sqlite/sqlite.go
2018-02-28 00:00:09 +08:00

105 lines
2.1 KiB
Go

package sqlite
import (
"bytes"
"database/sql"
"fmt"
"github.com/jinzhu/gorm"
"github.com/jinzhu/gorm/model"
)
// Dialect Sqlite3 Dialect for GORM
type Dialect struct {
DB *sql.DB
}
// Quote quote for value
func (dialect Dialect) Quote(name string) string {
return fmt.Sprintf(`"%s"`, name)
}
// Insert insert
func (dialect *Dialect) Insert(tx *gorm.DB) (err error) {
var (
args []interface{}
assignmentsChan = model.GetAssignments(tx)
tableNameChan = model.GetTable(tx)
)
s := bytes.NewBufferString("INSERT INTO ")
s.WriteString(dialect.Quote(<-tableNameChan))
if assignments := <-assignmentsChan; len(assignments) > 0 {
columns := []string{}
// Write columns (column1, column2, column3)
s.WriteString(" (")
// Write values (v1, v2, v3), (v2-1, v2-2, v2-3)
valueBuffer := bytes.NewBufferString("VALUES ")
for idx, fields := range assignments {
if idx != 0 {
valueBuffer.WriteString(",")
}
valueBuffer.WriteString(" (")
for j, field := range fields {
if idx == 0 {
columns = append(columns, field.Field.DBName)
if j != 0 {
s.WriteString(", ")
}
s.WriteString(dialect.Quote(field.Field.DBName))
}
if j != 0 {
valueBuffer.WriteString(", ")
}
valueBuffer.WriteString("?")
if field.IsBlank {
if field.Field.HasDefaultValue {
args = append(args, field.Field.DefaultValue)
} else {
args = append(args, nil)
}
} else {
args = append(args, field.Value.Interface())
}
}
valueBuffer.WriteString(")")
}
s.WriteString(") ")
_, err = valueBuffer.WriteTo(s)
} else {
s.WriteString(" DEFAULT VALUES")
}
fmt.Println(s.String())
fmt.Printf("%#v \n", args)
if result, err := dialect.DB.Exec(s.String(), args...); err == nil {
tx.RowsAffected, _ = result.RowsAffected()
} else {
fmt.Println(err)
}
return
}
// Query query
func (*Dialect) Query(tx *gorm.DB) error {
return nil
}
// Update update
func (*Dialect) Update(tx *gorm.DB) error {
return nil
}
// Delete delete
func (*Dialect) Delete(tx *gorm.DB) error {
return nil
}