refactor(db): 重构数据库查询构建器以支持多数据库方言和标识符处理
- 实现了标识符处理器,统一处理表名、字段名的前缀添加和引号转换 - 添加对 MySQL、PostgreSQL、SQLite 三种数据库方言的支持 - 引入 ProcessTableName、ProcessColumn、ProcessConditionString 等方法处理标识符 - 为 HoTimeDB 添加 T() 和 C() 辅助方法用于手动构建 SQL 查询 - 重构 CRUD 操作中的表名和字段名处理逻辑,统一使用标识符处理器 - 添加完整的单元测试验证不同数据库方言下的标识符处理功能 - 优化 JOIN 操作中表名和条件字符串的处理方式
This commit is contained in:
@@ -14,6 +14,15 @@ type Dialect interface {
|
||||
// SQLite 使用双引号或方括号 "name" 或 [name]
|
||||
Quote(name string) string
|
||||
|
||||
// QuoteIdentifier 处理单个标识符(去除已有引号,添加正确引号)
|
||||
// 输入可能带有反引号或双引号,会先去除再添加正确格式
|
||||
QuoteIdentifier(name string) string
|
||||
|
||||
// QuoteChar 返回引号字符
|
||||
// MySQL: `
|
||||
// PostgreSQL/SQLite: "
|
||||
QuoteChar() string
|
||||
|
||||
// Placeholder 生成占位符
|
||||
// MySQL/SQLite 使用 ?
|
||||
// PostgreSQL 使用 $1, $2, $3...
|
||||
@@ -54,6 +63,16 @@ func (d *MySQLDialect) Quote(name string) string {
|
||||
return "`" + name + "`"
|
||||
}
|
||||
|
||||
func (d *MySQLDialect) QuoteIdentifier(name string) string {
|
||||
// 去除已有的引号(反引号和双引号)
|
||||
name = strings.Trim(name, "`\"")
|
||||
return "`" + name + "`"
|
||||
}
|
||||
|
||||
func (d *MySQLDialect) QuoteChar() string {
|
||||
return "`"
|
||||
}
|
||||
|
||||
func (d *MySQLDialect) Placeholder(index int) string {
|
||||
return "?"
|
||||
}
|
||||
@@ -121,6 +140,16 @@ func (d *PostgreSQLDialect) Quote(name string) string {
|
||||
return "\"" + name + "\""
|
||||
}
|
||||
|
||||
func (d *PostgreSQLDialect) QuoteIdentifier(name string) string {
|
||||
// 去除已有的引号(反引号和双引号)
|
||||
name = strings.Trim(name, "`\"")
|
||||
return "\"" + name + "\""
|
||||
}
|
||||
|
||||
func (d *PostgreSQLDialect) QuoteChar() string {
|
||||
return "\""
|
||||
}
|
||||
|
||||
func (d *PostgreSQLDialect) Placeholder(index int) string {
|
||||
return fmt.Sprintf("$%d", index)
|
||||
}
|
||||
@@ -192,6 +221,16 @@ func (d *SQLiteDialect) Quote(name string) string {
|
||||
return "\"" + name + "\""
|
||||
}
|
||||
|
||||
func (d *SQLiteDialect) QuoteIdentifier(name string) string {
|
||||
// 去除已有的引号(反引号和双引号)
|
||||
name = strings.Trim(name, "`\"")
|
||||
return "\"" + name + "\""
|
||||
}
|
||||
|
||||
func (d *SQLiteDialect) QuoteChar() string {
|
||||
return "\""
|
||||
}
|
||||
|
||||
func (d *SQLiteDialect) Placeholder(index int) string {
|
||||
return "?"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user