TQL - Tritius Query Language

Last modified by Martin Mahr on 2024/10/21 22:21

Obecné informace

Jedná se o vlastní jazyk Tritia, který umožňuje transformace na jazyk Java a SQL.

  • lze použít následující metody
  • ne všechny podmínky lze transformovat na Java nebo SQL
    • valná většina (přes 90%) podmínek lze použít v obou jazycích
    • na SQL lze transformovat všechny podmínky, které nevrací NULL - viz. TQL - atributy (zdrojový kód)
  • při ukládání objektu se provádí validace, zda je možné podmínku v tomto případě použít
  • syntaxe jazyka je nejvíce podobná SQL, ale je trochu polidštěna a doplněna o operátory zkracující zápis
  • názvy atributů a funkcí jsou vždy case-sensitive (záleží na velikosti písmen)
    • u názvů atributů bez parametrů se nepoužívají závorky
      •  
String workTypeName()
      • příklad:
      •  
workTypeName = 'KN'
    • u názvů metod (s parametry) se závorky musí používat
      •  
boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);
      • příklad:
      •  
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
  • vlastní výrazy jazyka (IN, LIKE, IS, NOT, NULL, AND, OR, ...) jsou case-insensitive (nezáleží na velikosti písmen)

Příklady podmínek

Porovnávání logických hodnot

Vždy se používá true/false

 
itemActive = true
itemActive = false

Operátor LIKE

  • Tento operátor se nepoužívá, místo něj se používají tři operátory:
    • STARTS
    • ENDS
    • CONTAINS
  • lze použít operátor NOT jako negaci výrazu
  • pro následující typ dokumentu 'kniha' výrazy vrací TRUE
 
workTypeName CONTAINS 'kniha'
workTypeName STARTS 'kn'
workTypeName STARTS 'kniha'
workTypeName ENDS 'ha'
workTypeName ENDS 'kniha'

workTypeName NOT CONTAINS 'sešit'
workTypeName NOT STARTS 'se'
workTypeName NOT ENDS 'it'

Operátor LIKE IN

  • rozšiřuje operátor LIKE o výraz IN, aby byl zkrácen zápis dlouhých podmínek
  • pro následující typ dokumentu 'kniha' výrazy vrací TRUE
 
workTypeName CONTAINS IN ('kniha', 'PE')
workTypeName CONTAINS IN ('ni', 'PE')
workTypeName STARTS IN ('kniha', 'PE')
workTypeName STARTS IN ('kni', 'PE')
workTypeName ENDS IN ('ha', 'PE')
workTypeName ENDS IN ('kniha', 'PE')

workTypeName NOT CONTAINS IN ('článek', 'PE')
workTypeName NOT STARTS IN ('čl', 'PE')
workTypeName NOT ENDS IN ('ek', 'PE')

Operátor IN

  • lze použít pro řetězcové i číselné hodnoty
  • lze použít operátor NOT jako negaci výrazu
 
workTypeId IN (10, 11, 12)
workTypeId NOT IN (10, 11, 12)

workTypeName IN ('AN', 'BR')
workTypeName NOT IN ('AN', 'BR')

Operátor BETWEEN

  • lze použít pro číselné a datumové hodnoty
  • pro vyhodnocení výrazu se používá <= a >=
    • pro ID typu dokumentu: 10, 11, 12 vrací TRUE
 
workTypeId BETWEEN (10, 12)
currentDate BETWEEN ('18.08.2019', '20.08.2019')

Kontroly na NULL

  • jazyku nevadí ani případ, kdy je výraz NULL (výraz se vyhodnotí jako FALSE) - kontrola na NULL není třeba
  • i když je jazyk bezpečný na NULL hodnoty, občas je třeba provést kontrolu na NULL hodnotu (zejména při použití operátoru OR)
  • lze použít operátor NOT jako negaci výrazu
 
itemLocationName = 'Moje lokace'
itemLocationName IS NULL
itemLocationName IS NOT NULL
itemLocationName IS NULL OR itemLocationName = 'Moje lokace'
itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'

Porovnávací výrazy

  • lze použít výrazy:
    • =
    • !=
    • <>
    • <
    • >
    • <=
    • >=
  • funkce na levé straně výrazu
    • LENGTH()
    • UPPER()
    • LOWER()
  • funkce na pravé straně výrazu
    • nowAddMonths()
 
workTypeId = 1
workTypeId > 1
workTypeId >= 1
workTypeId <> 1

LENGTH(userLastname) > 10

UPPER(userLastname) = 'NOVÁK'

LOWER(userLastname) = 'novák'

workDateCreated > nowAddMonths(-3)

Vlastní funkce

  • výsledkem volání těchto funkcí je vždy TRUE nebo FALSE
 
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1

userElectronicBorrowingsCount(10, -3) >= 2