feat: v1.11.0

This commit is contained in:
meilin.huang
2026-05-13 20:01:05 +08:00
parent f23b243fc5
commit 847f5c7c90
80 changed files with 2507 additions and 1961 deletions

View File

@@ -15,17 +15,23 @@ import (
)
type QueryDataParam struct {
DbId int64 `json:"dbId" jsonschema_description:"数据库ID。取值逻辑1. 用户本次明确指定2. 从前序工具的输入输出中继承已选定的数据库ID3. 若均无传0以触发参数补全。禁止凭空猜测。"`
DbName string `json:"dbName" jsonschema_description:"数据库名称。取值逻辑1. 用户本次明确指定2. 从前序工具的输入输出中继承已选定的数据库名称3. 若均无,留空以触发参数补全。禁止凭空猜测。"`
SQL string `json:"sql" jsonschema_description:"SQL语句" jsonschema:"required" `
DbId int64 `json:"dbId" jsonschema_description:"数据库ID。取值逻辑1. 用户本次明确指定2. 从前序工具的输入输出中继承已选定的数据库ID3. 若均无传0以触发参数补全。禁止凭空猜测。"`
DbName string `json:"dbName" jsonschema_description:"数据库名称。取值逻辑1. 用户本次明确指定2. 从前序工具的输入输出中继承已选定的数据库名称3. 若均无,留空以触发参数补全。禁止凭空猜测。"`
SQLs []string `json:"sqls" jsonschema_description:"SQL语句数组支持一次性查询多条SQL" jsonschema:"required" `
}
type SingleQueryResult struct {
SQL string `json:"sql" jsonschema_description:"执行的SQL语句"`
Columns []*dbi.QueryColumn `json:"columns" jsonschema_description:"查询结果列信息"`
Rows []map[string]any `json:"rows" jsonschema_description:"查询结果数据"`
Error string `json:"error,omitempty" jsonschema_description:"执行错误信息"`
}
type QueryDataOutput struct {
DbId int64 `json:"dbId" jsonschema_description:"数据库ID"`
DbName string `json:"dbName" jsonschema_description:"数据库名称"`
DbType string `json:"dbType" jsonschema_description:"数据库类型如mysql、postgresql等"`
Columns []*dbi.QueryColumn `json:"columns" jsonschema_description:"查询结果列信息"`
Rows []map[string]any `json:"rows" jsonschema_description:"查询结果数据"`
DbId int64 `json:"dbId" jsonschema_description:"数据库ID"`
DbName string `json:"dbName" jsonschema_description:"数据库名称"`
DbType string `json:"dbType" jsonschema_description:"数据库类型如mysql、postgresql等"`
Results []SingleQueryResult `json:"results" jsonschema_description:"多条SQL查询结果"`
}
func GetQueryData() (tool.InvokableTool, error) {
@@ -43,8 +49,12 @@ func GetQueryData() (tool.InvokableTool, error) {
}
}
if param.SQL == "" {
return nil, fmt.Errorf("sql parameter is required")
if len(param.SQLs) == 0 {
return nil, fmt.Errorf("sqls parameter is required")
}
if len(param.SQLs) > 10 {
return nil, fmt.Errorf("too many SQL statements, maximum allowed is 10, got %d", len(param.SQLs))
}
conn, err := application.GetDbApp().GetDbConn(ctx, uint64(param.DbId), param.DbName)
@@ -52,24 +62,36 @@ func GetQueryData() (tool.InvokableTool, error) {
return nil, tools.NewToolError(err, tools.RecoverRetry)
}
rows := make([]map[string]any, 0)
columns, err := conn.WalkQueryRows(ctx, param.SQL, func(row map[string]any, columns []*dbi.QueryColumn) error {
rows = append(rows, row)
if len(rows) > 1000 {
return dbi.NewStopWalkQueryError("The maximum number of query rows is exceeded: 1000")
results := make([]SingleQueryResult, 0, len(param.SQLs))
for _, sql := range param.SQLs {
if sql == "" {
continue
}
return nil
})
if err != nil {
return nil, tools.NewToolError(err, tools.RecoverRetry)
result := SingleQueryResult{SQL: sql}
rows := make([]map[string]any, 0)
columns, err := conn.WalkQueryRows(ctx, sql, func(row map[string]any, columns []*dbi.QueryColumn) error {
rows = append(rows, row)
if len(rows) > 1000 {
return dbi.NewStopWalkQueryError("The maximum number of query rows is exceeded: 1000")
}
return nil
})
if err != nil {
result.Error = err.Error()
} else {
result.Columns = columns
result.Rows = rows
}
results = append(results, result)
}
output := &QueryDataOutput{
DbId: param.DbId,
DbName: param.DbName,
DbType: string(conn.Info.Type),
Columns: columns,
Rows: rows,
Results: results,
}
return output, nil
},