Kod źródłowy Wiki TQL - Tritius Query Language
Ostatnio modyfikowane 2025/11/19 14:47 przez Jan Slezák
Ukryj ostatnich autorów
| author | version | line-number | content |
|---|---|---|---|
| |
3.1 | 1 | = Informacje ogólne = |
| |
1.1 | 2 | |
| |
3.1 | 3 | Jest to własny język Tritia, który umożliwia transformację do języka **Java **i **SQL**. |
| |
1.1 | 4 | |
| |
3.1 | 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 | * | ||
| |
1.1 | 16 | |
| 17 | {{{String workTypeName()}}} | ||
| |
2.1 | 18 | |
| 19 | * | ||
| 20 | ** | ||
| |
3.1 | 21 | *** przykład: |
| |
2.1 | 22 | *** |
| |
1.1 | 23 | |
| 24 | {{{workTypeName = 'KN'}}} | ||
| |
2.1 | 25 | |
| 26 | * | ||
| |
3.1 | 27 | ** w nazwach metod (z parametrami) należy stosować nawiasy |
| |
2.1 | 28 | *** |
| |
1.1 | 29 | |
| 30 | {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}} | ||
| |
2.1 | 31 | |
| 32 | * | ||
| 33 | ** | ||
| |
3.1 | 34 | *** przykład: |
| |
2.1 | 35 | *** |
| |
1.1 | 36 | |
| 37 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}} | ||
| |
2.1 | 38 | |
| |
3.1 | 39 | * własne **wyrażenia języka** (IN, LIKE, IS, NOT, NULL, AND, OR, ...) są „**case-insensitive**” (nie rozróżniają wielkości liter) |
| |
1.1 | 40 | |
| |
3.1 | 41 | = Przykłady warunków = |
| |
1.1 | 42 | |
| |
3.1 | 43 | == Porównanie wartości logicznych == |
| |
1.1 | 44 | |
| |
3.1 | 45 | Zawsze stosuje się true/false. |
| |
1.1 | 46 | |
| |
2.1 | 47 | | |
| |
1.1 | 48 | |
| 49 | {{{itemActive = true | ||
| 50 | itemActive = false}}} | ||
| 51 | |||
| |
3.1 | 52 | == Operator LIKE == |
| |
1.1 | 53 | |
| |
3.1 | 54 | * Ten operator nie jest używany, zamiast niego stosuje się trzy operatory: |
| |
1.1 | 55 | ** STARTS |
| 56 | ** ENDS | ||
| 57 | ** CONTAINS | ||
| |
3.1 | 58 | * można użyć operatora NOT jako negacji wyrażenia |
| 59 | * dla następującego typu dokumentu „**książka**” wyrażenia zwracają TRUE | ||
| |
1.1 | 60 | |
| |
2.1 | 61 | | |
| |
1.1 | 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 | |||
| |
3.1 | 73 | == Operator LIKE IN == |
| |
1.1 | 74 | |
| |
3.1 | 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 | |||
| |
1.1 | 78 | |
| |
2.1 | 79 | | |
| |
1.1 | 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 | |||
| |
3.1 | 92 | == Operator IN == |
| |
1.1 | 93 | |
| |
3.1 | 94 | * można stosować dla wartości łańcuchowych i liczbowych |
| 95 | * można stosować operator NOT jako negację wyrażenia | ||
| |
1.1 | 96 | |
| |
2.1 | 97 | | |
| |
1.1 | 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 | |||
| |
3.1 | 105 | == Operator BETWEEN == |
| |
1.1 | 106 | |
| |
3.1 | 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 | ||
| |
1.1 | 110 | |
| |
2.1 | 111 | | |
| |
1.1 | 112 | |
| 113 | {{{workTypeId BETWEEN (10, 12) | ||
| 114 | currentDate BETWEEN ('18.08.2019', '20.08.2019')}}} | ||
| 115 | |||
| |
3.1 | 116 | == Kontrole na NULL == |
| |
1.1 | 117 | |
| |
3.1 | 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 | ||
| |
1.1 | 121 | |
| |
2.1 | 122 | | |
| |
1.1 | 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 | |||
| |
3.1 | 130 | == Wyrażenia porównawcze == |
| |
1.1 | 131 | |
| |
3.1 | 132 | * można używać wyrażeń: |
| |
1.1 | 133 | ** = |
| 134 | ** != | ||
| 135 | ** <> | ||
| 136 | ** < | ||
| 137 | ** > | ||
| 138 | ** <= | ||
| 139 | ** >= | ||
| |
3.1 | 140 | * funkcja po lewej stronie wyrażenia |
| |
1.1 | 141 | ** LENGTH() |
| 142 | ** UPPER() | ||
| 143 | ** LOWER() | ||
| |
3.1 | 144 | * funkcja po prawej stronie wyrażenia |
| |
1.1 | 145 | ** nowAddMonths() |
| 146 | |||
| |
2.1 | 147 | | |
| |
1.1 | 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 | |||
| |
3.1 | 162 | == Własne funkcje == |
| |
1.1 | 163 | |
| |
3.1 | 164 | * wynikiem wywołania tych funkcji jest zawsze TRUE lub FALSE |
| |
1.1 | 165 | |
| |
2.1 | 166 | | |
| |
1.1 | 167 | |
| 168 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) | ||
| 169 | workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1 | ||
| 170 | |||
| 171 | userElectronicBorrowingsCount(10, -3) >= 2}}} | ||
| 172 | |||
| 173 |