Wiki source code of TQL - Tritius Query Language
Version 1.1 by Jan Šimeček on 2024/07/16 13:07
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 | ||
| 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 |