mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-31 18:59:44 +08:00
- 过滤分号后的纯注释语句并保留数据库可执行版本注释 - 前后端按数据库方言统一处理双横线、井号与块注释 - 修复事务选择、只读保护、SQL 审计及 AI 风险分析误判 - 补充流式 SQL、事务执行与方言解析回归测试
42 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|