dialect.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package migrations
  2. import "fmt"
  3. type Dialect interface {
  4. DriverName() string
  5. ToDBTypeSql(columnType ColumnType, length int) string
  6. TableCheckSql(tableName string) (string, []interface{})
  7. }
  8. type Sqlite3 struct {
  9. }
  10. type Mysql struct {
  11. }
  12. func (db *Sqlite3) DriverName() string {
  13. return SQLITE
  14. }
  15. func (db *Mysql) DriverName() string {
  16. return MYSQL
  17. }
  18. func (db *Sqlite3) ToDBTypeSql(columnType ColumnType, length int) string {
  19. switch columnType {
  20. case DB_TYPE_STRING:
  21. return "TEXT"
  22. }
  23. panic("Unsupported db type")
  24. }
  25. func (db *Mysql) ToDBTypeSql(columnType ColumnType, length int) string {
  26. switch columnType {
  27. case DB_TYPE_STRING:
  28. return fmt.Sprintf("NVARCHAR(%d)", length)
  29. }
  30. panic("Unsupported db type")
  31. }
  32. func (db *Sqlite3) TableCheckSql(tableName string) (string, []interface{}) {
  33. args := []interface{}{tableName}
  34. return "SELECT name FROM sqlite_master WHERE type='table' and name = ?", args
  35. }
  36. func (db *Mysql) TableCheckSql(tableName string) (string, []interface{}) {
  37. args := []interface{}{"grafana", tableName}
  38. sql := "SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=?"
  39. return sql, args
  40. }