QBS
>> Suplementy i dokumentacja techniczna
>> Wyrażenia AUTFUN
Wyrażenia autfun są zwykłymi wyrażeniami które można budować
ze stałych znakowych i liczbowych (jak każde wyrażenie)
oraz z identyfikatorów pól. Dodatkowo dostępny jest pewiwen zestaw funkcji:
- Identyfikatory pól - <identifier> - Identyfikator pola traktowany jest jak zmienna, a jego wartość pobierana
z bieżącego rekordu, dopiero w trakcie oblicznia wyrażenia.
- Funkcje - <identifier()> jeżeli za identyfikatorem występuje "(" czyli nawias otwierający to identyfikator jest
traktowany jako identyfikator funkcji, zaś w nawiasach przekazywane są argumenty funkcji.
Oto dostępne funkcje.
- filedata(<expr_filename>) - odczytuje plik o podanej nazwie i zwraca jego zawartość jako obiekt AutFunData
- money2words(<expr_amount>) - dla podanej kwoty zwraca jej reprezentację słowną jako obiekt AutFunString
- copy(<expr_string>,<expr_long>,<expr_long>) - z podanego stringu wycina fragnent określony przez
index początku i liczbe wycinanych znaków.
Oczekuje parametrów typu:
AutFunString - przetwarzany napis
AutFunLong - index początku liczony od 0
AutFunLong - liczba znaków do skopiowania
i zwraca napis w postaci obiektu AutFunString .
- curr_date() - zwraca bieżącą datę jako obiekt AutFunDate
- curr_time() - zwraca bieżący czas jako obiekt AutFunTime
- edit_mode() - zwraca status edycji pola 0 NULL 1 VIEW 2 INSERT 3 MODIFY AutFunLong
- isNull() - zwraca czy pole jest Null jako obiekt AutFunBool
- length(<expr_string>) -oczekuje parametru typu AutFunString i
zwraca jego długość w postaci obiektu AutFunLong .
- login_name() - zwraca identyfikator użytkownika jako obiekt AutFunString
- login_group_name() - zwraca identyfikator grupy użytkownika jako obiekt AutFunString
- sysfield(<expr_tabename>,<expr_fieldname>) - zwraca wartość pola z parametrów jako AutFunObject
- trim(<expr_string>) - oczekuje parametru typu AutFunString i
zwraca obiekt AutFunString z obciętymi z końca spacjami.
- weekday(<expr_date>)- oczekuje parametru typu AutFunDate i
zwraca obiekt AutFunLong kodujacy dzień tygodnia
( 0-PM, 1-WT, itd)
- internalDate(<expr_date>); - zamienia datę na string w wewnętrznym formacie daty tzn YYYY.MM.DD
- min(<expr_num>,<expr_num>); - zwraca minimum dwóch liczb
- max(<expr_num>,<expr_num>); - zwraca maximum dwóch liczb
- parentVal(<expr_fieldId>); - zwraca wartość pola głowy (stosowane w historiach itp.)
- addMonths(<expr_long>); - dodaje do daty ilość miesięcy
- color(<color>); - zwraca longa z kolorem podanym wg wybranej notacji kolorów
- parse(<???>); - ask WNO.
- zero_number(<expr_num>,<expr_len>); - zamienia liczbę na string dopełniony zerami na określonej długości
Typ wyrażenia nie może być statycznie znany, gdyż nie znamy typów pól, a poza tym mamy wyrażenia warunkowe,
które zależnie od wartości pól mogą zwracać różne typy. Dlatego typ wartości jest ustalany w trakcie obliczania.
Oto możliwe typy wartości wyrażeń
Każdy typ wartości na jakim mogą operować wyrażenia AutFun musi posiadać następujące określone fukncje
(interface AutFunObject):
- public AutFunObject add(AutFunObject obj); - czyli dodawanie ozn:ADD
- public AutFunObject subtract(AutFunObject obj); - czyli odejmowanie ozn:SUB
- public AutFunObject negate(); - czyli negacja (*-1) ozn:NEG
- public AutFunObject multiply(AutFunObject obj); - czyli mnożenie ozn:MUL
- public AutFunObject divide(AutFunObject obj); - czyli dzielenie ozn:DIV
- public AutFunObject isequal(AutFunObject obj); - czyli porónanie ozn:EQU
- public AutFunObject greater(AutFunObject obj); - czyli większe ozn:GE
- public AutFunObject and(AutFunObject obj); - czyli boolowskie i ozn:AND
- public AutFunObject or(AutFunObject obj); - czyli boolowskie lub ozn:OR
- public AutFunObject not(); - czyli boolowskie zaprzeczenie ozn:NOT
Poniżej lista dozwolonych opracji dla poszczególnych typów i typy wynikowe:
Dodawanie - ADD
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | STR | STR | STR | STR | STR | STR | STR | - | STR
| | LON | STR | LON | DBL | MON | LON | DAT | - | - | -
| | DBL | - | DBL | DBL | MON | - | - | - | - | -
| | MON | - | MON | MON | MON | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | DAT | - | - | - | - | - | - | -
| | TIM | - | - | - | - | - | - | TIM | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Odejmowanie - SUB
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | STR | LON | DBL | MON | - | - | - | - | -
| | DBL | - | DBL | DBL | MON | - | - | - | - | -
| | MON | - | MON | MON | MON | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | DAT | - | - | - | LON | - | - | -
| | TIM | - | - | - | - | - | - | TIM | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Negacja - NEG
| TYP | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| WYNIK | - | LON | DBL | MON | - | DAT | TIM | - | NUL
| |
Mnożenie - MUL
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | LON | DBL | MON | - | DAT | TIM | - | -
| | DBL | - | DBL | DBL | MON | - | - | TIM | - | -
| | MON | - | MON | MON | DBL | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | DAT | - | - | - | - | - | - | -
| | TIM | - | TIM | TIM | - | - | - | - | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Dzielenie - DIV
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | DBL | DBL | DBL | - | DAT | - | - | -
| | DBL | - | DBL | DBL | DBL | - | - | - | - | -
| | MON | - | MON | MON | DBL | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | DAT | - | - | - | - | - | - | -
| | TIM | - | TIM | - | - | - | - | - | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Operator równości == - EQU
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | BOO | - | - | - | - | - | - | - | -
| | LON | - | BOO | BOO | BOO | - | BOO | - | - | -
| | DBL | - | BOO | BOO | BOO | - | - | - | - | -
| | MON | - | BOO | BOO | BOO | - | - | - | - | -
| | BOO | - | - | - | - | BOO | - | - | - | -
| | DAT | - | BOO | - | - | - | BOO | - | - | -
| | TIM | - | BOO | - | - | - | - | BOO | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Operator większości > - GE
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | BOO | BOO | BOO | - | BOO | - | - | -
| | DBL | - | BOO | BOO | BOO | - | - | - | - | -
| | MON | - | BOO | BOO | BOO | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | BOO | - | - | - | BOO | - | - | -
| | TIM | - | BOO | - | - | - | - | BOO | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Operator boolowski i & - AND
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | - | - | - | - | - | - | - | -
| | DBL | - | - | - | - | - | - | - | - | -
| | MON | - | - | - | - | - | - | - | - | -
| | BOO | - | - | - | - | BOO | - | - | - | -
| | DAT | - | - | - | - | - | - | - | - | -
| | TIM | - | - | - | - | - | - | - | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Operator boolowski lub | - OR
| | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | - | - | - | - | - | - | - | -
| | DBL | - | - | - | - | - | - | - | - | -
| | MON | - | - | - | - | - | - | - | - | -
| | BOO | - | - | - | - | BOO | - | - | - | -
| | DAT | - | - | - | - | - | - | - | - | -
| | TIM | - | - | - | - | - | - | - | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL | NUL
| |
Operator boolowski zaprzeczenia ~ - NOT
| TYP | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| WYNIK | - | - | - | - | BOO | - | - | - | -
| |
Wzorzec -
| ??? | STR | LON | DBL | MON | BOO | DAT | TIM | BIN | NUL
| STR | - | - | - | - | - | - | - | - | -
| | LON | - | - | - | - | - | - | - | - | -
| | DBL | - | - | - | - | - | - | - | - | -
| | MON | - | - | - | - | - | - | - | - | -
| | BOO | - | - | - | - | - | - | - | - | -
| | DAT | - | - | - | - | - | - | - | - | -
| | TIM | - | - | - | - | - | - | - | - | -
| | BIN | - | - | - | - | - | - | - | - | -
| | NUL | - | - | - | - | - | - | - | - | -
| |