Wiki source code of TQL - Tritius Query Language

Version 2.1 by Jan Šimeček on 2024/07/16 13:10

Show last authors
1 = Obecné informace =
2
3 Jedná se o vlastní jazyk Tritia, který umožňuje transformace na jazyk **Java **a **SQL**.
4
5 * lze použít následující metody
6 ** viz [[TQL - metody (funkce)>>doc:.TQL-metody-funkce.WebHome]] ([[definice rozhraní>>url:https://gitlab.tritius.cz/tr/tritius/-/blob/master/project/tritius-query-language/src/main/java/cz/tritius/tql/EvaluatingMethods.java]])
7 ** součástí definice je návratový typ, který indikuje, jak je možné provádět porovnání
8 * ne všechny podmínky lze transformovat na Java nebo SQL
9 ** valná většina (přes 90%) podmínek lze použít v obou jazycích
10 ** na SQL lze transformovat všechny podmínky, které nevrací NULL - viz. [[TQL - atributy>>doc:.TQL-atributy.WebHome]] ([[zdrojový kód>>url:https://gitlab.tritius.cz/tr/tritius/-/blob/master/project/tritius-query-language/src/main/java/cz/tritius/tql/SqlBindings.java]])
11 * při ukládání objektu se provádí validace, zda je možné podmínku v tomto případě použít
12 * syntaxe jazyka je nejvíce podobná SQL, ale je trochu polidštěna a doplněna o operátory zkracující zápis
13 * **názvy atributů** a funkcí jsou vždy **case-sensitive** (záleží na velikosti písmen)
14 ** u názvů atributů bez parametrů se nepoužívají závorky
15 ***
16
17 {{{String workTypeName()}}}
18
19 *
20 **
21 *** příklad:
22 ***
23
24 {{{workTypeName = 'KN'}}}
25
26 *
27 ** u názvů metod (s parametry) se závorky musí používat
28 ***
29
30 {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}}
31
32 *
33 **
34 *** příklad:
35 ***
36
37 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}}
38
39 * vlastní **výrazy jazyka** (IN, LIKE, IS, NOT, NULL, AND, OR, ...) jsou **case-insensitive** (nezáleží na velikosti písmen)
40
41 = Příklady podmínek =
42
43 == Porovnávání logických hodnot ==
44
45 Vždy se používá true/false
46
47 |
48
49 {{{itemActive = true
50 itemActive = false}}}
51
52 == Operátor LIKE ==
53
54 * Tento operátor se nepoužívá, místo něj se používají tři operátory:
55 ** STARTS
56 ** ENDS
57 ** CONTAINS
58 * lze použít operátor NOT jako negaci výrazu
59 * pro následující typ dokumentu '**kniha**' výrazy vrací 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 == Operátor LIKE IN ==
74
75 * rozšiřuje operátor LIKE o výraz IN, aby byl zkrácen zápis dlouhých podmínek
76 * pro následující typ dokumentu '**kniha**' výrazy vrací TRUE
77
78 |
79
80 {{{workTypeName CONTAINS IN ('kniha', 'PE')
81 workTypeName CONTAINS IN ('ni', 'PE')
82 workTypeName STARTS IN ('kniha', 'PE')
83 workTypeName STARTS IN ('kni', 'PE')
84 workTypeName ENDS IN ('ha', 'PE')
85 workTypeName ENDS IN ('kniha', 'PE')
86
87 workTypeName NOT CONTAINS IN ('článek', 'PE')
88 workTypeName NOT STARTS IN ('čl', 'PE')
89 workTypeName NOT ENDS IN ('ek', 'PE')}}}
90
91 == Operátor IN ==
92
93 * lze použít pro řetězcové i číselné hodnoty
94 * lze použít operátor NOT jako negaci výrazu
95
96 |
97
98 {{{workTypeId IN (10, 11, 12)
99 workTypeId NOT IN (10, 11, 12)
100
101 workTypeName IN ('AN', 'BR')
102 workTypeName NOT IN ('AN', 'BR')}}}
103
104 == Operátor BETWEEN ==
105
106 * lze použít pro číselné a datumové hodnoty
107 * pro vyhodnocení výrazu se používá <= a >=
108 ** pro ID typu dokumentu: 10, 11, 12 vrací TRUE
109
110 |
111
112 {{{workTypeId BETWEEN (10, 12)
113 currentDate BETWEEN ('18.08.2019', '20.08.2019')}}}
114
115 == Kontroly na NULL ==
116
117 * jazyku nevadí ani případ, kdy je výraz NULL (výraz se vyhodnotí jako FALSE) - kontrola na NULL není třeba
118 * 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)
119 * lze použít operátor NOT jako negaci výrazu
120
121 |
122
123 {{{itemLocationName = 'Moje lokace'
124 itemLocationName IS NULL
125 itemLocationName IS NOT NULL
126 itemLocationName IS NULL OR itemLocationName = 'Moje lokace'
127 itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'}}}
128
129 == Porovnávací výrazy ==
130
131 * lze použít výrazy:
132 ** =
133 ** !=
134 ** <>
135 ** <
136 ** >
137 ** <=
138 ** >=
139 * funkce na levé straně výrazu
140 ** LENGTH()
141 ** UPPER()
142 ** LOWER()
143 * funkce na pravé straně výrazu
144 ** nowAddMonths()
145
146 |
147
148 {{{workTypeId = 1
149 workTypeId > 1
150 workTypeId >= 1
151 workTypeId <> 1
152
153 LENGTH(userLastname) > 10
154
155 UPPER(userLastname) = 'NOVÁK'
156
157 LOWER(userLastname) = 'novák'
158
159 workDateCreated > nowAddMonths(-3)}}}
160
161 == Vlastní funkce ==
162
163 * výsledkem volání těchto funkcí je vždy TRUE nebo FALSE
164
165 |
166
167 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
168 workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1
169
170 userElectronicBorrowingsCount(10, -3) >= 2}}}
171
172