API Štandard
Štandard
Modelový príklad
my $query=APP::00::SQL::object->get(
db => "domain_tld",
select => "a00_object.ID, a00_object.name, COUNT(*)",
select_order => "a00_object.time_start DESC",
select_where => "",
select_order => "a00_object.time_start DESC, a00_object.time_change DESC",
select_limit => "1,5",
a00_object =>
{
PRIMARY => "{ID}-{time_change}",
IDentity => "28;48",
IDentity_exclude => "28;27",
IDcategory => "1*;2;3_",
IDcategory_exclude => "3*",
time_start => "<=$main::time_current",
time_end => ">=$main::time_current",
time_end => 0, # automaticky dosadi ">=$main::time_current"
status => "Y",
lng => "NULL;$env{lng}",
lng => $env{lng},
}
a00_object_category =>
{
-required => 1,
status => "Y",
lng => $env{lng},
},
);
if ($query->execute())
{
# $object = 1 ID-time_change nie 1 IDentity
$query->count();
while (my $object=$query->fetchobject())
{
my %hash=$object->data(); # $hash{cvml}{variable}="value";
$object->change(variable=>value,cvml=>{},attr*=>1,-journalize=>1);
# $object->change(visits=>$hash{visits}+1);
$object->delete(-journalize=>1);
my $object_new=$object->copy();
$object->journalize();
$object->archive();
}
}
else
{
$query->errstr();
}
-
log queries
$query->sql_log();
-
metody
-premenna =>
toto sa posiela systemova premenna metode
Všetky vstupy ktoré môžu obsahovať viacero hodnôt sú oddelované pomocou znaku ;, alebo sa posielajú priamo ako ARRAY.
Charakteristika %hash
-
db => "my_localhost_tld"
database name, default hodnota z _config tabuľky
-
DBH => $main::DB{main}
database handler, default hodnota = $main::DB{main}
-
SQL => "SELECT * ...."
zadane pramo SQL, vsetko ostatne sa v takom pripade ignoruje
-
select => "a00_object.ID, a00_object.IDentity"
Zoznam fieldov ktore sa budu selectovat. Vzdy sa pisu s celym nazvom (ak sa pripadne leftuje z a00_object_category.*)
Vzdy sa automaticky selectuje aj ID a time_change, i vtedy ak by nebolo vyziadane, aby bola zabezpecena unikatnost informacie.
Fieldy sa delia len a jedine čiarkami ako v SQL syntaxe.
-
select_limit => "X,Y" / "X"
Rovnako ako v SQL syntaxe
-
select_order => "a00_object.time_start ASC"
default je a00_object.time_start DESC, a00_object.time_change DESC
Rovnako ako v SQL syntaxe
-
select_where => "a00_object.ID=128"
Rovnako ako v SQL syntaxe
-
select_group => ""
Rovnako ako v SQL syntaxe
-
a00_object =>
Pole pre vyselektovanie objectu na základe podmienoch, ktoré sú súčasťou.
Dalej su uvedené príklady použitia:
-
PRIMARY => "5-1254798445"
Vyselectovanie unikátneho riadku z tabuľky prezentovaného primárnym kľúčom zloženým z ID a time_change.
-
IDentity => "5;8;12"
Zoznam IDentity ktoré majú byť vyselektované, oddelené sú jedine znakom ;
V SQL sa pouzije OR
WHERE (IDentity=5 OR IDentity=8 OR IDentity=12)
-
IDentity_exclude => "5;2;7"
Zoznam IDentity ktore nesmu byt v mnozine vyslednych IDentity
V SQL sa pouzije AND
WHERE (IDentity != 5 AND IDentity != 2 AND IDentity != 7)
-
IDcategory => "8*;12_"
Špecifická podmienka pre vyselektovanie IDentity spadajúcich do kategórií.
Kategórie su špecifikované pomocou ich IDentity a nie IDcharindex. Pomocník pre vyselektovanie sa nachádza v DATA štandarde.
Za jednotlivými "IDčkami" sa môžu používať tieto stringy:
* - vsetky podkategórie
_ - jedna podkategória
__ - dve podkategórie
-
domain => "NULL;localhost.tld;otherhost.tld"
-
domain_sub => "NULL;my_localhost.tld;localhost.tld"
-
time_start => 0
Pri zadaní hodnoty 0, sa doplní automaticky "<=$main::time_current"
Môžu sa používat nasledovné operátory:
-
=
-
>
-
<
-
>=
-
<=
-
!=
Operátory sa dopĺňajú priamo do SQL
-
-
time_end => 0
Pri zadaní hodnoty 0, sa doplní automaticky ">=$main::time_current"
-
status => "Y;N;D;NULL"
default hodnota je "Y";
Pri zadaní NULL sa akceptujú všetky hodnoty status tým že sa podmienka o status-e v SQL neobjaví
-
lng => "NULL;sk;en;de"
zoznam jazykov, v ktorých môže byť object. NULL predstavuje NULL hodnotu SQL
WHERE (lng IS NULL OR lng='sk' OR lng='en' OR lng='de')
-
-
a00_object_category =>
Tabulka a00_object_category bude leftovana podla konfiguracie k a00_object
-
-required => 1
Tabuľka a00_object_category, MUSÍ byť leftovaná. Pokiaľ k záznamu a00_object nieje leftovaný záznam z a00_object_category, záznam je neplatný a nieje vrátený.
Príklady:
SELECT * FROM a00_object LEFT JOIN FROM a00_object_category ON ( a00_object.IDcategory = a00_object_category.IDentity ) WHERE a00_object.IDcategory = a00_object_category.IDentityInak:
SELECT * FROM a00_object LEFT JOIN FROM a00_object_category ON ( a00_object.IDcategory = a00_object_category.IDentity )
-
-
$boolean=$query->execute()
-
$object=$query->fetchobject()
-
$scalar=$query->count()
-
$scalar=$query->log_sql();
vracia zoznam SQL ktore vykonal.
každé SQL sa pridáva do zoznamu okamžik pred samotným vykonaním
-
$string=$query->err_str()
vracia string pripadnej chyby
-
%hash=$query->debug_time
trvanie vykonania po execute();
%{cpu,duration}
Premenné:
-
$object->{ID} vždy obsahuje ID daného objectu.
-
$object->{time_change} vždy obsahuje verziu daného objectu.
-
$object->{PRIMARY} = "{ID}-{time_change}" obsahuje primárny kľúč objektu.
-
%{$object->{DATA}} obsahuje vsetky data objectu v nezmenenej podobe
-
%{$object->{data}} obsahuje vsetky data objectu s napr. rozparsovanym cvml do %{$object->{data}{cvml}}
Metódy:
-
$object=$query->fetchobject()
-
%data=$query->data()
vracia %{$object->{data}}
$data{cvml}=%{};
-
$scalar=$object->PRIMARY()
vracia unikatne cislo riadku (ID a time_change z tabulky v tvare "{ID}-{time_change}")
-
$boolean=$object->delete(-journalize=>1)
Maze zaznam presunom do journal tabulky, tuto je journalize default zapnute, lebo delete je destrukcne.
-
$object=$object->copy(IDentity=1,ID=>1)
Robí kópiu riadku do nového IDentity alebo ID podľa zadaného parametru.
Urobi kopiu riadku s novym IDentity, vytvara teda novy object.
-
Ak je zadane IDentity=>1
-
ziskam nove ID
my $query=$main::DB{main}->Query("INSERT INTO a00_object() VALUES()"); $newID=$query->insertid();
-
priradim sucasnemu objectu nove IDentity podla noveho ID
$object->{data}{ID} = $object->{data}{IDentity} = $newID;
-
$object->journalize();
-
-
Ak je zadane ID=>1
Urobi kopiu riadku s novym ID, vytvara teda novu modifikaciu/duplikaciu (nemylit si s verziou, ktoru robi ->journalize()) toho isteho IDentity, teda object-u.
-
ziskam nove ID
my $query=$main::DB{main}->Query("INSERT INTO a00_object() VALUES()"); $newID=$query->insertid();
-
$object->journalize();
-
-
Ak je zadane IDentity=1, ID=>1
ZATIAL NERIESIT!!!
-
-
$boolean=$object->change(variable=>value,cvml=>{},-journalize=>0)
-
zmenia sa udaje podla vstupu v $object->{data}
-
vola sa metoda $object->journalize() ak je zapnute -journalize=>1 alebo $object->save()
-
-
$boolean=$object->journalize()
Táto metoda ma za ulohu z aktualneho PRIMARY riadku spravit presnu kopiu, len s inym time_change tak, aby bol novy PRIMARY riadok pripraveny na zmeny a zaroven zalohovany do starsieho PRIMARY riadku.
Metóda môže byť volaná samostatne z externého prostredia ak je tomu potreba.
-
zmeni sa $object->{data}{time_change} na $main::time_current
-
vola sa funkcia $object->serialize();
-
zmeni sa identifikator $object->{time_change} a $object->{PRIMARY} podla $object->{data}{time_change}
-
zavola sa metoda $object->save()
-
kontrola starych journalov a prenosy do _journal tabulky
ide o to aby v hlavnej tabuľke neostávalo viac rovnakých ID záznamov, len v tom prípade ak novšie ID záznamy majú active='N' (proces schvalovania/spúšťania nových verzií údajov)
-
-
$object->save()
Táto metóda ma za úlohu uložiť údaje pomocou príkazu REPLACE INTO
-
volá sa $object->serialize()
-
vykoná sa REPLACE INTO a00_object(a,b,c,...) VALUES (a,b,c,...)
-
-
$object->serialize()
Metóda zabezpečuje spätné spracovanie $object->{data} do $object->{DATA}, teda prípravu na SQL príkaz s prípadnou kontrolou konzistencie dát (napr. ci je time_start naozaj timestamp, etc...)
-
$object->{data} sa skopiruje do $object->{DATA}
-
prebehne serializacia $object->{DATA}{cvml}
-



User Comments