Kompaktní řetězcová notace pro generování SQL podmínek z JSON
Při tvorbě SQL dotazů na základě JSON souborů vznikají dlouhé podmínkové výrazy. Původní přístup používal pole jako "vendor_id": [17,-23], která se převáděla na vendor_id = 17 OR NOT vendor_id = 23. To je kompaktní, ale neúplné: chybí podpora intervalů, agregací MIN/MAX a syntax je nejednoznačný.
Nová notace řeší problém ve formátu řetězce, validovaného regulárními výrazy. Pokrývá porovnání, množiny, intervaly a negace pro libovolné typy s operacemi =, <, >, !. Znak mínus označuje logickou negaci, bez ohledu na datový typ.
Základní konstrukce notace
Notace převádí řetězce ve tvaru X=operand na standardní SQL. Podporuje binární funkce 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
Pro množiny se dvěma prvky:
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))
Pro množiny libovolné velikosti platí stejná logika: OR pro rovnosti, AND pro negace, MIN/MAX pro hranice.
Výhody oproti polím
Přechod z JSON polí na řetězce zjednodušuje parsování a validaci:
- Validace: Regulární výrazy místo kontroly prvků po prvcích.
- Úplnost: Podpora intervalů a agregací bez rozšíření.
- Čitelnost: Matematická intuice —
X>[y1,y2]znamená X větší než všechny prvky.
Příklad zkrácení:
Tradiční SQL: WHERE (age >= 18 AND age <= 65) OR age > 70
Notace: age>=[18,65] OR age>70
Hodnocení od modelu AI
Analýza DeepSeek potvrzuje silné stránky:
- Kompaktnost: Vysoká hustota bez ztráty smyslu.
- Intuitivnost:
X!=[y1,y2]— nerovná se žádnému. - Rozšiřitelnost: Snadno přidat intervaly s
>>(rozšíření) a><(mezera).
Potenciální problémy:
- Nejednoznačnost pro začátečníky:
X>[5,10]vyžaduje pochopení MAX. - Prázdné množiny: Nutné definovat chování
X=[]. - Konflikty:
>>může kolidovat s bitovými posuny.
Návrhy vylepšení:
- Alternativy pro intervaly:
X..[y1,y2],X:[y1,y2]. - Závorky pro striktní intervaly:
X>>(10,20).
Analogie a jedinečnost
Nejbližší analogy:
| Jazyk/DSL | Příklad | Podobnost |
|-----------|---------|-----------|
| Quist | 300 <= number < 500 | Dvojitá porovnání, množiny |
| SQL++ | lang IN ["en", "de"] | IN pro pole |
| PRQL | derive full_name = ... | Funkcionální přístup |
Jedinečnost notace:
- Šipky
>>,><pro BETWEEN/NOT BETWEEN. - Kombinace
>=[y1,y2]pro hranice množin. - Minimalismus s zachováním výraznosti.
Srovnání:
- Notace:
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')
Co je důležité
- Notace je určena pro předzpracovače SQL nebo JSON DSL na backendu.
- Parsování přes regex: rychlé, bez složitých parserů.
- Podpora libovolných typů s porovnatelnými operacemi.
- Logický mínus pro negace zjednodušuje unifikaci.
- První verze — k diskuzi, bez optimalizací.
— Editorial Team
Zatím žádné komentáře.