|
Q-Line 3000 | |
|
Bardzo ważnym zagadnieniem dla osób, które modyfikują programy |
Q-Line 3000
pozwala na pamiętanie wszystkich zmian struktur baz danych pomiędzy poszczególnymi wersjami programu. Opracowaliśmy specjalny system zapisu tych zmian, o którym piszemy poniżej:
Ponieważ programy Q-Line 3000
mogą być modyfikowane przez użytkowników często zachodzi
porzeba przerzucenia danych pomiędzy starą wersją programu a nową, która ma na przykład
zmienione struktury danych.
W innych systemach tego typu stosuje się konwertery tabel - które zmieniają dane do nowej struktury. To rozwiązanie jest dobre do zastosowań lokalnych natomiast zupełnie się nie sprawdza "na odległość" wówczas gdy musimy dosłać klientowi nową wersję programu - użytkownik z reguły nie ma pojęcia jak wykonać taka konwersję i co więcej nie ma ku temu potrzebnych narzędzi programowych.
Q-Line 3000
rozwiązuje ten problem prosty sposób - konwersji dokonuje się poprzez:
VERSIONNO=2
VERSIONS=
{
VER_2 =
{
TABLE VOC_WIERZ { ADD LK STRING; }
TABLE VOC_BANK { ADD LK STRING; }
}
}
|
Tu podajemy numer aktualnej wersji Blok wszystkich wersji Blok opisujący zmiany jakich dokonano w wersji 2 w stosunku do wersji poprzedniej informacja, że do tabeli VOC_WIERZ dodano pole LK typu string informacja, że do tabeli VOC_BANK dodano pole LK typu string |
Proszę zauważyć, że LK jest komendą języka zmian struktur danych. Komend tych jest kilka a opisane są w jednym z kolejnych podrozdziałów: "komendy języka zmian struktur danych".
TABLE table
{
command;
.
.
.
command;
}
gdzie:table - nazwa tabeli, której dotyczy konwersjacommand - jedna z komend:
ADD field typeDodaje do rekordu pole o nazwie fieldi typietype.REM fieldUsuwa z rekordu pole o nazwie field.TPE field typeZmienia typ pola fieldnatype.
Uwaga! Zmiana ta nie powoduje żadnej automatycznej konwersji wartości w polufield- trzeba to zrobić samemu (patrz przykład).LEN field lengthZmienia długość pola fieldnalength.
Komenda ta dotyczy tylko pola typuSTRINGi ma sens jedynie wtedy, gdy nowa długość jest mniejsza niż stara.LET field := expressionPrzypisuje polu fieldwartość wyliczoną z wyrażeniaexpression.TMP variable := expressionTworzy tymczasową zmienną variablei przypisuje jej wartość wyliczoną z wyrażeniaexpression.
field - identyfikatortype - INT | STRING
| DOUBLElength - liczba całkowitavariable - identyfikatorexpression - wyrażenie AUTFUN,
w którym można używać nazw pól i tymczasowych zmiennych
| Komenda | Objaśnienie | Przykład (wytłuszczono nazwy pól i tabel) |
| REMTAB | Usunięcie całej tabeli | TABLE VOC_WIERZ { REMTAB; } |
| CHGTAB | Zmiana nazwy całej tabeli | TABLE VOC_WIERZ { CHGTAB NEW_NAME; } |
| ADD | Dodano pole | TABLE VOC_WIERZ { ADD LK STRING; } |
| LEN | Zmieniono długość pola | LEN PRACTEL 25; |
| LET | Przypisanie wartości | LET CZYPRACOWNIKASP := (c = "T") ? 1 : ((c = "N") ? 2 : 0); |
| REM | Usunieto pole | REM DATAURPRE; |
| TMP | deklaracja zmiennej tymczasowej | TMP c := CZYPRACOWNIKASP; |
| TPE | Zmieniono typ pola na | TPE CZYPRACOWNIKASP INT; |
| ADDTAB | W wersji Q-Line 3000 Swing SQL w pliku upgrade_XXX.sql wypisuje się skrypt utworzenia tabeli |
TABLE NOWA_TABELA {ADDTAB;} |
Dana jest tabela zdefiniowana następująco:
TAB OSOBA
{
ID TYPE LEN NAME;
ID INT 8 "Id";
IMIE STRING 30 "Imię";
NAZWISKO STRING 50 "Nazwisko";
PLEC STRING 1 "Płeć"; // "M" - mężczyzna, "K" - kobieta,
// "" - brak informacji o płci
}
Chcemy dokonać zmian:
DATA_UR,
PLEC na INT, tak by
1 oznaczało mężczyznę, 2 - kobietę, 0 - brak informacji,
IMIE i NAZWISKO mieć jedno pole
IMIE_NAZW
TAB OSOBA
{
ID TYPE LEN NAME;
ID INT 8 "Id";
IMIE_NAZW STRING 80 "Imię i nazwisko";
PLEC INT 1 "Płeć";
DATA_UR INT 8 "Data urodzenia";
}
Konwersji takiej można dokonać tak:
TABLE OSOBA
{
ADD DATA_UR INT; // daty trzymane są na typie INT
TPE PLEC INT; // sama zmiana typu nie wystarczy, trzeba jeszcze zmienić wartość
TMP p := PLEC; // można obejść się bez tej zmiennej, ale tak będzie wygodniej
LET PLEC := (p = "M") ? 1 : ((p = "K") ? 2 : 0);
ADD IMIE_NAZW STRING;
LET IMIE_NAZW := IMIE + " " + NAZWISKO;
REM IMIE;
REM NAZWISKO;
}
VERSIONNO=3
VERSIONS=
{
VER_2 =
{ TABLE ARTYSTA
{
LEN PRACTEL 25;
REM DATAURPRE;
REM DATAZGONUPRE;
TPE DATAWPROW INT;
// LET DATAWPROW := DATAWPROW;
TPE CZYPRACOWNIKASP INT;
TMP c := CZYPRACOWNIKASP;
LET CZYPRACOWNIKASP := (c = "T") ? 1 : ((c = "N") ? 2 : 0);
}
}
VER_3 =
{
TABLE VOC_WIERZ { ADD LK STRING; }
TABLE VOC_BANK { ADD LK STRING; }
}
}
|
Numer wersji aktualnej Sposób przejścia z wersji pierwszej do drugiej w tabeli ARTYSTA zmieniono długość pola PRACTEL na 25 usunięto pole DATAURPRE |