mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-06 14:33:46 +08:00
🐛 fix(sql-parser): 修复尾随注释导致事务与只读判定异常
- 过滤分号后的纯注释语句并保留数据库可执行版本注释 - 前后端按数据库方言统一处理双横线、井号与块注释 - 修复事务选择、只读保护、SQL 审计及 AI 风险分析误判 - 补充流式 SQL、事务执行与方言解析回归测试
This commit is contained in:
41
internal/app/sql_split_stream_test.go
Normal file
41
internal/app/sql_split_stream_test.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestStreamSQLFileDropsCommentOnlyTail(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var statements []string
|
||||
count, err := streamSQLFile(
|
||||
strings.NewReader("DELETE FROM users WHERE id = 1; -- keep this operation pending"),
|
||||
func(_ int, statement string) error {
|
||||
statements = append(statements, statement)
|
||||
return nil
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("streamSQLFile returned error: %v", err)
|
||||
}
|
||||
if count != 1 {
|
||||
t.Fatalf("expected one executable statement, got %d", count)
|
||||
}
|
||||
want := []string{"DELETE FROM users WHERE id = 1"}
|
||||
if !reflect.DeepEqual(statements, want) {
|
||||
t.Fatalf("expected statements %#v, got %#v", want, statements)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSQLStreamSplitterPreservesExecutableMySQLComment(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
splitter := &sqlStreamSplitter{}
|
||||
got := splitter.Feed([]byte("/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;"))
|
||||
want := []string{"/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */"}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("expected statements %#v, got %#v", want, got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user