MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / TestSQLAnalyzer_DeleteStatements

Function TestSQLAnalyzer_DeleteStatements

cmd/gosqlx/cmd/sql_analyzer_test.go:585–666  ·  view source on GitHub ↗

TestSQLAnalyzer_DeleteStatements tests analysis of DELETE statements

(t *testing.T)

Source from the content-addressed store, hash-verified

583
584// TestSQLAnalyzer_DeleteStatements tests analysis of DELETE statements
585func TestSQLAnalyzer_DeleteStatements(t *testing.T) {
586 tests := []struct {
587 name string
588 sql string
589 expectMissingWhere bool
590 expectSecurityIssue bool
591 }{
592 {
593 name: "DELETE with WHERE",
594 sql: "DELETE FROM users WHERE id = 1",
595 expectMissingWhere: false,
596 expectSecurityIssue: false,
597 },
598 {
599 name: "DELETE without WHERE (dangerous)",
600 sql: "DELETE FROM users",
601 expectMissingWhere: true,
602 expectSecurityIssue: true, // Missing WHERE on DELETE is a security issue
603 },
604 {
605 name: "DELETE with complex condition",
606 sql: "DELETE FROM logs WHERE created_at < '2020-01-01' AND processed = true",
607 expectMissingWhere: false,
608 expectSecurityIssue: false,
609 },
610 }
611
612 for _, tt := range tests {
613 t.Run(tt.name, func(t *testing.T) {
614 tkz := tokenizer.GetTokenizer()
615 defer tokenizer.PutTokenizer(tkz)
616
617 tokens, err := tkz.Tokenize([]byte(tt.sql))
618 if err != nil {
619 t.Fatalf("Tokenization failed: %v", err)
620 }
621
622 p := parser.NewParser()
623 astObj := ast.NewAST()
624 defer ast.ReleaseAST(astObj)
625
626 result, err := p.ParseFromModelTokens(tokens)
627 if err != nil {
628 t.Fatalf("Parsing failed: %v", err)
629 }
630 astObj.Statements = result.Statements
631
632 analyzer := NewSQLAnalyzer()
633 report, err := analyzer.Analyze(astObj)
634 if err != nil {
635 t.Fatalf("Analysis failed: %v", err)
636 }
637
638 // Check for missing WHERE issue
639 foundMissingWhere := false
640 hasSecurityIssue := false
641 for _, issue := range report.Issues {
642 if strings.Contains(issue.ID, "MISSING_WHERE") {

Callers

nothing calls this directly

Calls 12

ParseFromModelTokensMethod · 0.95
AnalyzeMethod · 0.95
GetTokenizerFunction · 0.92
PutTokenizerFunction · 0.92
NewParserFunction · 0.92
NewASTFunction · 0.92
ReleaseASTFunction · 0.92
NewSQLAnalyzerFunction · 0.85
RunMethod · 0.80
TokenizeMethod · 0.80
FatalfMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected