TQL - Tritius Query Language

Ostatnio modyfikowane 2025/11/19 14:47 przez Jan Slezák

Informacje ogólne

Jest to własny język Tritia, który umożliwia transformację do języka Java SQL.

  • można zastosować następujące metody
  • nie wszystkie warunki można przekształcić na Java lub SQL
    • zdecydowana większość (ponad 90%) warunków może być stosowana w obu językach
    • na SQL można przekształcić wszystkie warunki, które nie zwracają wartości NULL – patrz TQL – atrybuty (kod źródłowy)
  • podczas zapisywania obiektu przeprowadzana jest walidacja, czy w danym przypadku można zastosować warunek
  • składnia języka jest najbardziej zbliżona do SQL, ale jest nieco uproszczona i uzupełniona o operatory skracające zapis
  • nazwy atrybutów i funkcji są zawsze wrażliwe „case-sensitive” (zależy od wielkości liter)
    • w nazwach atrybutów bez parametrów nie stosuje się nawiasów
  •  
String workTypeName()


      • przykład:
      •  
workTypeName = 'KN'

    • w nazwach metod (z parametrami) należy stosować nawiasy
      •  
boolean workHasSubfieldValueInSubfieldIds(String value, Integer... ids);


      • przykład:
      •  
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
  • własne wyrażenia języka (IN, LIKE, IS, NOT, NULL, AND, OR, ...) są „case-insensitive” (nie rozróżniają wielkości liter)

Przykłady warunków

Porównanie wartości logicznych

Zawsze stosuje się true/false.

 
itemActive = true
itemActive = false

Operator LIKE

  • Ten operator nie jest używany, zamiast niego stosuje się trzy operatory:
    • STARTS
    • ENDS
    • CONTAINS
  • można użyć operatora NOT jako negacji wyrażenia
  • dla następującego typu dokumentu „książka” wyrażenia zwracają TRUE
 
workTypeName CONTAINS 'kniha'
workTypeName STARTS 'kn'
workTypeName STARTS 'kniha'
workTypeName ENDS 'ha'
workTypeName ENDS 'kniha'

workTypeName NOT CONTAINS 'sešit'
workTypeName NOT STARTS 'se'
workTypeName NOT ENDS 'it'

Operator LIKE IN

  • rozszerza operator LIKE o wyrażenie IN, aby skrócić zapis długich warunków
  • dla następującego typu dokumentu „książka” wyrażenia zwracają TRUE
     
 
workTypeName CONTAINS IN ('kniha', 'PE')
workTypeName CONTAINS IN ('ni', 'PE')
workTypeName STARTS IN ('kniha', 'PE')
workTypeName STARTS IN ('kni', 'PE')
workTypeName ENDS IN ('ha', 'PE')
workTypeName ENDS IN ('kniha', 'PE')

workTypeName NOT CONTAINS IN ('článek', 'PE')
workTypeName NOT STARTS IN ('čl', 'PE')
workTypeName NOT ENDS IN ('ek', 'PE')

Operator IN

  • można stosować dla wartości łańcuchowych i liczbowych
  • można stosować operator NOT jako negację wyrażenia
 
workTypeId IN (10, 11, 12)
workTypeId NOT IN (10, 11, 12)

workTypeName IN ('AN', 'BR')
workTypeName NOT IN ('AN', 'BR')

Operator BETWEEN

  • można stosować dla wartości liczbowych i dat
  • do oceny wyrażenia stosuje się <= i >=
    • dla identyfikatora typu dokumentu: 10, 11, 12 zwraca TRUE
 
workTypeId BETWEEN (10, 12)
currentDate BETWEEN ('18.08.2019', '20.08.2019')

Kontrole na NULL

  • język nie ma nic przeciwko sytuacji, w której wyrażenie ma wartość NULL (wyrażenie jest oceniane jako FALSE) – sprawdzanie wartości NULL nie jest konieczne
  • mimo że język jest bezpieczny w przypadku wartości NULL, czasami konieczne jest sprawdzenie wartości NULL (szczególnie w przypadku użycia operatora OR)
  • można użyć operatora NOT jako negacji wyrażenia
 
itemLocationName = 'Moje lokace'
itemLocationName IS NULL
itemLocationName IS NOT NULL
itemLocationName IS NULL OR itemLocationName = 'Moje lokace'
itemBorrowCategoryExternalId IS NULL OR itemBorrowCategoryExternalId != 'N'

Wyrażenia porównawcze

  • można używać wyrażeń:
    • =
    • !=
    • <>
    • <
    • >
    • <=
    • >=
  • funkcja po lewej stronie wyrażenia
    • LENGTH()
    • UPPER()
    • LOWER()
  • funkcja po prawej stronie wyrażenia
    • nowAddMonths()
 
workTypeId = 1
workTypeId > 1
workTypeId >= 1
workTypeId <> 1

LENGTH(userLastname) > 10

UPPER(userLastname) = 'NOVÁK'

LOWER(userLastname) = 'novák'

workDateCreated > nowAddMonths(-3)

Własne funkcje

  • wynikiem wywołania tych funkcji jest zawsze TRUE lub FALSE
 
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000)
workHasSubfieldValueInSubfieldIds('drt', -286200, -127000) AND workTypeId = -1

userElectronicBorrowingsCount(10, -3) >= 2