Files
MyGoNavi/internal/db/database.go
Syngnat e01ecfc387 feat(datasource): 新增 DuckDB 与 Diros 数据源并补齐 DuckDB 函数管理
- 新增 DuckDB 与 Diros 后端驱动实现并接入数据库工厂
- 前端连接配置补充 DuckDB/Diros 入口及方言映射
- 侧边栏支持 DuckDB Macro 函数列表加载与对象分组展示
- 定义查看器支持 DuckDB 函数定义查询与 DDL 还原
- 后端补充 DuckDB 函数删除分支并限制存储过程操作
2026-02-11 17:25:38 +08:00

71 lines
1.8 KiB
Go

package db
import (
"GoNavi-Wails/internal/connection"
"fmt"
)
type Database interface {
Connect(config connection.ConnectionConfig) error
Close() error
Ping() error
Query(query string) ([]map[string]interface{}, []string, error)
Exec(query string) (int64, error)
GetDatabases() ([]string, error)
GetTables(dbName string) ([]string, error)
GetCreateStatement(dbName, tableName string) (string, error)
GetColumns(dbName, tableName string) ([]connection.ColumnDefinition, error)
GetAllColumns(dbName string) ([]connection.ColumnDefinitionWithTable, error)
GetIndexes(dbName, tableName string) ([]connection.IndexDefinition, error)
GetForeignKeys(dbName, tableName string) ([]connection.ForeignKeyDefinition, error)
GetTriggers(dbName, tableName string) ([]connection.TriggerDefinition, error)
}
type BatchApplier interface {
ApplyChanges(tableName string, changes connection.ChangeSet) error
}
// Factory
func NewDatabase(dbType string) (Database, error) {
switch dbType {
case "mysql":
return &MySQLDB{}, nil
case "postgres":
return &PostgresDB{}, nil
case "sqlite":
return &SQLiteDB{}, nil
case "oracle":
return &OracleDB{}, nil
case "dameng":
return &DamengDB{}, nil
case "kingbase":
return &KingbaseDB{}, nil
case "mongodb":
return &MongoDB{}, nil
case "sqlserver":
return &SqlServerDB{}, nil
case "highgo":
return &HighGoDB{}, nil
case "mariadb":
return &MariaDB{}, nil
case "diros", "doris":
return &DirosDB{}, nil
case "sphinx":
return &SphinxDB{}, nil
case "vastbase":
return &VastbaseDB{}, nil
case "tdengine":
return &TDengineDB{}, nil
case "duckdb":
return &DuckDB{}, nil
case "custom":
return &CustomDB{}, nil
default:
// Default to MySQL for backward compatibility if empty
if dbType == "" {
return &MySQLDB{}, nil
}
return nil, fmt.Errorf("unsupported database type: %s", dbType)
}
}