2 import(
'Dataface/Table.php');
51 return (strstr(
$tablename,
'__metadata') ==
'__metadata');
65 if ( !isset($this->columns) || !$usecache ){
66 $this->columns = array();
67 $sql =
"show columns from `".$md_tablename.
"`";
68 $res = mysql_query($sql,
$app->db());
69 if ( !$res ) trigger_error(mysql_error(
$app->db()), E_USER_ERROR);
70 if ( mysql_num_rows($res) == 0) trigger_error(
"No metadata table '{$md_tablename}' could be found.", E_USER_ERROR);
72 while ( $row = mysql_fetch_assoc($res) ){
73 $this->columns[$row[
'Field']] = $row;
75 @mysql_free_result($res);
91 if ( !isset($this->keyColumns) || !$usecache ){
92 $this->keyColumns = array();
94 foreach (array_keys($cols) as $col){
95 if ( strcasecmp($this->columns[$col][
'Key'],
'PRI') === 0 ){
96 $this->keyColumns[$this->columns[$col][
'Field']] =& $this->columns[$col];
114 if ( !isset($this->fieldDefs) ){
117 import(
'Dataface/ConfigTool.php');
119 $this->fieldDefs = $configTool->loadConfig(
'metadata',
$tablename);
120 foreach (array_keys($this->fieldDefs) as $key ){
121 $field =& $this->fieldDefs[$key];
122 $field[
'name'] =
'__'.$key;
124 if ( !isset(
$field[
'Type']) )
$field[
'Type'] =
'varchar(64)';
125 $this->fieldDefs[
'__'.$key] =&
$field;
126 unset($this->fieldDefs[$key]);
151 $sql =
"CREATE TABLE `{$tablename}__metadata` (
154 $type = (strtolower(
$field[
'Type']) !=
'container' ?
$field[
'Type'] :
'varchar(64)');
156 $sql .=
"`{$field['name']}` {$type} DEFAULT NULL,
162 if ( @
$field[
'Default'] ) $default =
" DEFAULT '{$field['Default']}'";
164 $sql .=
"`{$fieldname}` {$field['Type']}{$default},";
167 $keynames = array_keys(
$table->keys());
168 $sql .=
"primary key (`".implode(
'`,`', $keynames).
"`))";
169 $res = mysql_query($sql,
$app->db());
170 if ( !$res ) trigger_error(mysql_error($res), E_USER_ERROR);
202 $updatePrimaryKey =
false;
204 if ( !isset($cols[
$field[
'Field']]) ){
205 $updatePrimaryKey=
true;
206 $default = ( @$field[
'Default'] ?
" DEFAULT {$field['Default']}" :
'');
207 $sql =
"alter table `{$md_tablename}` add column `{$field['Field']}` {$field['Type']}{$default}";
208 $res = mysql_query($sql,
$app->db());
209 if ( !$res ) trigger_error(mysql_error(
$app->db()), E_USER_ERROR);
213 $table_keys =&
$table->keys();
218 if ( !isset($table_keys[$field[
'Field']]) ){
219 $updatePrimaryKey =
true;
220 $sql =
"alter table `{$md_tablename}` drop column `{$field['Field']}`";
221 $res = mysql_query($sql,
$app->db());
222 if ( !$res ) trigger_error(mysql_error(
$app->db()), E_USER_ERROR);
227 if ( $updatePrimaryKey ){
229 $sql =
"drop primary key";
230 @mysql_query($sql,
$app->db());
231 $sql =
"alter table `{$md_tablename}` add primary key (`".implode(
'`,`',array_keys(
$table->keys())).
"`)";
232 $res = mysql_query($sql,
$app->db());
233 if ( !$res ) trigger_error(mysql_error(
$app->db()), E_USER_ERROR);
243 foreach ($fielddefs as $field){
244 if ( !isset($cols[$field[
'Field']]) ){
245 $default = (@$field[
'Default'] ?
" DEFAULT {$field['Default']}":
'');
246 $sql =
"alter table `{$md_tablename}` add column `{$field['Field']}` {$field['Type']}{$default}";
247 $res = mysql_query($sql,
$app->db());
248 if ( !$res ) trigger_error(mysql_error(
$app->db()), E_USER_ERROR);