Wiki source code of TQL - Tritius Query Language
Last modified by Martin Mahr on 2024/10/21 22:21
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
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 | ||
| |
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]]) |
| |
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 | ||
| |
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]]) |
| |
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 | ||
| |
2.1 | 15 | *** |
| |
1.1 | 16 | |
| 17 | {{{String workTypeName()}}} | ||
| |
2.1 | 18 | |
| |
3.1 | 19 | * |
| 20 | ** | ||
| |
1.1 | 21 | *** příklad: |
| |
2.1 | 22 | *** |
| |
1.1 | 23 | |
| 24 | {{{workTypeName = 'KN'}}} | ||
| |
2.1 | 25 | |
| |
3.1 | 26 | * |
| |
1.1 | 27 | ** u názvů metod (s parametry) se závorky musí používat |
| |
2.1 | 28 | *** |
| |
1.1 | 29 | |
| 30 | {{{boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);}}} | ||
| |
2.1 | 31 | |
| |
3.1 | 32 | * |
| 33 | ** | ||
| |
1.1 | 34 | *** příklad: |
| |
2.1 | 35 | *** |
| |
1.1 | 36 | |
| 37 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)}}} | ||
| |
2.1 | 38 | |
| |
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 | |||
| |
2.1 | 47 | | |
| |
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 | |||
| |
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 | |||
| 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 | |||
| |
2.1 | 78 | | |
| |
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 | |||
| |
2.1 | 96 | | |
| |
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 | |||
| |
2.1 | 110 | | |
| |
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 | |||
| |
2.1 | 121 | | |
| |
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 | |||
| |
2.1 | 146 | | |
| |
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 | |||
| |
2.1 | 165 | | |
| |
1.1 | 166 | |
| 167 | {{{workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) | ||
| 168 | workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1 | ||
| 169 | |||
| 170 | userElectronicBorrowingsCount(10, -3) >= 2}}} | ||
| 171 | |||
| 172 |