JSON에서 SQL 조건 생성을 위한 컴팩트 문자열 표기법
JSON 파일에서 SQL 쿼리를 만들 때, 길고 복잡한 조건문이 자주 등장합니다. 기존 방식은 "vendor_id": [17,-23] 같은 배열을 사용해 vendor_id = 17 OR NOT vendor_id = 23으로 변환했습니다. 간결하지만 범위(range), MIN/MAX 집계, 그리고 모호한 구문을 지원하지 못하는 한계가 있었습니다.
새로운 표기법은 정규식으로 검증되는 문자열 형식을 통해 이를 해결합니다. =, <, >, ! 연산자를 사용해 모든 데이터 타입에 대한 비교, 집합, 범위, 부정을 지원합니다. 마이너스 기호(-)는 데이터 타입과 무관하게 논리 부정을 나타냅니다.
핵심 표기 요소
이 표기법은 X=operand 같은 문자열을 표준 SQL로 변환합니다. MIN, MAX, BETWEEN 같은 이진 함수도 지원합니다.
X=y -> X = y
X<y -> X < y
X>y -> X > y
X!=y -> X < y OR X > y
X<=y -> X < y OR X = y
X>=y -> X > y OR X = y
두 요소 집합의 경우:
X=[y1, y2] -> (X = y1 OR X = y2)
X>[y1, y2] -> (X > MAX(y1, y2))
X<[y1, y2] -> (X < MIN(y1, y2))
X!=[y1, y2] -> (X != y1 AND X != y2)
X<=[y1, y2] -> (X <= MIN(y1, y2))
X>=[y1, y2] -> (X >= MAX(y1, y2))
X>>[y1, y2] -> BETWEEN(y1, y2)
X><[y1, y2] -> (NOT BETWEEN(y1, y2))
임의 크기의 집합도 비슷한 로직을 따릅니다: 동등 비교는 OR, 부정은 AND, 경계는 MIN/MAX를 사용합니다.
배열 대비 장점
JSON 배열에서 문자열로 전환하면 파싱과 검증이 간단해집니다:
- 검증: 요소별 스키마 검사 대신 정규식 사용.
- 완전성: 범위와 집계 내장 지원—확장 불필요.
- 가독성: 수학적 직관 활용—
X>[y1,y2]는 X가 모든 요소보다 큼을 의미.
예시로 간결화:
전통 SQL: WHERE (age >= 18 AND age <= 65) OR age > 70
표기법: age>=[18,65] OR age>70
AI 모델 평가
DeepSeek 분석에서 강점 강조:
- 컴팩트함: 의미 손실 없이 높은 정보 밀도.
- 직관성:
X!=[y1,y2]는 어느 것とも 같지 않음을 명확히. - 확장성:
>>(포함 범위),><(제외 범위)로 범위 쉽게 추가.
잠재 문제:
- 초보자 모호성:
X>[5,10]은 MAX 이해 필요. - 빈 집합:
X=[]동작 정의 필요. - 충돌:
>>가 비트 시프트와 겹칠 수 있음.
개선 제안:
- 범위 대안:
X..[y1,y2],X:[y1,y2]. - 엄격 범위 괄호:
X>>(10,20).
유사 사례와 독창성
가장 가까운 유사 사례:
| 언어/DSL | 예시 | 유사성 |
|----------|--------------------------|-----------------------------|
| Quist | 300 <= number < 500 | 이중 비교, 집합 |
| SQL++ | lang IN ["en", "de"]| 배열 IN |
| PRQL | derive full_name = ...| 함수적 접근 |
표기법 독창성:
- BETWEEN/NOT BETWEEN을 위한 화살표
>>,><. - 집합 경계를 위한
>=[y1,y2]조합. - 완전 표현력의 미니멀리즘.
비교:
- 표기법:
age>=[18,65] OR status=[active,pending] - Quist:
(18 <= age <= 65 OR status:in active, pending) - SQL:
(age >= 18 AND age <= 65) OR status IN ('active', 'pending')
주요 요점
- SQL 전처리기나 백엔드 JSON DSL에 적합.
- 정규식 기반 파싱: 빠르고 복잡한 파서 불필요.
- 모든 비교 가능 데이터 타입 지원.
- 논리 부정용 마이너스로 통합 간소화.
- 토론용 첫 버전—최적화는 아직.
— Editorial Team
아직 댓글이 없습니다.