sqlite.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package sqlite
  2. import (
  3. "database/sql"
  4. "github.com/jinzhu/gorm"
  5. "github.com/jinzhu/gorm/callbacks"
  6. "github.com/jinzhu/gorm/migrator"
  7. "github.com/jinzhu/gorm/schema"
  8. _ "github.com/mattn/go-sqlite3"
  9. )
  10. type Dialector struct {
  11. DSN string
  12. }
  13. func Open(dsn string) gorm.Dialector {
  14. return &Dialector{DSN: dsn}
  15. }
  16. func (dialector Dialector) Initialize(db *gorm.DB) (err error) {
  17. // register callbacks
  18. callbacks.RegisterDefaultCallbacks(db)
  19. db.DB, err = sql.Open("sqlite3", dialector.DSN)
  20. return
  21. }
  22. func (dialector Dialector) Migrator(db *gorm.DB) gorm.Migrator {
  23. return Migrator{migrator.Migrator{Config: migrator.Config{
  24. DB: db,
  25. Dialector: dialector,
  26. CreateIndexAfterCreateTable: true,
  27. }}}
  28. }
  29. func (dialector Dialector) BindVar(stmt *gorm.Statement, v interface{}) string {
  30. return "?"
  31. }
  32. func (dialector Dialector) QuoteChars() [2]byte {
  33. return [2]byte{'`', '`'} // `name`
  34. }
  35. func (dialector Dialector) DataTypeOf(field *schema.Field) string {
  36. switch field.DataType {
  37. case schema.Bool:
  38. return "numeric"
  39. case schema.Int, schema.Uint:
  40. if field.AutoIncrement {
  41. // https://www.sqlite.org/autoinc.html
  42. return "integer PRIMARY KEY AUTOINCREMENT"
  43. } else {
  44. return "integer"
  45. }
  46. case schema.Float:
  47. return "real"
  48. case schema.String, schema.Time:
  49. return "text"
  50. case schema.Bytes:
  51. return "blob"
  52. }
  53. return ""
  54. }