Files
mayfly-go/server/internal/db/dbm/dbi/dialect.go

64 lines
1.6 KiB
Go
Raw Normal View History

package dbi
2022-10-15 17:38:34 +08:00
2023-05-24 12:32:17 +08:00
import (
2024-01-06 22:36:50 +08:00
"database/sql"
2023-05-24 12:32:17 +08:00
)
2024-01-09 17:31:21 +08:00
type DataType string
const (
DataTypeString DataType = "string"
DataTypeNumber DataType = "number"
DataTypeDate DataType = "date"
DataTypeTime DataType = "time"
DataTypeDateTime DataType = "datetime"
)
const (
// -1. 无操作
DuplicateStrategyNone = -1
// 1. 忽略
DuplicateStrategyIgnore = 1
// 2. 更新
DuplicateStrategyUpdate = 2
)
type DbCopyTable struct {
Id uint64 `json:"id"`
Db string `json:"db" `
TableName string `json:"tableName"`
CopyData bool `json:"copyData"` // 是否复制数据
}
// 数据转换器
type DataConverter interface {
// 获取数据对应的类型
// @param dbColumnType 数据库原始列类型如varchar等
GetDataType(dbColumnType string) DataType
// 根据数据类型格式化指定数据
FormatData(dbColumnValue any, dataType DataType) string
// 根据数据类型解析数据为符合要求的指定类型等
ParseData(dbColumnValue any, dataType DataType) any
}
2022-10-16 14:22:19 +08:00
// -----------------------------------元数据接口定义------------------------------------------
2024-03-11 20:04:20 +08:00
// 数据库方言 用于获取元信息接口、批量插入等各个数据库方言不一致的实现方式
type Dialect interface {
2024-03-11 20:04:20 +08:00
// 获取元数据信息接口
GetMetaData() MetaData
// GetDbProgram 获取数据库程序模块,用于数据库备份与恢复
GetDbProgram() (DbProgram, error)
// 批量保存数据
BatchInsert(tx *sql.Tx, tableName string, columns []string, values [][]any, duplicateStrategy int) (int64, error)
// 获取数据转换器用于解析格式化列数据等
GetDataConverter() DataConverter
CopyTable(copy *DbCopyTable) error
2022-10-15 17:38:34 +08:00
}