if(!eregi("not null",$v)) $Fields[$k]=$v." not null";
$Fields=array("id"=>"int auto_increment primary key")
+$Fields+array(DataField=>"mediumblob");
}
Def0($Index,array());
// Считываем из таблицы поле с ее параметрами
$this->Fields=array(DataField=>"mediumblob");
$Data=$this->TableGetResult(
mysql_query("select ".DataField." from $Name where id=1")
);
// Если таблица существует, то запрос окончится успешно.
// В этом случае нужно проверить, не изменилась ли таблица с момента
// последнего обращения, и если это так, то подкорректировать ее.
if(@is_array($Data)) {
if(!is_array($Fields)) {
$this->Error="Couldn't create table: no fields specified";
return;
}
Def0($Data["Fields"],array());
Def0($Data["Index"],array());
//** Возможно, что-то изменилось. Тогда выполняем alter table.
//1. Добавились поля?
$Lst=array();
foreach($Fields as $k=>$v) {
if(!isSet($Data["Fields"][$k])) $Lst[]="add $k $v";
else if($Data["Fields"][$k]!=$v) $Lst[]="change $k $k $v";
}
//2. Удалились поля?
foreach($Data["Fields"] as $k=>$v)
if(!isSet($Fields[$k])) $Lst[]="drop $k";
//3. Добавились индексы?
foreach($Index as $k=>$v) if(!isSet($Data["Index"][$k]))
$Lst[]="add index index_$k ($k".($v!=0?" ($v)":"").")";
//4. Удалились индексы?
foreach($Data["Index"] as $k=>$v)
if(!isSet($Index[$k])) $Lst[]="drop index index_$k";
if(count($Lst)) {
PrintDump($Lst);
if(!mysql_query("alter table $Name ".implode($Lst,","))) {
$this->Error=mysql_error();
return;
}
$Changed=1;
}
$this->JustCreated=0;
} else {
// Необходимо создать таблицу.
// BugFix by DM: При создании новой таблицы необходимо очистить
// переменную Error, иначе в ней остается ошибка от попытки