31 const CHARSET_KEY =
'charset';
33 const COLUMNS_KEY =
'columns';
34 const INDEXES_KEY =
'indexes';
35 const FOREIGNS_KEY =
'foreigns';
36 const PRIMARY_KEY =
'primary';
41 protected $_columnsManagerClass =
'ZendDbSchema_Db_Schema_Table_DefinitionManager_Column';
46 protected $_indexesManagerClass =
'ZendDbSchema_Db_Schema_Table_DefinitionManager_Index';
51 protected $_foreignsManagerClass =
'ZendDbSchema_Db_Schema_Table_DefinitionManager_ForeignKey';
56 protected $_columnClass =
'ZendDbSchema_Db_Schema_Table_Column';
61 protected $_indexClass =
'ZendDbSchema_Db_Schema_Table_Index';
66 protected $_foreignClass =
'ZendDbSchema_Db_Schema_Table_ForeignKey';
71 protected $_primaryKeyClass =
'ZendDbSchema_Db_Schema_Table_PrimaryKey';
125 if (!$loader || !$generator) {
127 case $adapter instanceof Zend_Db_Adapter_Mysqli:
128 case $adapter instanceof Zend_Db_Adapter_Pdo_Mysql:
140 $this->_generator = $generator;
141 $this->_loader = $loader;
142 $this->_adapter = $adapter;
153 public function __set($name, $value)
155 if (self::NAME_KEY == $name && $value) {
156 if ($this->_name != $value && $this->
getAdapter()->hasTable($value)) {
172 $this->_indexes = $this->_columns = $this->_primary = $this->_foreigns = null;
184 return $this->_columnClass;
194 return $this->_indexClass;
204 return $this->_foreignClass;
216 if (!empty($schema[self::COLUMNS_KEY])) {
217 $columns = $schema[self::COLUMNS_KEY];
219 $this->
columns()->setFromArray($columns);
222 if (!empty($schema[self::INDEXES_KEY])) {
223 $index = $schema[self::INDEXES_KEY];
225 $this->
indexes()->setFromArray($index);
228 if (!empty($schema[self::FOREIGNS_KEY])) {
229 $foreign = $schema[self::FOREIGNS_KEY];
231 $this->
foreigns()->setFromArray($foreign);
234 if (!empty($schema[self::PRIMARY_KEY])) {
235 $primary = $schema[self::PRIMARY_KEY];
237 $this->
primary()->setFromArray($primary);
240 $schema[self::COLUMNS_KEY],
241 $schema[self::INDEXES_KEY],
242 $schema[self::FOREIGNS_KEY],
243 $schema[self::PRIMARY_KEY]
258 $schema[self::COLUMNS_KEY] = $this->
columns()->toArray();
259 $schema[self::PRIMARY_KEY] = $this->
primary()->toArray();
260 $schema[self::INDEXES_KEY] = $this->
indexes()->toArray();
261 $schema[self::FOREIGNS_KEY] = $this->
foreigns()->toArray();
273 if (!$this->_columns) {
274 $this->_columns =
new $this->_columnsManagerClass($this);
276 return $this->_columns;
288 $this->_primary = $primary;
289 } elseif (!$this->_primary) {
290 $this->_primary =
new $this->_primaryKeyClass($this);
292 return $this->_primary;
302 if (!$this->_indexes) {
303 $this->_indexes =
new $this->_indexesManagerClass($this);
305 return $this->_indexes;
315 if (!$this->_foreigns) {
316 $this->_foreigns =
new $this->_foreignsManagerClass($this);
318 return $this->_foreigns;
327 public function toSql($alter =
false)
335 foreach ($this->
columns() as $column) {
336 if ($alter && $column->isDirty()) {
337 $query[] = $column->toSql($alter);
340 foreach ($this->
indexes() as $index) {
341 if (!$alter || $index->isDirty()) {
342 $query[] = $index->toSql($alter);
347 $query[] = $this->
primary()->toSql($alter);
350 foreach ($this->
foreigns() as $foreignKey) {
351 if (!$alter || $foreignKey->isDirty()) {
352 $query[] = $foreignKey->toSql($alter);
356 return join(
';' . PHP_EOL, array_filter($query));
370 if (!array_key_exists($param, $clean)) {
377 $clean[self::COLUMNS_KEY],
378 $clean[self::INDEXES_KEY],
379 $clean[self::PRIMARY_KEY],
380 $clean[self::FOREIGNS_KEY]
383 if (count($clean) != count($this->_params)) {
386 foreach ($this->_params as $paramName => $paramValue) {
387 if ($this->
isDirty($paramName)) {
432 $this->_cleanSchema = $this->_loader->load(