60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package sqlite
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/jinzhu/gorm/dialects/common/sqlbuilder"
|
|
)
|
|
|
|
// 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) {
|
|
s, args, defaultFieldsSlice, err := sqlbuilder.BuildInsertSQL(tx)
|
|
|
|
if err == nil {
|
|
result, err := dialect.DB.Exec(s.String(), args...)
|
|
|
|
if err == nil {
|
|
var lastInsertID int64
|
|
tx.RowsAffected, _ = result.RowsAffected()
|
|
lastInsertID, err = result.LastInsertId()
|
|
if len(defaultFieldsSlice) == int(tx.RowsAffected) {
|
|
startID := lastInsertID - tx.RowsAffected + 1
|
|
for i, defaultFields := range defaultFieldsSlice {
|
|
if len(defaultFields) > 0 {
|
|
tx.AddError(defaultFields[0].Set(startID + int64(i)))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|