コード例 #1
0
ファイル: SchemaListener.php プロジェクト: opifer/revisions
 /**
  * @param GenerateSchemaTableEventArgs $eventArgs
  *
  * @throws \Exception
  */
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
 {
     $cm = $eventArgs->getClassMetadata();
     if (!$this->annotationReader->isRevised($cm->name)) {
         $revised = false;
         if ($cm->isInheritanceTypeJoined() && $cm->rootEntityName == $cm->name) {
             foreach ($cm->subClasses as $subClass) {
                 if ($this->annotationReader->isRevised($subClass)) {
                     $revised = true;
                 }
             }
         }
         if (!$revised) {
             return;
         }
     }
     if (!in_array($cm->inheritanceType, array(ClassMetadataInfo::INHERITANCE_TYPE_NONE, ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE))) {
         throw new \Exception(sprintf('Inheritance type "%s" is not yet supported', $cm->inheritanceType));
     }
     $schema = $eventArgs->getSchema();
     $entityTable = $eventArgs->getClassTable();
     $revisionTable = $schema->createTable($entityTable->getName() . '_revisions');
     $revisionTable->addColumn('revision_id', 'integer');
     $revisionTable->addColumn('rev_type', 'string', array('length' => 4));
     foreach ($entityTable->getColumns() as $column) {
         if (!in_array($column->getName(), $cm->identifier) && !$this->isColumnRevised($cm, $column->getName())) {
             continue;
         }
         /* @var Column $column */
         $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false)));
     }
     $pkColumns = $entityTable->getPrimaryKey()->getColumns();
     $pkColumns[] = 'revision_id';
     $revisionTable->setPrimaryKey($pkColumns);
 }
コード例 #2
0
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
 {
     $cm = $eventArgs->getClassMetadata();
     if (!$this->metadataFactory->isAudited($cm->name)) {
         $audited = false;
         if ($cm->isInheritanceTypeJoined() && $cm->rootEntityName == $cm->name) {
             foreach ($cm->subClasses as $subClass) {
                 if ($this->metadataFactory->isAudited($subClass)) {
                     $audited = true;
                 }
             }
         }
         if (!$audited) {
             return;
         }
     }
     $schema = $eventArgs->getSchema();
     $entityTable = $eventArgs->getClassTable();
     $revisionTable = $schema->createTable($this->config->getTablePrefix() . $entityTable->getName() . $this->config->getTableSuffix());
     foreach ($entityTable->getColumns() as $column) {
         /* @var $column Column */
         $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false)));
     }
     $revisionTable->addColumn($this->config->getRevisionFieldName(), $this->config->getRevisionIdFieldType());
     $revisionTable->addColumn($this->config->getRevisionTypeFieldName(), 'string', array('length' => 4));
     if (!in_array($cm->inheritanceType, array(ClassMetadataInfo::INHERITANCE_TYPE_NONE, ClassMetadataInfo::INHERITANCE_TYPE_JOINED, ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE))) {
         throw new \Exception(sprintf('Inheritance type "%s" is not yet supported', $cm->inheritanceType));
     }
     $pkColumns = $entityTable->getPrimaryKey()->getColumns();
     $pkColumns[] = $this->config->getRevisionFieldName();
     $revisionTable->setPrimaryKey($pkColumns);
 }
コード例 #3
0
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $args)
 {
     switch ($args->getClassMetadata()->getName()) {
         case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclClass':
         case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclEntry':
         case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclObjectIdentity':
         case 'Zym\\Bundle\\SecurityBundle\\Entity\\AclSecurityIdentity':
             $tableName = $args->getClassTable()->getName();
             $schema = $args->getSchema();
             $schema->dropTable($tableName);
             break;
         default:
     }
 }
コード例 #4
0
 /**
  * @param \Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs $args
  */
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $args)
 {
     foreach ($args->getClassTable()->getColumns() as $column) {
         if (!$column->getType() instanceof \Doctrine\Spatial\DBAL\Types\Type) {
             continue;
         }
         if (!$column->hasCustomSchemaOption('spatial_srid')) {
             $column->setCustomSchemaOption('spatial_srid', 4326);
         }
         if (!$column->hasCustomSchemaOption('spatial_dimension')) {
             $column->setCustomSchemaOption('spatial_dimension', 2);
         }
         if (!$column->hasCustomSchemaOption('spatial_index')) {
             $column->setCustomSchemaOption('spatial_index', false);
         }
     }
 }
コード例 #5
0
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
 {
     $cm = $eventArgs->getClassMetadata();
     if ($this->metadataFactory->isAudited($cm->name)) {
         $schema = $eventArgs->getSchema();
         $entityTable = $eventArgs->getClassTable();
         $revisionTable = $schema->createTable($this->config->getTablePrefix() . $entityTable->getName() . $this->config->getTableSuffix());
         foreach ($entityTable->getColumns() as $column) {
             /* @var $column Column */
             $revisionTable->addColumn($column->getName(), $column->getType()->getName(), array_merge($column->toArray(), array('notnull' => false, 'autoincrement' => false)));
         }
         $revisionTable->addColumn($this->config->getRevisionFieldName(), $this->config->getRevisionIdFieldType());
         $revisionTable->addColumn($this->config->getRevisionTypeFieldName(), 'string', array('length' => 4));
         $pkColumns = $entityTable->getPrimaryKey()->getColumns();
         $pkColumns[] = $this->config->getRevisionFieldName();
         $revisionTable->setPrimaryKey($pkColumns);
     }
 }
コード例 #6
0
 public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $args)
 {
     $table = $args->getClassTable();
     foreach ($table->getColumns() as $column) {
         if (!$this->isSpatialColumnType($column)) {
             continue;
         }
         $normalized = $column->getType()->getNormalizedPostGISColumnOptions($column->getCustomSchemaOptions());
         foreach ($normalized as $name => $value) {
             $column->setCustomSchemaOption($name, $value);
         }
     }
     // Add SPATIAL flags to indexes
     if ($table->hasOption('spatial_indexes')) {
         foreach ((array) $table->getOption('spatial_indexes') as $indexName) {
             if (!$table->hasIndex($indexName)) {
                 continue;
             }
             $table->getIndex($indexName)->addFlag('SPATIAL');
         }
     }
 }