Wiki source code of TQL - Tritius Query Language

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

Hide last authors
Jan Šimeček 1.1 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)>>url:https://confluence.tritius.cz/pages/viewpage.action?pageId=184551266]] ([[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>>url:https://confluence.tritius.cz/display/TP/TQL+-+atributy]] ([[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 *** příklad:
19 ***
20
21 {{{workTypeName = 'KN'}}}
22 ** u názvů metod (s parametry) se závorky musí používat
23 ***
24
25 {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}}
26 *** příklad:
27 ***
28
29 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}}
30 * vlastní **výrazy jazyka** (IN, LIKE, IS, NOT, NULL, AND, OR, ...) jsou **case-insensitive** (nezáleží na velikosti písmen)
31
32 = Příklady podmínek =
33
34 == Porovnávání logických hodnot ==
35
36 Vždy se používá true/false
37
38 |
39
40 {{{itemActive = true
41 itemActive = false}}}
42
43 == Operátor LIKE ==
44
45 * Tento operátor se nepoužívá, místo něj se používají tři operátory:
46 ** STARTS
47 ** ENDS
48 ** CONTAINS
49 * lze použít operátor NOT jako negaci výrazu
50 * pro následující typ dokumentu '**kniha**' výrazy vrací TRUE
51
52 |
53
54 {{{workTypeName CONTAINS 'kniha'
55 workTypeName STARTS 'kn'
56 workTypeName STARTS 'kniha'
57 workTypeName ENDS 'ha'
58 workTypeName ENDS 'kniha'
59
60 workTypeName NOT CONTAINS 'sešit'
61 workTypeName NOT STARTS 'se'
62 workTypeName NOT ENDS 'it'}}}
63
64 == Operátor LIKE IN ==
65
66 * rozšiřuje operátor LIKE o výraz IN, aby byl zkrácen zápis dlouhých podmínek
67 * pro následující typ dokumentu '**kniha**' výrazy vrací TRUE
68
69 |
70
71 {{{workTypeName CONTAINS IN ('kniha', 'PE')
72 workTypeName CONTAINS IN ('ni', 'PE')
73 workTypeName STARTS IN ('kniha', 'PE')
74 workTypeName STARTS IN ('kni', 'PE')
75 workTypeName ENDS IN ('ha', 'PE')
76 workTypeName ENDS IN ('kniha', 'PE')
77
78 workTypeName NOT CONTAINS IN ('článek', 'PE')
79 workTypeName NOT STARTS IN ('čl', 'PE')
80 workTypeName NOT ENDS IN ('ek', 'PE')}}}
81
82 == Operátor IN ==
83
84 * lze použít pro řetězcové i číselné hodnoty
85 * lze použít operátor NOT jako negaci výrazu
86
87 |
88
89 {{{workTypeId IN (10, 11, 12)
90 workTypeId NOT IN (10, 11, 12)
91
92 workTypeName IN ('AN', 'BR')
93 workTypeName NOT IN ('AN', 'BR')}}}
94
95 == Operátor BETWEEN ==
96
97 * lze použít pro číselné a datumové hodnoty
98 * pro vyhodnocení výrazu se používá <= a >=
99 ** pro ID typu dokumentu: 10, 11, 12 vrací TRUE
100
101 |
102
103 {{{workTypeId BETWEEN (10, 12)
104 currentDate BETWEEN ('18.08.2019', '20.08.2019')}}}
105
106 == Kontroly na NULL ==
107
108 * jazyku nevadí ani případ, kdy je výraz NULL (výraz se vyhodnotí jako FALSE) - kontrola na NULL není třeba
109 * 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)
110 * lze použít operátor NOT jako negaci výrazu
111
112 |
113
114 {{{itemLocationName = 'Moje lokace'
115 itemLocationName IS NULL
116 itemLocationName IS NOT NULL
117 itemLocationName IS NULL OR itemLocationName = 'Moje lokace'
118 itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'}}}
119
120 == Porovnávací výrazy ==
121
122 * lze použít výrazy:
123 ** =
124 ** !=
125 ** <>
126 ** <
127 ** >
128 ** <=
129 ** >=
130 * funkce na levé straně výrazu
131 ** LENGTH()
132 ** UPPER()
133 ** LOWER()
134 * funkce na pravé straně výrazu
135 ** nowAddMonths()
136
137 |
138
139 {{{workTypeId = 1
140 workTypeId > 1
141 workTypeId >= 1
142 workTypeId <> 1
143
144 LENGTH(userLastname) > 10
145
146 UPPER(userLastname) = 'NOVÁK'
147
148 LOWER(userLastname) = 'novák'
149
150 workDateCreated > nowAddMonths(-3)}}}
151
152 == Vlastní funkce ==
153
154 * výsledkem volání těchto funkcí je vždy TRUE nebo FALSE
155
156 |
157
158 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
159 workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1
160
161 userElectronicBorrowingsCount(10, -3) >= 2}}}
162
163