From 3b93289fbe7735e7dfe82e61dd5e89cd7e304656 Mon Sep 17 00:00:00 2001 From: BugsGuru Date: Thu, 4 Dec 2025 15:04:52 +0800 Subject: [PATCH 1/3] feat: enhance DirectAuditByInstance function to include rule template name --- sqle/server/audit.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sqle/server/audit.go b/sqle/server/audit.go index 21a41a324..b3c578fee 100644 --- a/sqle/server/audit.go +++ b/sqle/server/audit.go @@ -51,9 +51,9 @@ func HookAudit(l *logrus.Entry, task *model.Task, hook AuditHook, projectId *mod const AuditSchema = "AuditSchema" -func DirectAuditByInstance(l *logrus.Entry, sql, schemaName string, instance *model.Instance) (*model.Task, error) { +func DirectAuditByInstance(l *logrus.Entry, sql, schemaName string, instance *model.Instance, ruleTemplateName string) (*model.Task, error) { st := model.GetStorage() - rules, customRules, err := st.GetAllRulesByTmpNameAndProjectIdInstanceDBType("", "", instance, instance.DbType) + rules, customRules, err := st.GetAllRulesByTmpNameAndProjectIdInstanceDBType(ruleTemplateName, instance.ProjectId, instance, instance.DbType) if err != nil { return nil, err } From 436d26c1015582d0ddcfe4b8c56d859ee767d6ae Mon Sep 17 00:00:00 2001 From: BugsGuru Date: Thu, 4 Dec 2025 15:06:15 +0800 Subject: [PATCH 2/3] feat: add instance name and schema name fields to DirectAudit request and enhance auditing logic --- sqle/api/controller/v1/sql_audit.go | 4 ++-- sqle/api/controller/v2/sql_audit.go | 31 +++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/sqle/api/controller/v1/sql_audit.go b/sqle/api/controller/v1/sql_audit.go index d72c8d9c9..d580c4fb6 100644 --- a/sqle/api/controller/v1/sql_audit.go +++ b/sqle/api/controller/v1/sql_audit.go @@ -118,7 +118,7 @@ func DirectAudit(c echo.Context) error { var task *model.Task if instance != nil && schemaName != "" { - task, err = server.DirectAuditByInstance(l, sql, schemaName, instance) + task, err = server.DirectAuditByInstance(l, sql, schemaName, instance, "") } else { task, err = server.AuditSQLByDBType(l, sql, req.InstanceType, projectUid, "") } @@ -226,7 +226,7 @@ func DirectAuditFiles(c echo.Context) error { var task *model.Task if instance != nil && schemaName != "" { - task, err = server.DirectAuditByInstance(l, sqls, schemaName, instance) + task, err = server.DirectAuditByInstance(l, sqls, schemaName, instance, "") } else { task, err = server.AuditSQLByDBType(l, sqls, req.InstanceType, projectUid, "") } diff --git a/sqle/api/controller/v2/sql_audit.go b/sqle/api/controller/v2/sql_audit.go index 765be325e..dbedbb26d 100644 --- a/sqle/api/controller/v2/sql_audit.go +++ b/sqle/api/controller/v2/sql_audit.go @@ -20,10 +20,12 @@ import ( type DirectAuditReqV2 struct { InstanceType string `json:"instance_type" form:"instance_type" example:"MySQL" valid:"required"` // 调用方不应该关心SQL是否被完美的拆分成独立的条目, 拆分SQL由SQLE实现 - SQLContent string `json:"sql_content" form:"sql_content" example:"select * from t1; select * from t2;" valid:"required"` - SQLType string `json:"sql_type" form:"sql_type" example:"sql" enums:"sql,mybatis," valid:"omitempty,oneof=sql mybatis"` - ProjectId string `json:"project_id" form:"project_id" example:"700300" valid:"required"` - RuleTemplateName string `json:"rule_template_name" form:"rule_template_name" example:"default" valid:"required"` + SQLContent string `json:"sql_content" form:"sql_content" example:"select * from t1; select * from t2;" valid:"required"` + SQLType string `json:"sql_type" form:"sql_type" example:"sql" enums:"sql,mybatis," valid:"omitempty,oneof=sql mybatis"` + ProjectId string `json:"project_id" form:"project_id" example:"700300" valid:"required"` + RuleTemplateName string `json:"rule_template_name" form:"rule_template_name" example:"default" valid:"required"` + InstanceName *string `json:"instance_name" form:"instance_name" example:"instance1"` + SchemaName *string `json:"schema_name" form:"schema_name" example:"schema1"` } type AuditResDataV2 struct { @@ -72,7 +74,24 @@ func DirectAudit(c echo.Context) error { l := log.NewEntry().WithField(c.Path(), "direct audit failed") - task, err := server.AuditSQLByDBType(l, sql, req.InstanceType, req.ProjectId, req.RuleTemplateName) + var instance *model.Instance + if req.ProjectId != "" && req.InstanceName != nil { + var exist bool + instance, exist, err = dms.GetInstanceInProjectByName(c.Request().Context(), req.ProjectId, *req.InstanceName) + if err != nil { + return controller.JSONBaseErrorReq(c, err) + } + if !exist { + return controller.JSONBaseErrorReq(c, v1.ErrInstanceNotExist) + } + } + + var task *model.Task + if instance != nil && req.SchemaName != nil { + task, err = server.DirectAuditByInstance(l, sql, *req.SchemaName, instance, req.RuleTemplateName) + } else { + task, err = server.AuditSQLByDBType(l, sql, req.InstanceType, req.ProjectId, req.RuleTemplateName) + } if err != nil { l.Errorf("audit sqls failed: %v", err) return controller.JSONBaseErrorReq(c, v1.ErrDirectAudit) @@ -180,7 +199,7 @@ func DirectAuditFiles(c echo.Context) error { var task *model.Task if instance != nil && schemaName != "" { - task, err = server.DirectAuditByInstance(l, sqls, schemaName, instance) + task, err = server.DirectAuditByInstance(l, sqls, schemaName, instance, "") } else { task, err = server.AuditSQLByDBType(l, sqls, req.InstanceType, projectUid, "") } From 05a60ddb9a68eee9daaa42ac75a29fa27520aba0 Mon Sep 17 00:00:00 2001 From: BugsGuru Date: Thu, 4 Dec 2025 15:20:41 +0800 Subject: [PATCH 3/3] feat: update swagger --- sqle/docs/docs.go | 8 ++++++++ sqle/docs/swagger.json | 8 ++++++++ sqle/docs/swagger.yaml | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/sqle/docs/docs.go b/sqle/docs/docs.go index 685860788..2292101b3 100644 --- a/sqle/docs/docs.go +++ b/sqle/docs/docs.go @@ -22620,6 +22620,10 @@ var doc = `{ "v2.DirectAuditReqV2": { "type": "object", "properties": { + "instance_name": { + "type": "string", + "example": "instance1" + }, "instance_type": { "type": "string", "example": "MySQL" @@ -22632,6 +22636,10 @@ var doc = `{ "type": "string", "example": "default" }, + "schema_name": { + "type": "string", + "example": "schema1" + }, "sql_content": { "description": "调用方不应该关心SQL是否被完美的拆分成独立的条目, 拆分SQL由SQLE实现", "type": "string", diff --git a/sqle/docs/swagger.json b/sqle/docs/swagger.json index 8c907afd2..d8bd0f554 100644 --- a/sqle/docs/swagger.json +++ b/sqle/docs/swagger.json @@ -22604,6 +22604,10 @@ "v2.DirectAuditReqV2": { "type": "object", "properties": { + "instance_name": { + "type": "string", + "example": "instance1" + }, "instance_type": { "type": "string", "example": "MySQL" @@ -22616,6 +22620,10 @@ "type": "string", "example": "default" }, + "schema_name": { + "type": "string", + "example": "schema1" + }, "sql_content": { "description": "调用方不应该关心SQL是否被完美的拆分成独立的条目, 拆分SQL由SQLE实现", "type": "string", diff --git a/sqle/docs/swagger.yaml b/sqle/docs/swagger.yaml index 6d998b856..8eb32b776 100644 --- a/sqle/docs/swagger.yaml +++ b/sqle/docs/swagger.yaml @@ -6505,6 +6505,9 @@ definitions: type: object v2.DirectAuditReqV2: properties: + instance_name: + example: instance1 + type: string instance_type: example: MySQL type: string @@ -6514,6 +6517,9 @@ definitions: rule_template_name: example: default type: string + schema_name: + example: schema1 + type: string sql_content: description: 调用方不应该关心SQL是否被完美的拆分成独立的条目, 拆分SQL由SQLE实现 example: select * from t1; select * from t2;