Files
mayfly-go/server/internal/db/dbm/dbi/metadata_base.go
zongyangleo 6343173cf8 !124 一些更新和bug
* fix: 代码合并
* feat:支持数据库版本兼容,目前兼容了oracle11g部分特性
* fix: 修改数据同步bug,数据sql里指定修改字段别,导致未正确记录修改字段值
* feat: 数据库迁移支持定时迁移和迁移到sql文件
2024-10-20 03:52:23 +00:00

127 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dbi
import (
"io"
"strings"
pq "gitee.com/liuzongyang/libpq"
// "github.com/kanzihuang/vitess/go/vt/sqlparser"
)
type BaseMetaData interface {
// 默认库
DefaultDb() string
DbVersion() string
// 用于引用 SQL 标识符(关键字)的字符串
GetIdentifierQuoteString() string
// 引号转义多用于sql注释转义防止拼接sql报错 comment xx is '注''释' 最终注释文本为: 注'释
QuoteEscape(str string) string
// QuoteLiteral quotes a 'literal' (e.g. a parameter, often used to pass literal
// to DDL and other statements that do not accept parameters) to be used as part
// of an SQL statement. For example:
//
// exp_date := pq.QuoteLiteral("2023-01-05 15:00:00Z")
// err := db.Exec(fmt.Sprintf("CREATE ROLE my_user VALID UNTIL %s", exp_date))
//
// Any single quotes in name will be escaped. Any backslashes (i.e. "\") will be
// replaced by two backslashes (i.e. "\\") and the C-style escape identifier
QuoteLiteral(literal string) string
// GetSqlParserDialect() sqlparser.Dialect
// GetColumnHelper
GetColumnHelper() ColumnHelper
// GetDumpHeler
GetDumpHelper() DumpHelper
}
// 默认实现若需要覆盖则由各个数据库MetaData实现去覆盖重写
type DefaultMetaData struct {
}
func (dd *DefaultMetaData) GetCompatibleDbVersion() DbVersion {
return ""
}
func (dd *DefaultMetaData) DefaultDb() string {
return ""
}
func (dd *DefaultMetaData) DbVersion() string {
return ""
}
func (dd *DefaultMetaData) GetIdentifierQuoteString() string {
return `"`
}
func (dd *DefaultMetaData) QuoteEscape(str string) string {
return strings.Replace(str, `'`, `''`, -1)
}
func (dd *DefaultMetaData) QuoteLiteral(literal string) string {
return pq.QuoteLiteral(literal)
}
// func (dd *DefaultMetaData) GetSqlParserDialect() sqlparser.Dialect {
// return sqlparser.PostgresDialect{}
// }
func (dd *DefaultMetaData) GetDumpHelper() DumpHelper {
return new(DefaultDumpHelper)
}
func (dd *DefaultMetaData) GetColumnHelper() ColumnHelper {
return new(DefaultColumnHelper)
}
// ColumnHelper 数据库迁移辅助方法
type ColumnHelper interface {
// ToCommonColumn 数据库方言自带的列转换为公共列
ToCommonColumn(dialectColumn *Column)
// ToColumn 公共列转为各个数据库方言自带的列
ToColumn(commonColumn *Column)
// FixColumn 根据数据库类型修复字段长度、精度等
FixColumn(column *Column)
}
type DefaultColumnHelper struct {
}
func (dd *DefaultColumnHelper) ToCommonColumn(dialectColumn *Column) {}
func (dd *DefaultColumnHelper) ToColumn(commonColumn *Column) {}
func (dd *DefaultColumnHelper) FixColumn(column *Column) {}
// DumpHelper 导出辅助方法
type DumpHelper interface {
BeforeInsert(writer io.Writer, tableName string)
BeforeInsertSql(quoteSchema string, quoteTableName string) string
AfterInsert(writer io.Writer, tableName string, columns []Column)
}
type DefaultDumpHelper struct {
}
func (dd *DefaultDumpHelper) BeforeInsert(writer io.Writer, tableName string) {
writer.Write([]byte("BEGIN;\n"))
}
func (dd *DefaultDumpHelper) BeforeInsertSql(quoteSchema string, quoteTableName string) string {
return ""
}
func (dd *DefaultDumpHelper) AfterInsert(writer io.Writer, tableName string, columns []Column) {
writer.Write([]byte("COMMIT;\n"))
}