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

$query=APP::00::SQL::object->get(%hash)

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.IDentity
      

      Inak:

      SELECT *
      FROM a00_object
      LEFT JOIN FROM a00_object_category ON
      (
            a00_object.IDcategory = a00_object_category.IDentity
      )
      
$query

  • $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}

$object

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.

    1. Ak je zadane IDentity=>1

      1. ziskam nove ID

        my $query=$main::DB{main}->Query("INSERT INTO a00_object() VALUES()"); $newID=$query->insertid();

      2. priradim sucasnemu objectu nove IDentity podla noveho ID

        $object->{data}{ID} = $object->{data}{IDentity} = $newID;

      3. $object->journalize();

    2. 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.

      1. ziskam nove ID

        my $query=$main::DB{main}->Query("INSERT INTO a00_object() VALUES()"); $newID=$query->insertid();

      2. $object->journalize();

    3. Ak je zadane IDentity=1, ID=>1

      ZATIAL NERIESIT!!!

  • $boolean=$object->change(variable=>value,cvml=>{},-journalize=>0)

    1. zmenia sa udaje podla vstupu v $object->{data}

    2. 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.

    1. zmeni sa $object->{data}{time_change} na $main::time_current

    2. vola sa funkcia $object->serialize();

    3. zmeni sa identifikator $object->{time_change} a $object->{PRIMARY} podla $object->{data}{time_change}

    4. zavola sa metoda $object->save()

    5. 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

    1. volá sa $object->serialize()

    2. 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...)

    1. $object->{data} sa skopiruje do $object->{DATA}

    2. prebehne serializacia $object->{DATA}{cvml}

$query=APP::00::SQL::object->new(%hash)

User Comments


AddThis Social Bookmark Button RSS

This content is generated from file 'http://svn.cyclone3.org/trunk/doc/standard/API.docbook'

Cyclone3 allow you build Web 2.0 applications using modern XUL/AJAX and collaboration technologies.