timestamp on update hiba schema api-val

toreki képe

Sziasztok!

Mifelénk szokás, hogy nem az insert/update tölti ki a timestamp típusú lastupdate mezőt, hanem az sql szerver (on update current_timestamp). Így tuti, hogy frissül, nem kell a programozóra bízni, hogy frissíti-e a lastupdate mezőt. Viszont ha drupal_install_schema()-val hoznám létre a táblát, akkor nem engedi ezeket a lehetőségeket használni.

Találtam egy ránézésre működő megoldást a d.org-on, azonban a patch sorai elcsúsznak a nálam levő verzióhoz (d6.20) képest.

Milyen értelme van a schema api-t használni saját moduloknál? Azt látom, hogy a táblák létrehozása mellett adatbázisba is bejegyzi a sémát, de ez mire használható a gyakorlatban?

Van értelma patch-et raknom a drupalra, vagy maradjak inkább a db_query-nél?

Köszönöm!

Drupal verzió: 
silversk8r képe

_szerintem_ a modulneve.install-ban hozd létre a timestamp mezőt schema API-val, hogy a drupal tudjon róla, aztán jöhet egy db_query-s ALTER TABLE. A patch-elést kihagynám.

0
0
toreki képe

Így is próbáltam, de nem tudok timestamp típust létrehozni.

 'tabla_lastupd' => array(
   'description' => 'last update',
   'type' => 'timestamp',
   'not null' => FALSE,
   'default' => NULL,
 ),

Az eredmény ez lesz:

CREATE TABLE tabla ( ..., `tabla_lastupd` DEFAULT NULL, ... )

e helyett:

CREATE TABLE tabla ( ..., `tabla_lastupd` timestamp DEFAULT NULL, ... )

Vagyis nem kerül az sql-be a timestamp, mint mezőtípus. A datetime meg datetime lesz mysql alatt.

0
0
toreki képe

Rész megoldás lehet, ha megadjuk a konkrét mysql tipust:

'tabla_lastupd' => array(
  'description' => 'last update',
  'type' => 'datetime',
  'mysql_type' => 'timestamp',
  'not null' => TRUE,
  'default' => '0000-00-00 00:00:00',
),

Ezután ki lehet adni az alter-t:

ALTER TABLE tabla 
  CHANGE tabla_lastupd tabla_lastupd TIMESTAMP NOT NULL 
  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Az insertek így nézhetnek ki:

INSERT INTO tabla 
  values (2,1,1,1,1,0,CURRENT_TIMESTAMP)
vagy
INSERT INTO 
  tabla  (mezo2, mezo3, mezo4, mezo5, mezo6) 
  values (4,1,1,1,0)

Az első esetben minden mezőt ki kell tölteni, míg a másodikban a mezo1 (tábla elsődleges kulcsa, AUTO INCREMENT) és a lastupd mező elhagyható.

Egyedüli hártánya, hogy az állapot jelentésben a Schema modul jelzi, hogy "Field tabla.tabla_lastupd: no Schema type for mysql type timestamp." A patch ezen segíthetne, csak utána a verzió váltás okozna gondot.

0
0