Kod źródłowy Wiki TQL - Tritius Query Language

Ostatnio modyfikowane 2025/11/19 14:47 przez Jan Slezák

Pokaż ostatnich autorów
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