TQL - Tritius Query Language
Ostatnio modyfikowane 2025/11/19 14:47 przez Jan Slezák
Informacje ogólne
Jest to własny język Tritia, który umożliwia transformację do języka Java i SQL.
- można zastosować następujące metody
- patrz TQL – metody (funkcje) (definicja interfejsu)
- częścią definicji jest typ zwracany, który wskazuje, w jaki sposób można przeprowadzić porównanie
- nie wszystkie warunki można przekształcić na Java lub SQL
- zdecydowana większość (ponad 90%) warunków może być stosowana w obu językach
- na SQL można przekształcić wszystkie warunki, które nie zwracają wartości NULL – patrz TQL – atrybuty (kod źródłowy)
- podczas zapisywania obiektu przeprowadzana jest walidacja, czy w danym przypadku można zastosować warunek
- składnia języka jest najbardziej zbliżona do SQL, ale jest nieco uproszczona i uzupełniona o operatory skracające zapis
- nazwy atrybutów i funkcji są zawsze wrażliwe „case-sensitive” (zależy od wielkości liter)
- w nazwach atrybutów bez parametrów nie stosuje się nawiasów
String workTypeName()
- przykład:
workTypeName = 'KN'
- w nazwach metod (z parametrami) należy stosować nawiasy
- w nazwach metod (z parametrami) należy stosować nawiasy
boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);
- przykład:
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)- własne wyrażenia języka (IN, LIKE, IS, NOT, NULL, AND, OR, ...) są „case-insensitive” (nie rozróżniają wielkości liter)
Przykłady warunków
Porównanie wartości logicznych
Zawsze stosuje się true/false.
itemActive = true itemActive = false
Operator LIKE
- Ten operator nie jest używany, zamiast niego stosuje się trzy operatory:
- STARTS
- ENDS
- CONTAINS
- można użyć operatora NOT jako negacji wyrażenia
- dla następującego typu dokumentu „książka” wyrażenia zwracają 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'
Operator LIKE IN
- rozszerza operator LIKE o wyrażenie IN, aby skrócić zapis długich warunków
- dla następującego typu dokumentu „książka” wyrażenia zwracają 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')Operator IN
- można stosować dla wartości łańcuchowych i liczbowych
- można stosować operator NOT jako negację wyrażenia
workTypeId IN (10, 11, 12)
workTypeId NOT IN (10, 11, 12)
workTypeName IN ('AN', 'BR')
workTypeName NOT IN ('AN', 'BR')Operator BETWEEN
- można stosować dla wartości liczbowych i dat
- do oceny wyrażenia stosuje się <= i >=
- dla identyfikatora typu dokumentu: 10, 11, 12 zwraca TRUE
workTypeId BETWEEN (10, 12)
currentDate BETWEEN ('18.08.2019', '20.08.2019')Kontrole na NULL
- język nie ma nic przeciwko sytuacji, w której wyrażenie ma wartość NULL (wyrażenie jest oceniane jako FALSE) – sprawdzanie wartości NULL nie jest konieczne
- mimo że język jest bezpieczny w przypadku wartości NULL, czasami konieczne jest sprawdzenie wartości NULL (szczególnie w przypadku użycia operatora OR)
- można użyć operatora NOT jako negacji wyrażenia
itemLocationName = 'Moje lokace' itemLocationName IS NULL itemLocationName IS NOT NULL itemLocationName IS NULL OR itemLocationName = 'Moje lokace' itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'
Wyrażenia porównawcze
- można używać wyrażeń:
- =
- !=
- <>
- <
- >
- <=
- >=
- funkcja po lewej stronie wyrażenia
- LENGTH()
- UPPER()
- LOWER()
- funkcja po prawej stronie wyrażenia
- nowAddMonths()
workTypeId = 1 workTypeId > 1 workTypeId >= 1 workTypeId <> 1 LENGTH(userLastname) > 10 UPPER(userLastname) = 'NOVÁK' LOWER(userLastname) = 'novák' workDateCreated > nowAddMonths(-3)
Własne funkcje
- wynikiem wywołania tych funkcji jest zawsze TRUE lub FALSE
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1
userElectronicBorrowingsCount(10, -3) >= 2