public static function instance() { if (self::$instance === null) { self::$instance = new __MysqlTableFieldFactory(); } return self::$instance; }
function execute() { $definition = $this->tag; $field_factory = __MysqlTableFieldFactory::instance(); $field_list = array(); $rename_list = array(); foreach ($definition as $tag_name => $tag) { $attr = $tag->attributes(); switch ($tag_name) { case "primary_key": case "unique": case "fulltext": case "index": $field = $field_factory->{"create_" . $tag_name}($attr->name); break; case "autoincrement_id": $field = $field_factory->{"create_" . $tag_name}($attr->name, isset($attr->null) && $attr->null == "true" ? true : false, isset($attr->comment) ? $attr->comment : null, isset($attr->after_col_or_first) ? $attr->after_col_or_first : null, isset($attr->rename_from)); break; case "external_id": case "text_16": case "text_32": case "text_64": case "text_128": case "text_512": case "text_1024": case "text_65k": case "text_big": case "bool": case "unsigned_int_8": case "unsigned_int_32": case "signed_int_8": case "signed_int_32": case "double": case "numeric": case "date": case "time": case "datetime": case "timestamp": $field = $field_factory->{"create_" . $tag_name}($attr->name, isset($attr->null) && $attr->null == "true" ? true : false, isset($attr->comment) ? $attr->comment : null, isset($attr->after_col_or_first) ? $attr->after_col_or_first : null); break; default: throw new InvalidParameterException("Il tag : " . $tag_name . " non e' supportato."); } if (isset($attr->rename_from)) { $rename_list["" . $attr->rename_from] = $field; } else { $field_list[] = $field; } } //Flash::warning(count($rename_list)); $table_name = $definition->attributes()->table_name; $db_desc = DB::newDatabaseDescription(); //if (count($rename_list)>0 && $db_desc->hasTable($table_name)) // throw new IllegalStateException("Non è possibile creare la tabella se ci sono dei rename da effettuare!!"); //aggiungere controllo su campi già presenti nella tabella e spostarli come change if (!$db_desc->hasTable($table_name)) { $create_table = DB::newCreateTable($table_name); foreach ($field_list as $i => $definition) { $create_table->add_column($definition); } $create_table->exec(); } else { if (count($field_list) > 0 || count($rename_list) > 0) { $alter = DB::newAlterTable($table_name); foreach ($field_list as $ix => $definition) { $alter->add_column($definition); } foreach ($rename_list as $old_name => $definition) { $alter->change_column($old_name, $definition); } } else { Flash::warning("No fields found in field list!!"); } } }
public function getFieldFactory() { return __MysqlTableFieldFactory::instance(); }