activo 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -1
- package/data/2026-03-04_20-54.json +181 -0
- package/data/2026-03-04_20-56.json +181 -0
- package/data/apex-rulesets/egov.yaml +469 -0
- package/data/apex-rulesets/modernize.yaml +687 -0
- package/data/apex-rulesets/quality.yaml +1677 -0
- package/data/apex-rulesets/rule-schema.yaml +587 -0
- package/data/apex-rulesets/secure.yaml +1688 -0
- package/data/apex-rulesets/spring.yaml +455 -0
- package/data/apex-rulesets/sql-format.yaml +99 -0
- package/data/apex-rulesets/sql-oracle.yaml +281 -0
- package/data/apex-rulesets/sql.yaml +1660 -0
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +32 -10
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/index.js +31 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/agent.d.ts +3 -3
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +255 -17
- package/dist/core/agent.js.map +1 -1
- package/dist/core/commands.d.ts +2 -1
- package/dist/core/commands.d.ts.map +1 -1
- package/dist/core/commands.js +61 -9
- package/dist/core/commands.js.map +1 -1
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +41 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/conversation.d.ts +2 -2
- package/dist/core/conversation.d.ts.map +1 -1
- package/dist/core/conversation.js.map +1 -1
- package/dist/core/intentRouter.d.ts +43 -0
- package/dist/core/intentRouter.d.ts.map +1 -0
- package/dist/core/intentRouter.js +804 -0
- package/dist/core/intentRouter.js.map +1 -0
- package/dist/core/llm/anthropic.d.ts +24 -0
- package/dist/core/llm/anthropic.d.ts.map +1 -0
- package/dist/core/llm/anthropic.js +226 -0
- package/dist/core/llm/anthropic.js.map +1 -0
- package/dist/core/llm/ollama.d.ts +5 -14
- package/dist/core/llm/ollama.d.ts.map +1 -1
- package/dist/core/llm/ollama.js +3 -0
- package/dist/core/llm/ollama.js.map +1 -1
- package/dist/core/llm/types.d.ts +22 -0
- package/dist/core/llm/types.d.ts.map +1 -0
- package/dist/core/llm/types.js +2 -0
- package/dist/core/llm/types.js.map +1 -0
- package/dist/core/mcp/client.d.ts +6 -0
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +16 -0
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/init.d.ts +12 -0
- package/dist/core/mcp/init.d.ts.map +1 -0
- package/dist/core/mcp/init.js +55 -0
- package/dist/core/mcp/init.js.map +1 -0
- package/dist/core/mcp/logger.d.ts +14 -0
- package/dist/core/mcp/logger.d.ts.map +1 -0
- package/dist/core/mcp/logger.js +50 -0
- package/dist/core/mcp/logger.js.map +1 -0
- package/dist/core/tools/analyzeAll.d.ts.map +1 -1
- package/dist/core/tools/analyzeAll.js +16 -28
- package/dist/core/tools/analyzeAll.js.map +1 -1
- package/dist/core/tools/analyzePatterns.d.ts +3 -0
- package/dist/core/tools/analyzePatterns.d.ts.map +1 -0
- package/dist/core/tools/analyzePatterns.js +293 -0
- package/dist/core/tools/analyzePatterns.js.map +1 -0
- package/dist/core/tools/apexPaths.d.ts +14 -0
- package/dist/core/tools/apexPaths.d.ts.map +1 -0
- package/dist/core/tools/apexPaths.js +54 -0
- package/dist/core/tools/apexPaths.js.map +1 -0
- package/dist/core/tools/apexUtils.d.ts +36 -0
- package/dist/core/tools/apexUtils.d.ts.map +1 -0
- package/dist/core/tools/apexUtils.js +83 -0
- package/dist/core/tools/apexUtils.js.map +1 -0
- package/dist/core/tools/explainIssue.d.ts +3 -0
- package/dist/core/tools/explainIssue.d.ts.map +1 -0
- package/dist/core/tools/explainIssue.js +181 -0
- package/dist/core/tools/explainIssue.js.map +1 -0
- package/dist/core/tools/fixGen.d.ts +3 -0
- package/dist/core/tools/fixGen.d.ts.map +1 -0
- package/dist/core/tools/fixGen.js +338 -0
- package/dist/core/tools/fixGen.js.map +1 -0
- package/dist/core/tools/generateImprovements.d.ts +21 -0
- package/dist/core/tools/generateImprovements.d.ts.map +1 -0
- package/dist/core/tools/generateImprovements.js +602 -0
- package/dist/core/tools/generateImprovements.js.map +1 -0
- package/dist/core/tools/generateReport.d.ts +3 -0
- package/dist/core/tools/generateReport.d.ts.map +1 -0
- package/dist/core/tools/generateReport.js +315 -0
- package/dist/core/tools/generateReport.js.map +1 -0
- package/dist/core/tools/index.d.ts +7 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +62 -23
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/javaAst.d.ts.map +1 -1
- package/dist/core/tools/javaAst.js +191 -0
- package/dist/core/tools/javaAst.js.map +1 -1
- package/dist/core/tools/recommendProfile.d.ts +3 -0
- package/dist/core/tools/recommendProfile.d.ts.map +1 -0
- package/dist/core/tools/recommendProfile.js +334 -0
- package/dist/core/tools/recommendProfile.js.map +1 -0
- package/dist/core/tools/ruleGen.d.ts +3 -0
- package/dist/core/tools/ruleGen.d.ts.map +1 -0
- package/dist/core/tools/ruleGen.js +1103 -0
- package/dist/core/tools/ruleGen.js.map +1 -0
- package/dist/core/tools/standards.d.ts.map +1 -1
- package/dist/core/tools/standards.js +7 -3
- package/dist/core/tools/standards.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +86 -35
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts +1 -3
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +146 -5
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MessageList.d.ts +3 -1
- package/dist/ui/components/MessageList.d.ts.map +1 -1
- package/dist/ui/components/MessageList.js +13 -7
- package/dist/ui/components/MessageList.js.map +1 -1
- package/dist/ui/components/StatusBar.d.ts +1 -1
- package/dist/ui/components/StatusBar.d.ts.map +1 -1
- package/dist/ui/components/StatusBar.js +3 -2
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/ToolStatus.d.ts +3 -1
- package/dist/ui/components/ToolStatus.d.ts.map +1 -1
- package/dist/ui/components/ToolStatus.js +19 -4
- package/dist/ui/components/ToolStatus.js.map +1 -1
- package/package.json +7 -1
- package/demo.gif +0 -0
- package/demo.tape +0 -53
- package/screenshot.png +0 -0
- package/src/cli/banner.ts +0 -38
- package/src/cli/headless.ts +0 -63
- package/src/cli/index.ts +0 -57
- package/src/core/agent.ts +0 -237
- package/src/core/commands.ts +0 -118
- package/src/core/config.ts +0 -98
- package/src/core/conversation.ts +0 -235
- package/src/core/llm/ollama.ts +0 -351
- package/src/core/mcp/client.ts +0 -143
- package/src/core/tools/analyzeAll.ts +0 -494
- package/src/core/tools/ast.ts +0 -826
- package/src/core/tools/builtIn.ts +0 -221
- package/src/core/tools/cache.ts +0 -570
- package/src/core/tools/cssAnalysis.ts +0 -324
- package/src/core/tools/dependencyAnalysis.ts +0 -363
- package/src/core/tools/embeddings.ts +0 -746
- package/src/core/tools/frontendAst.ts +0 -802
- package/src/core/tools/htmlAnalysis.ts +0 -466
- package/src/core/tools/index.ts +0 -160
- package/src/core/tools/javaAst.ts +0 -812
- package/src/core/tools/memory.ts +0 -655
- package/src/core/tools/mybatisAnalysis.ts +0 -322
- package/src/core/tools/openapiAnalysis.ts +0 -431
- package/src/core/tools/pythonAnalysis.ts +0 -477
- package/src/core/tools/sqlAnalysis.ts +0 -298
- package/src/core/tools/standards.test.ts +0 -186
- package/src/core/tools/standards.ts +0 -889
- package/src/core/tools/types.ts +0 -38
- package/src/ui/App.tsx +0 -334
- package/src/ui/components/InputBox.tsx +0 -37
- package/src/ui/components/MessageList.tsx +0 -80
- package/src/ui/components/StatusBar.tsx +0 -36
- package/src/ui/components/ToolStatus.tsx +0 -38
- package/tsconfig.json +0 -21
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Oracle Database Specific Ruleset
|
|
2
|
+
# Oracle 전용 함수, 구문, 힌트 관련 규칙
|
|
3
|
+
# 사용법: apex ./src --profile=sql-oracle
|
|
4
|
+
version: "1.0"
|
|
5
|
+
profile: "sql-oracle"
|
|
6
|
+
|
|
7
|
+
languages:
|
|
8
|
+
- language: sql
|
|
9
|
+
rules:
|
|
10
|
+
# ==================== Oracle 힌트 규칙 (4개) ====================
|
|
11
|
+
|
|
12
|
+
- id: "sql-cmt-002"
|
|
13
|
+
name: "한줄 힌트 사용"
|
|
14
|
+
severity: "high"
|
|
15
|
+
category: "comment"
|
|
16
|
+
description: "--+ 힌트 대신 /*+ */ 힌트를 사용하세요. (Oracle 전용)"
|
|
17
|
+
enabled: true
|
|
18
|
+
pattern:
|
|
19
|
+
type: "regex"
|
|
20
|
+
regex: "--\\+"
|
|
21
|
+
custom:
|
|
22
|
+
rule_id: "SQL-CMT-002"
|
|
23
|
+
|
|
24
|
+
- id: "sql-hint-001"
|
|
25
|
+
name: "힌트 무단 사용"
|
|
26
|
+
severity: "high"
|
|
27
|
+
category: "hint"
|
|
28
|
+
description: "힌트 사용은 DBA 협의가 필요합니다. (Oracle 전용)"
|
|
29
|
+
enabled: true
|
|
30
|
+
pattern:
|
|
31
|
+
type: "regex"
|
|
32
|
+
regex: "/\\*\\+[^*]*\\*/"
|
|
33
|
+
custom:
|
|
34
|
+
rule_id: "SQL-HINT-001"
|
|
35
|
+
note: "DBA 협의 필수"
|
|
36
|
+
|
|
37
|
+
- id: "sql-hint-002"
|
|
38
|
+
name: "LEADING 외 힌트"
|
|
39
|
+
severity: "high"
|
|
40
|
+
category: "hint"
|
|
41
|
+
description: "온라인 SQL에서는 LEADING 힌트만 사용 가능합니다. (Oracle 전용)"
|
|
42
|
+
enabled: true
|
|
43
|
+
pattern:
|
|
44
|
+
type: "regex"
|
|
45
|
+
regex: "/\\*\\+\\s*(?!LEADING)[A-Z_]+\\s*\\("
|
|
46
|
+
custom:
|
|
47
|
+
rule_id: "SQL-HINT-002"
|
|
48
|
+
|
|
49
|
+
- id: "sql-ast-hint-001"
|
|
50
|
+
name: "AST 힌트 무단 사용"
|
|
51
|
+
severity: "high"
|
|
52
|
+
category: "hint"
|
|
53
|
+
description: "AST 기반: 힌트 사용은 DBA 협의가 필요합니다. (Oracle 전용)"
|
|
54
|
+
enabled: true
|
|
55
|
+
pattern:
|
|
56
|
+
type: "ast-sql-hint"
|
|
57
|
+
conditions:
|
|
58
|
+
- "hint-exists"
|
|
59
|
+
custom:
|
|
60
|
+
rule_id: "SQL-AST-HINT-001"
|
|
61
|
+
|
|
62
|
+
- id: "sql-ast-hint-002"
|
|
63
|
+
name: "AST LEADING 외 힌트"
|
|
64
|
+
severity: "high"
|
|
65
|
+
category: "hint"
|
|
66
|
+
description: "AST 기반: 온라인 SQL에서는 LEADING 힌트만 사용 가능합니다. (Oracle 전용)"
|
|
67
|
+
enabled: true
|
|
68
|
+
pattern:
|
|
69
|
+
type: "ast-sql-hint"
|
|
70
|
+
conditions:
|
|
71
|
+
- "non-leading-hint"
|
|
72
|
+
custom:
|
|
73
|
+
rule_id: "SQL-AST-HINT-002"
|
|
74
|
+
|
|
75
|
+
# ==================== Oracle 전용 함수 규칙 (5개) ====================
|
|
76
|
+
|
|
77
|
+
- id: "sql-func-001"
|
|
78
|
+
name: "DECODE 사용"
|
|
79
|
+
severity: "high"
|
|
80
|
+
category: "function"
|
|
81
|
+
description: "DECODE 대신 CASE 문을 사용하세요. (Oracle 전용)"
|
|
82
|
+
enabled: true
|
|
83
|
+
pattern:
|
|
84
|
+
type: "regex"
|
|
85
|
+
regex: "\\bDECODE\\s*\\("
|
|
86
|
+
flags: "i"
|
|
87
|
+
custom:
|
|
88
|
+
rule_id: "SQL-FUNC-001"
|
|
89
|
+
|
|
90
|
+
- id: "sql-func-002"
|
|
91
|
+
name: "SUM 내 NVL"
|
|
92
|
+
severity: "low"
|
|
93
|
+
category: "function"
|
|
94
|
+
description: "SUM(NVL(COL, 0))는 불필요합니다. SUM(COL)로 충분합니다. (Oracle 전용)"
|
|
95
|
+
enabled: true
|
|
96
|
+
pattern:
|
|
97
|
+
type: "regex"
|
|
98
|
+
regex: "\\bSUM\\s*\\(\\s*NVL\\s*\\("
|
|
99
|
+
flags: "i"
|
|
100
|
+
custom:
|
|
101
|
+
rule_id: "SQL-FUNC-002"
|
|
102
|
+
|
|
103
|
+
- id: "sql-func-003"
|
|
104
|
+
name: "날짜 컬럼 TO_CHAR 가공"
|
|
105
|
+
severity: "critical"
|
|
106
|
+
category: "function"
|
|
107
|
+
description: "날짜 컬럼을 TO_CHAR로 가공하면 인덱스를 사용할 수 없습니다. (Oracle 전용)"
|
|
108
|
+
enabled: true
|
|
109
|
+
pattern:
|
|
110
|
+
type: "regex"
|
|
111
|
+
regex: "\\bWHERE[^;]*TO_CHAR\\s*\\([^,]+_DT|_DATE"
|
|
112
|
+
flags: "i"
|
|
113
|
+
custom:
|
|
114
|
+
rule_id: "SQL-FUNC-003"
|
|
115
|
+
|
|
116
|
+
- id: "sql-smell-003"
|
|
117
|
+
name: "WHERE 절 NVL/COALESCE 컬럼 감싸기"
|
|
118
|
+
severity: "high"
|
|
119
|
+
category: "performance"
|
|
120
|
+
description: "WHERE 절에서 NVL/COALESCE로 컬럼을 감싸면 인덱스를 사용할 수 없습니다. (Oracle 전용)"
|
|
121
|
+
enabled: true
|
|
122
|
+
pattern:
|
|
123
|
+
type: "regex"
|
|
124
|
+
regex: "\\bWHERE[^;]*(?:NVL|COALESCE)\\s*\\(\\s*\\w+\\.\\w+"
|
|
125
|
+
flags: "i"
|
|
126
|
+
custom:
|
|
127
|
+
rule_id: "SQL-SMELL-003"
|
|
128
|
+
fix: "IS NULL 조건과 OR를 사용하거나 NVL 대신 비교 대상 값을 변환하세요"
|
|
129
|
+
|
|
130
|
+
- id: "sql-smell-014"
|
|
131
|
+
name: "ORDER BY DBMS_RANDOM"
|
|
132
|
+
severity: "high"
|
|
133
|
+
category: "performance"
|
|
134
|
+
description: "ORDER BY DBMS_RANDOM은 전체 테이블 스캔+정렬을 유발합니다. SAMPLE을 사용하세요. (Oracle 전용)"
|
|
135
|
+
enabled: true
|
|
136
|
+
pattern:
|
|
137
|
+
type: "regex"
|
|
138
|
+
regex: "\\bORDER\\s+BY\\s+.*DBMS_RANDOM"
|
|
139
|
+
flags: "i"
|
|
140
|
+
custom:
|
|
141
|
+
rule_id: "SQL-SMELL-014"
|
|
142
|
+
fix: "SAMPLE 절 또는 ROWNUM 기반 랜덤 추출을 사용하세요"
|
|
143
|
+
|
|
144
|
+
# ==================== Oracle 전용 구문 규칙 (6개) ====================
|
|
145
|
+
|
|
146
|
+
- id: "sql-where-001"
|
|
147
|
+
name: "인덱스 컬럼 TO_CHAR 가공"
|
|
148
|
+
severity: "critical"
|
|
149
|
+
category: "where"
|
|
150
|
+
description: "인덱스 컬럼을 TO_CHAR로 가공하면 인덱스를 사용할 수 없습니다. (Oracle 전용)"
|
|
151
|
+
enabled: true
|
|
152
|
+
pattern:
|
|
153
|
+
type: "regex"
|
|
154
|
+
regex: "\\bWHERE[^;]*TO_CHAR\\s*\\(\\s*\\w+\\.\\w+|\\bWHERE[^;]*\\w+\\.\\w+\\s*[\\*\\/\\+\\-]\\s*\\d+"
|
|
155
|
+
flags: "i"
|
|
156
|
+
custom:
|
|
157
|
+
rule_id: "SQL-WHERE-001"
|
|
158
|
+
|
|
159
|
+
- id: "sql-page-001"
|
|
160
|
+
name: "ROWNUM 페이징 인라인뷰 누락"
|
|
161
|
+
severity: "high"
|
|
162
|
+
category: "paging"
|
|
163
|
+
description: "ROWNUM 사용 시 인라인뷰로 감싸야 합니다. (Oracle 전용)"
|
|
164
|
+
enabled: true
|
|
165
|
+
pattern:
|
|
166
|
+
type: "method-analysis"
|
|
167
|
+
conditions:
|
|
168
|
+
- "rownum-without-inline-view"
|
|
169
|
+
custom:
|
|
170
|
+
rule_id: "SQL-PAGE-001"
|
|
171
|
+
|
|
172
|
+
- id: "sql-dyn-001"
|
|
173
|
+
name: "Dynamic SQL (EXECUTE IMMEDIATE)"
|
|
174
|
+
severity: "high"
|
|
175
|
+
category: "restriction"
|
|
176
|
+
description: "Dynamic SQL(EXECUTE IMMEDIATE) 사용은 DBA 협의가 필요합니다. (Oracle 전용)"
|
|
177
|
+
enabled: true
|
|
178
|
+
pattern:
|
|
179
|
+
type: "regex"
|
|
180
|
+
regex: "\\bEXECUTE\\s+IMMEDIATE\\b"
|
|
181
|
+
flags: "i"
|
|
182
|
+
custom:
|
|
183
|
+
rule_id: "SQL-DYN-001"
|
|
184
|
+
|
|
185
|
+
- id: "sql-lock-002"
|
|
186
|
+
name: "FOR UPDATE WAIT"
|
|
187
|
+
severity: "high"
|
|
188
|
+
category: "lock"
|
|
189
|
+
description: "FOR UPDATE WAIT 대신 NOWAIT를 사용하세요. (Oracle 전용)"
|
|
190
|
+
enabled: true
|
|
191
|
+
pattern:
|
|
192
|
+
type: "regex"
|
|
193
|
+
regex: "\\bFOR\\s+UPDATE\\s+WAIT\\b"
|
|
194
|
+
flags: "i"
|
|
195
|
+
custom:
|
|
196
|
+
rule_id: "SQL-LOCK-002"
|
|
197
|
+
|
|
198
|
+
- id: "sql-smell-015"
|
|
199
|
+
name: "WHERE절 INSTR 사용"
|
|
200
|
+
severity: "high"
|
|
201
|
+
category: "performance"
|
|
202
|
+
description: "WHERE절에서 INSTR 함수 사용은 인덱스를 무효화합니다. (Oracle 전용)"
|
|
203
|
+
enabled: true
|
|
204
|
+
pattern:
|
|
205
|
+
type: "regex"
|
|
206
|
+
regex: "\\bWHERE[^;]*INSTR\\s*\\("
|
|
207
|
+
flags: "i"
|
|
208
|
+
custom:
|
|
209
|
+
rule_id: "SQL-SMELL-015"
|
|
210
|
+
fix: "LIKE 조건 또는 함수 기반 인덱스를 고려하세요"
|
|
211
|
+
|
|
212
|
+
- id: "sql-smell-016"
|
|
213
|
+
name: "단순 패턴에 REGEXP_LIKE"
|
|
214
|
+
severity: "low"
|
|
215
|
+
category: "performance"
|
|
216
|
+
description: "단순 패턴 매칭에 REGEXP_LIKE는 과도합니다. LIKE가 더 효율적입니다. (Oracle 전용)"
|
|
217
|
+
enabled: true
|
|
218
|
+
pattern:
|
|
219
|
+
type: "regex"
|
|
220
|
+
regex: "\\bREGEXP_LIKE\\s*\\("
|
|
221
|
+
flags: "i"
|
|
222
|
+
custom:
|
|
223
|
+
rule_id: "SQL-SMELL-016"
|
|
224
|
+
fix: "단순 패턴이라면 LIKE로 변경하세요"
|
|
225
|
+
|
|
226
|
+
# ==================== Oracle 전용 JOIN ON절 함수 (NVL 포함) ====================
|
|
227
|
+
|
|
228
|
+
- id: "sql-smell-022"
|
|
229
|
+
name: "JOIN ON절 함수 사용 (NVL 포함)"
|
|
230
|
+
severity: "high"
|
|
231
|
+
category: "performance"
|
|
232
|
+
description: "JOIN ON 조건에서 함수 사용 시 인덱스가 무효화됩니다. (Oracle 전용)"
|
|
233
|
+
enabled: true
|
|
234
|
+
pattern:
|
|
235
|
+
type: "regex-multiline"
|
|
236
|
+
regex: "\\bON\\s+[\\s\\S]*?(?:UPPER|LOWER|TRIM|TO_CHAR|NVL|COALESCE|SUBSTR)\\s*\\("
|
|
237
|
+
flags: "i"
|
|
238
|
+
custom:
|
|
239
|
+
rule_id: "SQL-SMELL-022"
|
|
240
|
+
fix: "JOIN 조건에서 함수를 제거하고 데이터 정합성을 확보하세요"
|
|
241
|
+
|
|
242
|
+
- id: "sql-oracle-020"
|
|
243
|
+
name: "Oracle (+) 구문 외부조인 사용"
|
|
244
|
+
severity: "low"
|
|
245
|
+
category: "portability"
|
|
246
|
+
description: "Oracle 전용 (+) 외부조인 구문은 ANSI LEFT/RIGHT JOIN으로 대체하세요. 이식성과 가독성이 향상됩니다."
|
|
247
|
+
enabled: true
|
|
248
|
+
pattern:
|
|
249
|
+
type: "regex"
|
|
250
|
+
regex: "\\w+\\s*\\(\\+\\)"
|
|
251
|
+
custom:
|
|
252
|
+
rule_id: "SQL-ORACLE-020"
|
|
253
|
+
fix: "LEFT JOIN 또는 RIGHT JOIN ANSI 구문으로 변경하세요"
|
|
254
|
+
|
|
255
|
+
- language: xml
|
|
256
|
+
rules:
|
|
257
|
+
- id: "sql-mybatis-004"
|
|
258
|
+
name: "MyBatis ANSI JOIN 금지"
|
|
259
|
+
severity: "high"
|
|
260
|
+
category: "join"
|
|
261
|
+
description: "MyBatis SQL에서 ANSI JOIN은 Oracle 환경에서 comma-join 사용을 권장합니다. (Oracle 전용)"
|
|
262
|
+
enabled: false
|
|
263
|
+
pattern:
|
|
264
|
+
type: "regex"
|
|
265
|
+
regex: "\\b(INNER\\s+JOIN|LEFT\\s+(OUTER\\s+)?JOIN|RIGHT\\s+(OUTER\\s+)?JOIN)\\b"
|
|
266
|
+
flags: "i"
|
|
267
|
+
custom:
|
|
268
|
+
rule_id: "SQL-MYBATIS-004"
|
|
269
|
+
|
|
270
|
+
- id: "sql-mybatis-007"
|
|
271
|
+
name: "MyBatis DECODE 사용"
|
|
272
|
+
severity: "high"
|
|
273
|
+
category: "function"
|
|
274
|
+
description: "MyBatis SQL에서 DECODE 대신 CASE를 사용하세요. (Oracle 전용)"
|
|
275
|
+
enabled: false # sql-func-001과 동일 regex 중복
|
|
276
|
+
pattern:
|
|
277
|
+
type: "regex"
|
|
278
|
+
regex: "\\bDECODE\\s*\\("
|
|
279
|
+
flags: "i"
|
|
280
|
+
custom:
|
|
281
|
+
rule_id: "SQL-MYBATIS-007"
|