TQL
U kunt TQL gebruiken bij het maken van filters en aangepaste velden in rapporten. TQL is gebaseerd op standaard SQL. TQL wordt alleen gebruikt voor queries, dus veel SQL operaties zoals INSERT, CREATE etc. en veel van de gereserveerde woorden zijn betekenisloos in Easyplan.

- Het LIKE keyword kan zowel reguliere expressies als ook SQL wildcard karakters bevatten. Om te wisselen tussen de normale SQL syntaxis (waarbij % en _ karakters op dezelfde manier worden gebruikt als * en ? in DOS) en het gebruik van reguliere expressies, moet u de voorloop het keyword REGEX voor de tekststring karakter reeksen plaatsen.
- U kunt geen Escape optie gebruiken; het escape karakter is altijd '/'.
- Waar tabel expressies worden gebruikt in SQL, zal TQL altijd object types gebruiken.
- Object attribuut referenties kunnen middels de tekst 'BASELINE (enumerator)' ook voor het object naar de opgegeven baseline verwijzen.
- De betekenis van een sterretje in het SELECT statement is veranderd, zodat het de ID's van de objecten geeft in de resultaat set, in plaats van alle attributen van het object.
- SQL heeft een aantal ingebouwde functies: COUNT, MAX, MIN, SUM en AVG enzovoort. Hiervan wordt alleen COUNT ondersteund door TQL. De COUNT functie is er in twee variaties COUNT (*) en COUNT (expr). In SQL, expr kan iedere scalar expressie zijn, maar in TQL, kan dit alleen maar een object attribuut zijn. COUNT(*) geeft het aantal objecten dat voldoet aan het restant van de query, COUNT(attr) geeft het aantal objecten dat voldoet aan het restant van de query en waarvan het attr veld niet leeg/null/zero is.
- In plaats het initiële SELECT... gedeelte van de query, is TEST (object_id_list) toegestaan. Dit geeft aan dat de objecten die vertegenwoordigd zijn door de opgegeven ID's en type in het FROM gedeelte getest moeten worden op het restant van de query. Dit is een filter.
- TQL accepteert ook een verscheidenheid aan datum en tijdformaten (inclusief het gebruik van Easyplan's variabele datums) naast de standaard SQL DATE formaten. De formaten worden voorafgegaan door het DATE keyword.
- TIMESTAMP wordt niet ondersteund.
Alle SQL gereserveerde woorden kunnen worden gebruikt vanwege compatibiliteit.

In Powerproject TQL starten de meeste queries met een SELECT statement, alhoewel in het geval van filters, SELECT # al wordt verondersteld wanneer u het resterende gedeelte van de query handmatig intypt in het dialoogvenster Filter . Queries kunnen ook starten met TEST (object id list).
Het SELECT statement specificeert de attributen van de objecten waarin de vrager is geïnteresseerd. U kunt meer dan een object opvragen, en de waardes die worden teruggeleverd zijn in de volgorde van de vraagstelling.
De algemene syntaxis is:
SELECT <attribute> FROM <object type>
De '*' in een SELECT statement is een alternatief voor 'object identifier'; Het betekent niet alle attributen van een object, maar het type en het id van een object.
U kunt meer dan één attribuut opvragen door de attributen te scheiden door komma's.
Waar het attribuut het ID is van een ander object, kan dit worde voorafgegaan met het keyword ASNAME, wat resulteert in de naam van het object in plaats van het ID..
Opmerkingen
- U kunt alleen meerdere attributen opvragen in het eerste SELECT statement en niet in een subquery.
- # betekent alleen de object id's.

Het WHERE gedeelte bevat het zoekgedeelte dat de objecten bepaalt die van het verzoek teruggestuurd worden. Het WHERE gedeelte komt altijd na het SELECT statement.
Het WHERE gedeelte is niet verplicht; Het resultaat is dat de attributen van alle objecten teruggestuurd worden. De objecten die geheel voldoen aan het WHERE gedeelte komen in de resultaatset.
Het WHERE gedeelte bestaat uit een aantal omsloten expressies die gecombineerd kunnen worden met AND en OR operators om complexere condities te vormen. U kunt verschillende types van omsluitingen gebruiken.

Dit betekent dat de waarde van de expressie aan de linkerkant, moet liggen tussen die aan de rechterkant van het trefwoord BETWEEN. Het BETWEEN key word heeft de algemene vorm:
expressie [NOT] BETWEEN expressie AND expressie

Het LIKE keyword is bedoeld voor tekststring vergelijkingen. Het attribuut van het object wordt vergeleken met de tekststring. U kunt hiervoor de standaard SQL wildcards (% en _ ) of reguliere expressies. De algemene vorm van het LIKE keyword is:
expression [NOT] LIKE [REGEX] tekststring literal

Het IN keyword test de waarde van de expressie links van het IN keyword met de waardes in een lijst aan de rechterkant van het IN keyword. De lijst kan bestaan uit een komma gescheiden lijst met waardes of het resultaat uit een sub-query. De algemene vorm is:
scalar expression [NOT] IN (value list )

Vergelijkingen komen voor in twee vormen: Gekwantificeerd en niet gekwantificeerd Beiden maken gebruik van de vergelijkings-operatoren: <, >, <=, >= en <>.
Niet gekwantificeerde vergelijkingen
De algemene vorm van een niet gekwantificeerde vergelijking is:
scalar expression OPERATOR scalar expression
Waar de OPERATORS hierboven zijn beschreven.
Gekwantificeerde vergelijkingen
Gekwantificeerde vergelijkingen zijn bijna hetzelfde als niet gekwantificeerde vergelijkingen, behalve dat ze na de 'Scalar comparison operator' meteen worden gevolgd door de keywords ANY of ALL, wat betekent dat sommige of alle van de objectattributen overeen moeten stemmen met de expressie om de vergelijking als waar te beschouwen. Een niet gekwantificeerde vergelijking is hetzelfde als een gekwantificeerde vergelijking met het keyword ANY.

TQL heeft de mogelijkheid om 1 op n relaties te gebruiken. Bijvoorbeeld meerdere taken op een balkregel. U kunt dit op dezelfde manier gebruiken als andere velden. Daarnaast kunt u toch naar een specifiek object verwijzen door vierkante haken te gebruiken.
SELECT # FROM bar where bar.tasks IN (SELECT # FROM task WHERE task.name = 'Fred')
Dit selecteert alle balken waarvan één van de taken de naam Fred heeft.
SELECT # FROM bar where bar.tasks[3] IN (SELECT # FROM task WHERE task.name = 'Fred')
Dit selecteert alle balken waarvan derde taak de naam Fred heeft.

Er zijn twee vormen van Literals (karakter reeksen), - tekststring waardes en numerieke waardes. Een tekststring waarde is een reeks van karakters omsloten door enkele aanhalingstekens. Numerieke waardes bestaan uit decimale getallen. Als het getal geen integer is, dan MOET het decimale scheidingsteken een punt zijn, en geen komma.

De betekenis van de symbolen in reguliere expressies is:
Symbolen |
Definitie |
---|---|
^ |
Start van de tekststring |
$ |
Eind van de tekststring |
. |
Ieder enkel karakter |
\ |
Gebruik de speciale betekenis van dit karakter niet. |
Reguliere expressies kunnen expressies tussen vierkante haken bevatten. Dit zijn reguliere expressies die bestaan uit een enkel karakter. Als het initiële karakter tussen de vierkante haken begint met '^' dan wordt de expressie uitgebreid met de daarop volgende tekst behalve het karakter tussen de haken. Als het eerste karakter na circumflex (^) een '-' of een vierkant haakje sluiten is, dan moet de expressie overeenstemmen met dat karakter. Een expressie tussen vierkante haken kan een reeks van waarden bevatten, bijvoorbeeld [a-z] test op alle karakters tussen a en z. U kunt ook parentheses en de OR | operator gebruiken om expressies te groeperen.
Een reguliere expressie kan worden gevolgd door speciale karakters met de volgende betekenissen:
regexp* |
Komt overeen met een tekststring van nul of meer karakters die gelijk is aan regexp |
regexp+ |
Komt overeen met een tekststring van één of meer karakters die gelijk is aan regexp |
regexp? |
Komt overeen met een tekststring van nul of één karakters die gelijk is aan regexp |
Voorbeelden
[Hh]ello |
Komt overeen met een tekststring die Hello of hello bevat |
^[Hh]ello |
Komt overeen met een tekststring die begint met Hello of hello |

Zijn de balken met de IDs 1234 en 5678 beide rood?
TEST ALL ( bar.1234, bar.5678 ) FROM bar WHERE bar.colour = red
Zijn de objecten met de IDs 1234 en 5678 beide balken?
TEST ALL (1234, 5678) FROM bar
Is één van de objecten met IDs 1234 en 5678 een balk?
TEST (1234, 5678) FROM bar
Balken waarvan alle taken starten na 30/12/97
SELECT # FROM bar WHERE ALL bar.task IN (SELECT # FROM task WHERE task.start > DATE '1997-12-30')
Balken waarvan alle taken start na de huidige datum
SELECT # FROM bar WHERE ALL bar.task IN (SELECT # FROM task WHERE task.start > DATE 'vandaag')
Merk op dat dit voorbeeld gebruik maakt van de variabele datum functionaliteit.
Balken waarvan één van de taken starten na 30/12/97
SELECT # FROM bar WHERE ANY bar.task IN (SELECT # FROM task WHERE task.start > DATE '1997-12-30')
Balken waarvan één van de taken start na het einde van de huidige maand
SELECT # FROM bar WHERE ANY bar.task IN (SELECT # FROM task WHERE task.start > DATE 'month end')
Merk op dat dit voorbeeld gebruik maakt van de variabele datum functionaliteit.
Balken waarvan géén van de taken starten na 30/12/97
SELECT # FROM bar WHERE NONE bar.task IN (SELECT # FROM task WHERE task.start > DATE '1997-12-30')
SELECT # FROM bar WHERE ALL bar.task IN (SELECT # FROM task WHERE task.start <= DATE '1997-12-30')
SELECT # FROM bar WHERE ALL bar.task NOT IN (SELECT # FROM task WHERE task.start > DATE '1997-12-30')
Taken die starten op of na de huidige datum en eindigen voor 01/01/09
SELECT # FROM task WHERE (task.start >= DATE 'vandaag' AND task.end < DATE '2009-01-01')
Merk op dat dit voorbeeld gebruik maakt van de variabele datum functionaliteit.
Een mini linkrapport
SELECT objectid, ASNAME startTask, ASNAME endTask FROM link