Zpět na domů

Notace pro SQL-podmínky v JSON řetězcích

Navržena řetězcová notace pro popis SQL-podmínek v JSON konfiguracích. Podporuje porovnání, množiny, intervaly s MIN/MAX/BETWEEN. Validace přes regex, příklady transformací a analýza analogů.

Řetězcová SQL notace z JSON pro backend
Advertisement 728x90

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.

Google AdInline article slot
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:

Google AdInline article slot
  • 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

Google AdInline article slot

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

Advertisement 728x90

Číst dál