forked from Pawansingh3889/sql-guard
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
104 lines (99 loc) · 2.49 KB
/
__init__.py
File metadata and controls
104 lines (99 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""Rule registry — auto-discovers all rules."""
from __future__ import annotations
from sql_guard.rules.base import Rule
from sql_guard.rules.errors import (
AlterAddNotNullNoDefault,
DeleteWithoutWhere,
DropColumn,
DropWithoutIfExists,
GrantRevoke,
InsertWithoutColumns,
StringConcatInWhere,
UpdateWithoutWhere,
)
from sql_guard.rules.warnings import (
CaseWithoutElse,
CommentedOutCode,
CountDistinctUnbounded,
FunctionOnIndexedColumn,
GroupByOrdinal,
HardcodedValues,
JoinFunctionOnColumn,
LeadingWildcardLike,
MissingLimit,
MissingSemicolon,
MissingTableAlias,
MixedCaseKeywords,
NotInWithSubquery,
OrAcrossColumns,
OrderByWithoutLimit,
ScalarUdfInWhere,
SelectStar,
SubqueryCouldBeJoin,
TruncateTable,
UnionWithoutAll,
WindowMissingPartition
)
from sql_guard.rules.structural import (
DeeplyNestedSubquery,
ImplicitCrossJoin,
UnusedCTE,
)
from sql_guard.rules.tsql import (
CreateIndexWithoutOnline,
CursorDeclaration,
DeprecatedOuterJoin,
WithNolock,
XpCmdshell,
)
ALL_RULES: list[Rule] = [
# Errors (E001-E008)
DeleteWithoutWhere(),
DropWithoutIfExists(),
GrantRevoke(),
StringConcatInWhere(),
InsertWithoutColumns(),
UpdateWithoutWhere(),
AlterAddNotNullNoDefault(),
DropColumn(),
# Warnings (W001-W020 with gaps)
SelectStar(),
MissingLimit(),
FunctionOnIndexedColumn(),
MissingTableAlias(),
SubqueryCouldBeJoin(),
OrderByWithoutLimit(),
HardcodedValues(),
MixedCaseKeywords(),
MissingSemicolon(),
CommentedOutCode(),
UnionWithoutAll(),
WindowMissingPartition(),
GroupByOrdinal(),
NotInWithSubquery(),
LeadingWildcardLike(),
JoinFunctionOnColumn(),
OrAcrossColumns(),
TruncateTable(),
CountDistinctUnbounded(),
ScalarUdfInWhere(),
CaseWithoutElse(),
# Structural (S001-S003)
ImplicitCrossJoin(),
DeeplyNestedSubquery(),
UnusedCTE(),
# T-SQL specific (T001-T005)
WithNolock(),
XpCmdshell(),
CursorDeclaration(),
DeprecatedOuterJoin(),
CreateIndexWithoutOnline(),
]
def get_rules(enabled_ids: set[str] | None = None, disabled_ids: set[str] | None = None) -> list[Rule]:
"""Return filtered list of rules based on config."""
rules = ALL_RULES
if enabled_ids:
rules = [r for r in rules if r.id in enabled_ids]
if disabled_ids:
rules = [r for r in rules if r.id not in disabled_ids]
return rules