Skip to content

Commit 92c50aa

Browse files
committed
DB 다이얼렉트 프리셋 및 옵션 정의 모듈 추가
1 parent 7371ea6 commit 92c50aa

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed

interface/dialects.py

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
"""
2+
다이얼렉트 프리셋과 옵션 정의 모듈.
3+
4+
이 모듈은 다음을 제공합니다:
5+
6+
- DialectOption: 각 SQL 엔진 특성 데이터클래스
7+
- name: 엔진 표시 이름 (예: "PostgreSQL", "ClickHouse")
8+
- supports_ilike: 대소문자 무시 비교(ILIKE) 지원 여부
9+
- hints: 자주 쓰이는/효과적인 함수의 간결 목록 + 짧은 메모
10+
- 예: ["DATE_TRUNC (날짜 절단)", "STRING_AGG (문자 집계)"]
11+
12+
- PRESET_DIALECTS: 대표 SQL 엔진들의 기본 프리셋 모음
13+
- PostgreSQL, ClickHouse, Trino, Snowflake, Redshift, BigQuery, MSSQL, Oracle, DuckDB
14+
15+
주 사용처:
16+
- Streamlit UI에서 프리셋 선택 및 커스텀 다이얼렉트 입력의 기준 데이터
17+
- Lang2SQL 파이프라인에서 프롬프트/키워드 힌트 구성
18+
19+
주의:
20+
- hints는 프롬프트 가이드용이며 실행 보장을 의미하지 않습니다.
21+
- 실제 문법/함수 지원은 엔진 버전 및 설정에 따라 달라질 수 있습니다.
22+
"""
23+
24+
from __future__ import annotations
25+
26+
from dataclasses import asdict, dataclass, field
27+
from typing import Dict, List
28+
29+
30+
@dataclass
31+
class DialectOption:
32+
name: str
33+
supports_ilike: bool = False
34+
hints: List[str] = field(default_factory=list)
35+
36+
def to_dict(self) -> Dict:
37+
return asdict(self)
38+
39+
@staticmethod
40+
def from_dict(data: Dict) -> "DialectOption":
41+
return DialectOption(
42+
name=data.get("name", "Custom"),
43+
supports_ilike=bool(data.get("supports_ilike", False)),
44+
hints=list(data.get("hints", data.get("keyword_hints", []))),
45+
)
46+
47+
48+
PRESET_DIALECTS: Dict[str, DialectOption] = {
49+
"PostgreSQL": DialectOption(
50+
name="PostgreSQL",
51+
supports_ilike=True,
52+
hints=[
53+
"COALESCE (널 대체)",
54+
"DATE_TRUNC (날짜 절단)",
55+
"STRING_AGG (문자 집계)",
56+
"GENERATE_SERIES (시퀀스 생성)",
57+
],
58+
),
59+
"ClickHouse": DialectOption(
60+
name="ClickHouse",
61+
supports_ilike=False,
62+
hints=[
63+
"toDate (날짜 변환)",
64+
"dateDiff (날짜 차이)",
65+
"arrayJoin (배열 펼치기)",
66+
"groupArray (배열 집계)",
67+
],
68+
),
69+
"Trino": DialectOption(
70+
name="Trino",
71+
supports_ilike=False,
72+
hints=[
73+
"date_trunc (날짜 절단)",
74+
"try_cast (안전 변환)",
75+
"coalesce (널 대체)",
76+
"regexp_like (정규식 매칭)",
77+
],
78+
),
79+
"Snowflake": DialectOption(
80+
name="Snowflake",
81+
supports_ilike=True,
82+
hints=[
83+
"IFF (조건 분기)",
84+
"TO_DATE (날짜 변환)",
85+
"DATE_TRUNC (날짜 절단)",
86+
"LISTAGG (문자 집계)",
87+
],
88+
),
89+
"Redshift": DialectOption(
90+
name="Redshift",
91+
supports_ilike=True,
92+
hints=[
93+
"COALESCE (널 대체)",
94+
"DATE_TRUNC (날짜 절단)",
95+
"LISTAGG (문자 집계)",
96+
"REGEXP_REPLACE (정규식 치환)",
97+
],
98+
),
99+
"BigQuery": DialectOption(
100+
name="BigQuery",
101+
supports_ilike=False,
102+
hints=[
103+
"SAFE_CAST (안전 변환)",
104+
"DATE_TRUNC (날짜 절단)",
105+
"ARRAY_AGG (배열 집계)",
106+
"REGEXP_CONTAINS (정규식 포함)",
107+
],
108+
),
109+
"MSSQL": DialectOption(
110+
name="MSSQL",
111+
supports_ilike=False,
112+
hints=[
113+
"ISNULL (널 대체)",
114+
"DATEADD (날짜 가감)",
115+
"CONVERT (형 변환)",
116+
"STRING_AGG (문자 집계)",
117+
],
118+
),
119+
"Oracle": DialectOption(
120+
name="Oracle",
121+
supports_ilike=False,
122+
hints=[
123+
"NVL (널 대체)",
124+
"TO_DATE (날짜 변환)",
125+
"TRUNC (날짜 절단)",
126+
"LISTAGG (문자 집계)",
127+
],
128+
),
129+
"DuckDB": DialectOption(
130+
name="DuckDB",
131+
supports_ilike=True,
132+
hints=[
133+
"date_trunc (날짜 절단)",
134+
"string_agg (문자 집계)",
135+
"coalesce (널 대체)",
136+
"regexp_replace (정규식 치환)",
137+
],
138+
),
139+
}

0 commit comments

Comments
 (0)