mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-12 06:39:39 +08:00
- 重构批量改单元格的状态流,减少高频交互时的无效重渲染 - 优化大数据量场景下的表格交互流畅度与响应延迟 - 调整单元格编辑细节,增强与 Navicat 编辑习惯的一致性 🔧 fix(sidebar-connection): 修复多数据源切换后旧连接节点无响应问题 - 修复新建并连接新数据源后,旧数据源点击无响应的问题 ✨ feat(tab-manager): 表与设计标签支持环境前缀显示 - 基于连接名识别 DEV/UAT/PROD/SIT/STG/TEST 环境标记 - 仅对 table/design 标签添加环境前缀,查询等标签保持原样 - 无法识别标准环境时回退显示连接名,提升多环境可辨识性 ✨ feat(connection-config): 新增连接URI复制解析并支持MySQL/Mongo主从配置 - 连接弹窗新增 URI 生成、解析、复制能力,支持参数回填 - MySQL 支持多地址主从拓扑、从库地址列表与从库独立凭据 - Mongo 支持多节点配置、replicaSet、authSource、readPreference - 扩展前后端连接配置模型并同步 Wails 生成类型文件 - 后端接入主从凭据回退策略,保持旧配置兼容 ✨ feat(mongodb-replica): 对齐Navicat主从配置并补齐成员发现能力 - 新增 mongoSrv、mongoAuthMechanism、savePassword 配置项 - 支持 mongodb+srv URI 构建与解析,并透传 authMechanism - 新增 MongoDiscoverMembers 接口,返回成员与状态信息 - 驱动侧实现 replSetGetStatus -> hello/isMaster 回退发现链路 - 前端弹窗新增 SRV 开关、验证方式、成员发现按钮与状态表 - 增加 SRV+SSH 冲突提示与后端保护,避免无效连接路径 🔧 fix(app-error-text): 修复连接测试错误信息乱码并完善日志提示 - 新增错误文本编码纠正能力,处理混合编码导致的中文乱码 - 连接错误提示统一走 normalizeErrorMessage 输出 - 增加 GB18030 纠正相关单元测试覆盖 PostgreSQL 认证失败场景 - go.mod 显式引入 golang.org/x/text 依赖 ✨ feat(filter-panel): 筛选条件支持启用停用与批量开关 - 筛选条件新增 enabled 状态,支持按条件勾选启用/停用 - 筛选面板新增“全启用”“全停用”快捷操作 - SQL 组装时自动跳过已停用条件,保留条件内容便于复用 - 同步 DataViewer 与 SQL 工具层类型,确保筛选链路一致性 🔧 fix(connection-modal-scroll): 修复连接弹窗滚动行为并去除外层滚动条 - 连接配置步骤设置弹窗 body 最大高度与内部滚动 - 为连接弹窗增加专用 wrapClassName 并禁用外层滚动 - 修复出现双滚动条的问题,确保仅保留弹窗内部滚动条
114 lines
4.7 KiB
Go
114 lines
4.7 KiB
Go
package connection
|
|
|
|
// SSHConfig holds SSH connection details
|
|
type SSHConfig struct {
|
|
Host string `json:"host"`
|
|
Port int `json:"port"`
|
|
User string `json:"user"`
|
|
Password string `json:"password"`
|
|
KeyPath string `json:"keyPath"`
|
|
}
|
|
|
|
// ConnectionConfig holds database connection details including SSH
|
|
type ConnectionConfig struct {
|
|
Type string `json:"type"`
|
|
Host string `json:"host"`
|
|
Port int `json:"port"`
|
|
User string `json:"user"`
|
|
Password string `json:"password"`
|
|
SavePassword bool `json:"savePassword,omitempty"` // Persist password in saved connection
|
|
Database string `json:"database"`
|
|
UseSSH bool `json:"useSSH"`
|
|
SSH SSHConfig `json:"ssh"`
|
|
Driver string `json:"driver,omitempty"` // For custom connection
|
|
DSN string `json:"dsn,omitempty"` // For custom connection
|
|
Timeout int `json:"timeout,omitempty"` // Connection timeout in seconds (default: 30)
|
|
RedisDB int `json:"redisDB,omitempty"` // Redis database index (0-15)
|
|
URI string `json:"uri,omitempty"` // Connection URI for copy/paste
|
|
Hosts []string `json:"hosts,omitempty"` // Multi-host addresses: host:port
|
|
Topology string `json:"topology,omitempty"` // single | replica
|
|
MySQLReplicaUser string `json:"mysqlReplicaUser,omitempty"` // MySQL replica auth user
|
|
MySQLReplicaPassword string `json:"mysqlReplicaPassword,omitempty"` // MySQL replica auth password
|
|
ReplicaSet string `json:"replicaSet,omitempty"` // MongoDB replica set name
|
|
AuthSource string `json:"authSource,omitempty"` // MongoDB authSource
|
|
ReadPreference string `json:"readPreference,omitempty"` // MongoDB readPreference
|
|
MongoSRV bool `json:"mongoSrv,omitempty"` // MongoDB use mongodb+srv URI scheme
|
|
MongoAuthMechanism string `json:"mongoAuthMechanism,omitempty"` // MongoDB authMechanism
|
|
MongoReplicaUser string `json:"mongoReplicaUser,omitempty"` // MongoDB replica auth user
|
|
MongoReplicaPassword string `json:"mongoReplicaPassword,omitempty"` // MongoDB replica auth password
|
|
}
|
|
|
|
// QueryResult is the standard response format for Wails methods
|
|
type QueryResult struct {
|
|
Success bool `json:"success"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data"`
|
|
Fields []string `json:"fields,omitempty"`
|
|
}
|
|
|
|
// ColumnDefinition represents a table column
|
|
type ColumnDefinition struct {
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Nullable string `json:"nullable"` // YES/NO
|
|
Key string `json:"key"` // PRI, UNI, MUL
|
|
Default *string `json:"default"`
|
|
Extra string `json:"extra"` // auto_increment
|
|
Comment string `json:"comment"`
|
|
}
|
|
|
|
// IndexDefinition represents a table index
|
|
type IndexDefinition struct {
|
|
Name string `json:"name"`
|
|
ColumnName string `json:"columnName"`
|
|
NonUnique int `json:"nonUnique"`
|
|
SeqInIndex int `json:"seqInIndex"`
|
|
IndexType string `json:"indexType"`
|
|
}
|
|
|
|
// ForeignKeyDefinition represents a foreign key
|
|
type ForeignKeyDefinition struct {
|
|
Name string `json:"name"`
|
|
ColumnName string `json:"columnName"`
|
|
RefTableName string `json:"refTableName"`
|
|
RefColumnName string `json:"refColumnName"`
|
|
ConstraintName string `json:"constraintName"`
|
|
}
|
|
|
|
// TriggerDefinition represents a trigger
|
|
type TriggerDefinition struct {
|
|
Name string `json:"name"`
|
|
Timing string `json:"timing"` // BEFORE/AFTER
|
|
Event string `json:"event"` // INSERT/UPDATE/DELETE
|
|
Statement string `json:"statement"`
|
|
}
|
|
|
|
// ColumnDefinitionWithTable represents a column with its table name (for search/autocomplete)
|
|
type ColumnDefinitionWithTable struct {
|
|
TableName string `json:"tableName"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
// UpdateRow represents a row update with keys (WHERE) and values (SET)
|
|
type UpdateRow struct {
|
|
Keys map[string]interface{} `json:"keys"`
|
|
Values map[string]interface{} `json:"values"`
|
|
}
|
|
|
|
// ChangeSet represents a batch of changes
|
|
type ChangeSet struct {
|
|
Inserts []map[string]interface{} `json:"inserts"`
|
|
Updates []UpdateRow `json:"updates"`
|
|
Deletes []map[string]interface{} `json:"deletes"`
|
|
}
|
|
|
|
type MongoMemberInfo struct {
|
|
Host string `json:"host"`
|
|
Role string `json:"role"`
|
|
State string `json:"state"`
|
|
StateCode int `json:"stateCode,omitempty"`
|
|
Healthy bool `json:"healthy"`
|
|
IsSelf bool `json:"isSelf,omitempty"`
|
|
}
|