Kod źródłowy Wiki TQL - Tritius Query Language
Ostatnio modyfikowane 2025/11/19 14:47 przez Jan Slezák
Pokaż ostatnich autorów
| author | version | line-number | content |
|---|---|---|---|
| 1 | = Informacje ogólne = | ||
| 2 | |||
| 3 | Jest to własny język Tritia, który umożliwia transformację do języka **Java **i **SQL**. | ||
| 4 | |||
| 5 | * można zastosować następujące metody | ||
| 6 | ** patrz [[TQL – metody (funkcje)>>doc:.TQL-metody-funkce.WebHome]] ([[definicja interfejsu>>https://gitlab.tritius.cz/tr/tritius/-/blob/master/project/tritius-query-language/src/main/java/cz/tritius/tql/EvaluatingMethods.java]]) | ||
| 7 | ** częścią definicji jest typ zwracany, który wskazuje, w jaki sposób można przeprowadzić porównanie | ||
| 8 | * nie wszystkie warunki można przekształcić na Java lub SQL | ||
| 9 | ** zdecydowana większość (ponad 90%) warunków może być stosowana w obu językach | ||
| 10 | ** na SQL można przekształcić wszystkie warunki, które nie zwracają wartości NULL – patrz TQL – atrybuty (kod źródłowy) | ||
| 11 | * podczas zapisywania obiektu przeprowadzana jest walidacja, czy w danym przypadku można zastosować warunek | ||
| 12 | * składnia języka jest najbardziej zbliżona do SQL, ale jest nieco uproszczona i uzupełniona o operatory skracające zapis | ||
| 13 | * **nazwy atrybutów** i funkcji są zawsze wrażliwe „**case-sensitive**” (zależy od wielkości liter) | ||
| 14 | ** w nazwach atrybutów bez parametrów nie stosuje się nawiasów | ||
| 15 | * | ||
| 16 | |||
| 17 | {{{String workTypeName()}}} | ||
| 18 | |||
| 19 | * | ||
| 20 | ** | ||
| 21 | *** przykład: | ||
| 22 | *** | ||
| 23 | |||
| 24 | {{{workTypeName = 'KN'}}} | ||
| 25 | |||
| 26 | * | ||
| 27 | ** w nazwach metod (z parametrami) należy stosować nawiasy | ||
| 28 | *** | ||
| 29 | |||
| 30 | {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}} | ||
| 31 | |||
| 32 | * | ||
| 33 | ** | ||
| 34 | *** przykład: | ||
| 35 | *** | ||
| 36 | |||
| 37 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}} | ||
| 38 | |||
| 39 | * własne **wyrażenia języka** (IN, LIKE, IS, NOT, NULL, AND, OR, ...) są „**case-insensitive**” (nie rozróżniają wielkości liter) | ||
| 40 | |||
| 41 | = Przykłady warunków = | ||
| 42 | |||
| 43 | == Porównanie wartości logicznych == | ||
| 44 | |||
| 45 | Zawsze stosuje się true/false. | ||
| 46 | |||
| 47 | | | ||
| 48 | |||
| 49 | {{{itemActive = true | ||
| 50 | itemActive = false}}} | ||
| 51 | |||
| 52 | == Operator LIKE == | ||
| 53 | |||
| 54 | * Ten operator nie jest używany, zamiast niego stosuje się trzy operatory: | ||
| 55 | ** STARTS | ||
| 56 | ** ENDS | ||
| 57 | ** CONTAINS | ||
| 58 | * można użyć operatora NOT jako negacji wyrażenia | ||
| 59 | * dla następującego typu dokumentu „**książka**” wyrażenia zwracają TRUE | ||
| 60 | |||
| 61 | | | ||
| 62 | |||
| 63 | {{{workTypeName CONTAINS 'kniha' | ||
| 64 | workTypeName STARTS 'kn' | ||
| 65 | workTypeName STARTS 'kniha' | ||
| 66 | workTypeName ENDS 'ha' | ||
| 67 | workTypeName ENDS 'kniha' | ||
| 68 | |||
| 69 | workTypeName NOT CONTAINS 'sešit' | ||
| 70 | workTypeName NOT STARTS 'se' | ||
| 71 | workTypeName NOT ENDS 'it'}}} | ||
| 72 | |||
| 73 | == Operator LIKE IN == | ||
| 74 | |||
| 75 | * rozszerza operator LIKE o wyrażenie IN, aby skrócić zapis długich warunków | ||
| 76 | * dla następującego typu dokumentu „**książka**” wyrażenia zwracają TRUE | ||
| 77 | |||
| 78 | |||
| 79 | | | ||
| 80 | |||
| 81 | {{{workTypeName CONTAINS IN ('kniha', 'PE') | ||
| 82 | workTypeName CONTAINS IN ('ni', 'PE') | ||
| 83 | workTypeName STARTS IN ('kniha', 'PE') | ||
| 84 | workTypeName STARTS IN ('kni', 'PE') | ||
| 85 | workTypeName ENDS IN ('ha', 'PE') | ||
| 86 | workTypeName ENDS IN ('kniha', 'PE') | ||
| 87 | |||
| 88 | workTypeName NOT CONTAINS IN ('článek', 'PE') | ||
| 89 | workTypeName NOT STARTS IN ('čl', 'PE') | ||
| 90 | workTypeName NOT ENDS IN ('ek', 'PE')}}} | ||
| 91 | |||
| 92 | == Operator IN == | ||
| 93 | |||
| 94 | * można stosować dla wartości łańcuchowych i liczbowych | ||
| 95 | * można stosować operator NOT jako negację wyrażenia | ||
| 96 | |||
| 97 | | | ||
| 98 | |||
| 99 | {{{workTypeId IN (10, 11, 12) | ||
| 100 | workTypeId NOT IN (10, 11, 12) | ||
| 101 | |||
| 102 | workTypeName IN ('AN', 'BR') | ||
| 103 | workTypeName NOT IN ('AN', 'BR')}}} | ||
| 104 | |||
| 105 | == Operator BETWEEN == | ||
| 106 | |||
| 107 | * można stosować dla wartości liczbowych i dat | ||
| 108 | * do oceny wyrażenia stosuje się <= i >= | ||
| 109 | ** dla identyfikatora typu dokumentu: 10, 11, 12 zwraca TRUE | ||
| 110 | |||
| 111 | | | ||
| 112 | |||
| 113 | {{{workTypeId BETWEEN (10, 12) | ||
| 114 | currentDate BETWEEN ('18.08.2019', '20.08.2019')}}} | ||
| 115 | |||
| 116 | == Kontrole na NULL == | ||
| 117 | |||
| 118 | * 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 | ||
| 119 | * 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) | ||
| 120 | * można użyć operatora NOT jako negacji wyrażenia | ||
| 121 | |||
| 122 | | | ||
| 123 | |||
| 124 | {{{itemLocationName = 'Moje lokace' | ||
| 125 | itemLocationName IS NULL | ||
| 126 | itemLocationName IS NOT NULL | ||
| 127 | itemLocationName IS NULL OR itemLocationName = 'Moje lokace' | ||
| 128 | itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'}}} | ||
| 129 | |||
| 130 | == Wyrażenia porównawcze == | ||
| 131 | |||
| 132 | * można używać wyrażeń: | ||
| 133 | ** = | ||
| 134 | ** != | ||
| 135 | ** <> | ||
| 136 | ** < | ||
| 137 | ** > | ||
| 138 | ** <= | ||
| 139 | ** >= | ||
| 140 | * funkcja po lewej stronie wyrażenia | ||
| 141 | ** LENGTH() | ||
| 142 | ** UPPER() | ||
| 143 | ** LOWER() | ||
| 144 | * funkcja po prawej stronie wyrażenia | ||
| 145 | ** nowAddMonths() | ||
| 146 | |||
| 147 | | | ||
| 148 | |||
| 149 | {{{workTypeId = 1 | ||
| 150 | workTypeId > 1 | ||
| 151 | workTypeId >= 1 | ||
| 152 | workTypeId <> 1 | ||
| 153 | |||
| 154 | LENGTH(userLastname) > 10 | ||
| 155 | |||
| 156 | UPPER(userLastname) = 'NOVÁK' | ||
| 157 | |||
| 158 | LOWER(userLastname) = 'novák' | ||
| 159 | |||
| 160 | workDateCreated > nowAddMonths(-3)}}} | ||
| 161 | |||
| 162 | == Własne funkcje == | ||
| 163 | |||
| 164 | * wynikiem wywołania tych funkcji jest zawsze TRUE lub FALSE | ||
| 165 | |||
| 166 | | | ||
| 167 | |||
| 168 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) | ||
| 169 | workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1 | ||
| 170 | |||
| 171 | userElectronicBorrowingsCount(10, -3) >= 2}}} | ||
| 172 | |||
| 173 |