Skip to content

Commit

Permalink
增强 MSSQL 插件,支持不常用参数配置,改进 SQL 执行逻辑和初始化过程
Browse files Browse the repository at this point in the history
  • Loading branch information
zgxkbtl committed Dec 13, 2024
1 parent 575c476 commit 5918bda
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 8 deletions.
32 changes: 26 additions & 6 deletions pkg/plugins/mssql_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"database/sql"
"fmt"
"reflect"
"sync"
"time"

_ "github.com/microsoft/go-mssqldb"
Expand All @@ -18,15 +19,16 @@ import (

// MYSQLPlugin 结构体定义 MySQL 插件
type MSSQLPlugin struct {
Name string
AllowRemote bool
Configs []Body
Name string
AllowRemote bool
LessCommonParameters string // 不常用参数 (如: encrypt=disable;trustServerCertificate=true)
Configs []Body
}

// getConnection 创建数据库连接
func (p *MSSQLPlugin) GetConnection(body *Body) (*sql.DB, error) {
connString := fmt.Sprintf("server=%s;port=%d;user id=%s;password=%s;database=%s",
body.Host, body.Port, body.User, body.Password, body.Database)
connString := fmt.Sprintf("server=%s;port=%d;user id=%s;password=%s;database=%s;%s",
body.Host, body.Port, body.User, body.Password, body.Database, p.LessCommonParameters)

return sql.Open("sqlserver", connString)
}
Expand Down Expand Up @@ -98,8 +100,17 @@ func (p *MSSQLPlugin) DoSQLExecute(body *Body) (qr *QueryResult) {
values := make([]interface{}, len(columns))
for i, colType := range columnTypes {
// 根据列的扫描类型创建对应的变量
values[i] = reflect.New(colType.ScanType()).Interface()
dbType := colType.DatabaseTypeName()
if colType.ScanType() == nil {
logger.Log1.WithFields(map[string]interface{}{
"column": columns[i],
"type": dbType,
}).Warn("列的扫描类型为空")
var v interface{}
values[i] = &v
continue
}
values[i] = reflect.New(colType.ScanType()).Interface()
// 根据数据库类型创建对应的变量
switch dbType {
case "DECIMAL", "NUMERIC", "FLOAT", "REAL":
Expand Down Expand Up @@ -168,7 +179,14 @@ func NewMSSQLPlugin() *MSSQLPlugin {
}
}

var initOnce sync.Once

func (p *MSSQLPlugin) Init() error {
initOnce.Do(func() {
// 设置默认值
viper.SetDefault("auth.mssql.allow_remote", false)
})

// 定义一个变量来存储 SQL 配置
var sqlConfigs []Body

Expand All @@ -180,11 +198,13 @@ func (p *MSSQLPlugin) Init() error {
p.Configs = sqlConfigs

p.AllowRemote = viper.GetBool("auth.mssql.allow_remote")
p.LessCommonParameters = viper.GetString("auth.mssql.less_common_parameters")

logger.Log1.
WithField("插件名", p.Name).
WithField("配置列表", p.Configs).
WithField("允许远程配置", p.AllowRemote).
WithField("不常用参数", p.LessCommonParameters).
Info("插件已初始化")
return nil
}
Expand Down
36 changes: 34 additions & 2 deletions pkg/plugins/sql_executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,9 @@ func TestORACLEDBPlugin_doSQLExecute(t *testing.T) {
func TestMSSQLPlugin_doSQLExecute(t *testing.T) {
// 创建一个 MSSQL 插件
p := &plugin.MSSQLPlugin{
Name: "",
AllowRemote: true,
Name: "",
AllowRemote: true,
LessCommonParameters: "encrypt=disable;trustServerCertificate=true",
}
// 创建一个 Body
body := &plugin.Body{
Expand All @@ -145,3 +146,34 @@ func TestMSSQLPlugin_doSQLExecute(t *testing.T) {

require.Equal(t, "success", qr.Message)
}

func TestMSSQLPlugin_doSQLExecute2(t *testing.T) {
// 创建一个 MSSQL 插件
p := &plugin.MSSQLPlugin{
Name: "",
AllowRemote: true,
LessCommonParameters: "encrypt=disable;trustServerCertificate=true",
}
// 创建一个 Body
body := &plugin.Body{
Host: "localhost",
Port: 1433,
User: "sa",
Password: "sa123456A",
Database: "master",
SQL: "SELECT * FROM AllDataTypesTest",
}
// 执行 SQL 查询
qr := p.DoSQLExecute(body)
// 断言结果
require.NotNil(t, qr)
require.NotNil(t, qr.Result)
require.NotNil(t, qr.Columns)
jsonData, err := json.Marshal(qr.Result)
if err != nil {
t.Error(err)
}
t.Log(string(jsonData))

require.Equal(t, "success", qr.Message)
}
5 changes: 5 additions & 0 deletions release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

“钉钉连接平台自动化官方互助交流群”群的钉钉群号: 109135000489

### 2024-12-13

- MSSQL 插件支持 `auth.mssql.less_common_parameters` 配置, 用于配置不常用的参数。可用于兼容TLS1.0、TLS1.1等特殊情况


### 2024-12-10

- 增强数据库插件的日志输出
Expand Down

0 comments on commit 5918bda

Please sign in to comment.