mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-11 20:39:44 +08:00
- 新增 ResultSetData 结构体承载单个结果集数据 - 新增 MultiResultQuerier/MultiResultQuerierContext 可选接口 - 新增 scanMultiRows 函数利用 NextResultSet() 遍历所有结果集 - MySQL 驱动 DSN 开启 multiStatements=true 并实现多结果集接口 - 新增 DBQueryMulti Wails 方法,支持驱动原生多结果集及自动回退逐条执行 - 新增 Go 版 SQL 拆分函数 splitSQLStatements 及 10 个单元测试 - 前端 QueryEditor handleRun 改为一次性调用 DBQueryMulti - MongoDB 保持独立的逐条执行路径不受影响 - refs #235
148 lines
6.7 KiB
Go
148 lines
6.7 KiB
Go
package connection
|
||
|
||
// SSHConfig 存储 SSH 隧道连接配置。
|
||
type SSHConfig struct {
|
||
Host string `json:"host"`
|
||
Port int `json:"port"`
|
||
User string `json:"user"`
|
||
Password string `json:"password"`
|
||
KeyPath string `json:"keyPath"`
|
||
}
|
||
|
||
// ProxyConfig 存储代理连接配置。
|
||
type ProxyConfig struct {
|
||
Type string `json:"type"` // socks5 | http
|
||
Host string `json:"host"`
|
||
Port int `json:"port"`
|
||
User string `json:"user,omitempty"`
|
||
Password string `json:"password,omitempty"`
|
||
}
|
||
|
||
// HTTPTunnelConfig 存储 HTTP CONNECT 隧道配置。
|
||
type HTTPTunnelConfig struct {
|
||
Host string `json:"host"`
|
||
Port int `json:"port"`
|
||
User string `json:"user,omitempty"`
|
||
Password string `json:"password,omitempty"`
|
||
}
|
||
|
||
// ConnectionConfig 存储数据库连接的完整配置,包括 SSH、代理、SSL 等网络层设置。
|
||
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"`
|
||
UseSSL bool `json:"useSSL,omitempty"` // MySQL-like SSL/TLS switch
|
||
SSLMode string `json:"sslMode,omitempty"` // preferred | required | skip-verify | disable
|
||
SSLCertPath string `json:"sslCertPath,omitempty"` // TLS client certificate path (e.g., Dameng)
|
||
SSLKeyPath string `json:"sslKeyPath,omitempty"` // TLS client private key path (e.g., Dameng)
|
||
UseSSH bool `json:"useSSH"`
|
||
SSH SSHConfig `json:"ssh"`
|
||
UseProxy bool `json:"useProxy,omitempty"`
|
||
Proxy ProxyConfig `json:"proxy,omitempty"`
|
||
UseHTTPTunnel bool `json:"useHttpTunnel,omitempty"`
|
||
HTTPTunnel HTTPTunnelConfig `json:"httpTunnel,omitempty"`
|
||
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 | cluster
|
||
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
|
||
}
|
||
|
||
// ResultSetData 表示一个查询结果集(行 + 列名),用于多结果集场景。
|
||
type ResultSetData struct {
|
||
Rows []map[string]interface{} `json:"rows"`
|
||
Columns []string `json:"columns"`
|
||
}
|
||
|
||
// QueryResult 是 Wails 绑定方法的统一响应格式,前端通过此结构体接收后端结果。
|
||
type QueryResult struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
Data interface{} `json:"data"`
|
||
Fields []string `json:"fields,omitempty"`
|
||
QueryID string `json:"queryId,omitempty"` // Unique ID for query cancellation
|
||
}
|
||
|
||
// ColumnDefinition 描述表的一个列定义。
|
||
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 描述表的一个索引定义。
|
||
type IndexDefinition struct {
|
||
Name string `json:"name"`
|
||
ColumnName string `json:"columnName"`
|
||
NonUnique int `json:"nonUnique"`
|
||
SeqInIndex int `json:"seqInIndex"`
|
||
IndexType string `json:"indexType"`
|
||
SubPart int `json:"subPart,omitempty"`
|
||
}
|
||
|
||
// ForeignKeyDefinition 描述表的一个外键定义。
|
||
type ForeignKeyDefinition struct {
|
||
Name string `json:"name"`
|
||
ColumnName string `json:"columnName"`
|
||
RefTableName string `json:"refTableName"`
|
||
RefColumnName string `json:"refColumnName"`
|
||
ConstraintName string `json:"constraintName"`
|
||
}
|
||
|
||
// TriggerDefinition 描述表的一个触发器定义。
|
||
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 带有表名标识的列定义,用于跨表搜索和 SQL 自动补全。
|
||
type ColumnDefinitionWithTable struct {
|
||
TableName string `json:"tableName"`
|
||
Name string `json:"name"`
|
||
Type string `json:"type"`
|
||
}
|
||
|
||
// UpdateRow 表示一行更新操作,Keys 为 WHERE 条件,Values 为 SET 值。
|
||
type UpdateRow struct {
|
||
Keys map[string]interface{} `json:"keys"`
|
||
Values map[string]interface{} `json:"values"`
|
||
}
|
||
|
||
// ChangeSet 表示一组批量变更,包含新增、修改和删除操作。
|
||
type ChangeSet struct {
|
||
Inserts []map[string]interface{} `json:"inserts"`
|
||
Updates []UpdateRow `json:"updates"`
|
||
Deletes []map[string]interface{} `json:"deletes"`
|
||
}
|
||
|
||
// MongoMemberInfo 描述 MongoDB 副本集成员的信息。
|
||
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"`
|
||
}
|