Files
MyGoNavi/internal/app/sql_split_stream_test.go
Syngnat 1ae2b74279 🐛 fix(sql-parser): 修复尾随注释导致事务与只读判定异常
- 过滤分号后的纯注释语句并保留数据库可执行版本注释
- 前后端按数据库方言统一处理双横线、井号与块注释
- 修复事务选择、只读保护、SQL 审计及 AI 风险分析误判
- 补充流式 SQL、事务执行与方言解析回归测试
2026-07-13 12:52:56 +08:00

42 lines
1.1 KiB
Go

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)
}
}