Modul update hiba

makgab képe

hi!

Egy modulhoz írnék update funkciót:

<?php
function mymodule_update_1() {
	switch ($GLOBALS['db_type']) {
		case 'mysql':
		case 'mysqli':
			$items[] = update_sql("ALTER TABLE {myproducts} ADD COLUMN interface varchar(20) NOT NULL DEFAULT '' ");
		break;
 
	case 'pgsql':
	break;
 
return $items;
 
}
}
 
?>

Meg is csinálja, ezzel nincs is gond, de az update után van 2 hibaüzenet, ami zavar:

"Drupal database update

* warning: array_merge() [function.array-merge]: Argument #2 is not an array in /var/www/html/drupal/update.php on line 174.
* warning: Invalid argument supplied for foreach() in /var/www/html/drupal/update.php on line 338.

Updates were attempted..."

Egyébként a Drupal honnan tudja hogy egy update már lefutott? Melyik táblába írja be v. hol tárolja?

G.

Drupal verzió: 
makgab képe

"Egyébként a Drupal honnan tudja hogy egy update már lefutott? Melyik táblába írja be v. hol tárolja?"

Ez megvan: 'system' tábla 'schema_version' mező. :)

G.

0
0
makgab képe

Bocs, megvan. A helyes kód, amivel szépen működik:

<?php
function mymodule_update_1() {
    $items = array();
    switch ($GLOBALS['db_type']) {
        case 'mysql':
        case 'mysqli':
            $items[] = update_sql("ALTER TABLE {myproducts} ADD COLUMN interface varchar(20) NOT NULL DEFAULT '' ");
        break;
 
    case 'pgsql':
    break;
    }
 
    return $items;
 
}
 
?>

G.

0
0
york képe

Miert nem a drupal db es schema api-t hasznalod?
http://api.drupal.org/api/group/database/6
http://api.drupal.org/api/group/schemaapi/6

Amit csinaltal raadasul csak mysql-en fog mukodni, mig ha az api-t hasznalod akkor mindegyik tamogatott adatbazis szerveren jo lesz.

0
0
nevergone képe

Mert gányolni egyszerűbb, mint utánaolvasni. Vagyis úgy tűnik, ha pedig nagy a baj, a fórumon úgyis segítenek, ha tudnak.

0
0
makgab képe

természetesen utánaolvastam:
"Writing .install files": http://drupal.org/node/51220

Azért nem a schema-t használtam, mert az nem működött! Pl. a numeric mezőt nem volt hajlandó létrehozni MySQL-ben normálisan. Inkább használtam a db_query()-t, érdekes ezzel működött.

Tudom, hogy csak MySQL alá írtam meg.
A schema-t fogom használni, ha működik majd egyszer teljesen. Ezt nem csinálta meg, pedig a Drupal doksi alapján néztem:

<?php
 
function mymodule_schema() {
	$schema['mymodule'] = array(
	'fields' => array(
	'vid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
	'nid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
	'size' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
	'weight' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
	'price_huf' => array('type' => 'numeric', 'precision' => 20, 'scale' => 2, 'not null' => TRUE, 'default' => 0.0),
	),
	'primary key' => array('vid', 'nid'),
	);
 
	return $schema;
}
 
?>

Nem volt hajlandó a MySQL-ben numeric(20,2) mezőt létrehozni, helyette (10,0)-t hozott létre.

G.

0
0
york képe

HA igazad van akkor ugye nyitottal rola issuet?
De ennyi erovel megnezhetted volana a megfelelo fuggvenyben azt is, hogy miert nem jo ertekkel jott letre a mezod.

0
0
makgab képe

Nem vagyok benne biztos hogy ez bug. De nálam nem működött.
Másnak sem jön létre így egy tábla numeric(20.2) mezővel?

G.

0
0
york képe

A cck-ban van numeric tipus nezd meg jol mukodik-e.

0
0