feat(database): 添加ClickHouse数据库驱动支持

- 实现了ClickHouse数据库驱动程序,支持基本的数据库操作
- 添加了ClickHouse特定的迁移功能,包括表、列、索引的创建和管理
- 集成了ClickHouse的语法特性,如MergeTree引擎和Nullable类型
- 实现了数据库连接池管理和SQL执行接口
- 添加了对系统表查询的支持,用于检查表和列的存在性
This commit is contained in:
2026-04-13 16:07:54 +08:00
parent a083b74f9b
commit 284f9380ed
23 changed files with 3599 additions and 8 deletions
+48 -5
View File
@@ -41,16 +41,59 @@ func main() {
user := getStringValue(defaultDbConfig, "user", "root")
pass := getStringValue(defaultDbConfig, "pass", "")
dbType := getStringValue(defaultDbConfig, "type", "mysql")
link := getStringValue(defaultDbConfig, "link", "")
fmt.Println("=== Gin-Base DAO 代码生成工具 ===")
fmt.Printf("📊 数据库: %s\n", name)
fmt.Printf("🔧 类型: %s\n", dbType)
fmt.Printf("🌐 主机: %s:%s\n\n", host, port)
// 构建数据库连接字符串
link := fmt.Sprintf("mysql:%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
user, pass, host, port, name,
)
var connectionInfo string
if link == "" {
// 如果没有配置 link,则根据数据库类型构建
switch dbType {
case "sqlite":
// SQLite 使用配置文件中的 link 或默认路径
connectionInfo = fmt.Sprintf("📁 数据库文件: %s", link)
case "mysql", "mariadb":
link = fmt.Sprintf("mysql:%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
user, pass, host, port, name,
)
connectionInfo = fmt.Sprintf("📊 数据库: %s\n🌐 主机: %s:%s", name, host, port)
case "pgsql", "postgresql":
link = fmt.Sprintf("pgsql:%s:%s@tcp(%s:%s)/%s?sslmode=disable",
user, pass, host, port, name,
)
connectionInfo = fmt.Sprintf("📊 数据库: %s\n🌐 主机: %s:%s", name, host, port)
case "mssql":
link = fmt.Sprintf("mssql:%s:%s@tcp(%s:%s)/%s",
user, pass, host, port, name,
)
connectionInfo = fmt.Sprintf("📊 数据库: %s\n🌐 主机: %s:%s", name, host, port)
case "oracle":
link = fmt.Sprintf("oracle:%s:%s@%s:%s/%s",
user, pass, host, port, name,
)
connectionInfo = fmt.Sprintf("📊 数据库: %s\n🌐 主机: %s:%s", name, host, port)
case "clickhouse":
link = fmt.Sprintf("clickhouse:%s:%s@tcp(%s:%s)/%s",
user, pass, host, port, name,
)
connectionInfo = fmt.Sprintf("📊 数据库: %s\n🌐 主机: %s:%s", name, host, port)
default:
fmt.Printf("⚠️ 警告: 未知的数据库类型 %s,尝试使用配置的 link\n", dbType)
if link == "" {
fmt.Println("❌ 错误: 未配置数据库连接信息")
os.Exit(1)
}
connectionInfo = "🔗 使用自定义连接"
}
} else {
// 使用配置文件中直接提供的 link
connectionInfo = fmt.Sprintf("🔗 连接: %s", link)
}
fmt.Println(connectionInfo)
fmt.Println()
// 准备表名参数
tablesArg := ""