Wiki source code of TQL - Tritius Query Language

Last modified by Martin Mahr on 2024/10/21 22:21

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
Jan Šimeček 2.1 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]])
Jan Šimeček 1.1 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
Jan Šimeček 2.1 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]])
Jan Šimeček 1.1 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
Jan Šimeček 2.1 15 ***
Jan Šimeček 1.1 16
17 {{{String workTypeName()}}}
Jan Šimeček 2.1 18
Martin Mahr 3.1 19 *
20 **
Jan Šimeček 1.1 21 *** příklad:
Jan Šimeček 2.1 22 ***
Jan Šimeček 1.1 23
24 {{{workTypeName = 'KN'}}}
Jan Šimeček 2.1 25
Martin Mahr 3.1 26 *
Jan Šimeček 1.1 27 ** u názvů metod (s parametry) se závorky musí používat
Jan Šimeček 2.1 28 ***
Jan Šimeček 1.1 29
30 {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}}
Jan Šimeček 2.1 31
Martin Mahr 3.1 32 *
33 **
Jan Šimeček 1.1 34 *** příklad:
Jan Šimeček 2.1 35 ***
Jan Šimeček 1.1 36
37 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}}
Jan Šimeček 2.1 38
Jan Šimeček 1.1 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
Jan Šimeček 2.1 47 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 61 |
Jan Šimeček 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
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
Jan Šimeček 2.1 78 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 96 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 110 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 121 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 146 |
Jan Šimeček 1.1 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
Jan Šimeček 2.1 165 |
Jan Šimeček 1.1 166
167 {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
168 workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1
169
170 userElectronicBorrowingsCount(10, -3) >= 2}}}
171
172