public function testCompareChangedColumns_ChangeCustomSchemaOption()
 {
     $column1 = new Column('charfield1', Type::getType('string'));
     $column2 = new Column('charfield1', Type::getType('string'));
     $column1->setCustomSchemaOption('foo', 'bar');
     $column2->setCustomSchemaOption('foo', 'bar');
     $column1->setCustomSchemaOption('foo1', 'bar1');
     $column2->setCustomSchemaOption('foo2', 'bar2');
     $c = new Comparator();
     $this->assertEquals(array('foo1', 'foo2'), $c->diffColumn($column1, $column2));
     $this->assertEquals(array(), $c->diffColumn($column1, $column1));
 }
 public function onSchemaColumnDefinition(SchemaColumnDefinitionEventArgs $args)
 {
     $tableColumn = array_change_key_case($args->getTableColumn(), CASE_LOWER);
     $table = $args->getTable();
     $info = null;
     if ('geometry' === $tableColumn['type']) {
         $info = $this->schemaManager->getGeometrySpatialColumnInfo($table, $tableColumn['field']);
     } elseif ('geography' === $tableColumn['type']) {
         $info = $this->schemaManager->getGeographySpatialColumnInfo($table, $tableColumn['field']);
     }
     if (!$info) {
         return;
     }
     $default = null;
     if (isset($tableColumn['default']) && 'NULL::geometry' !== $tableColumn['default'] && 'NULL::geography' !== $tableColumn['default']) {
         $default = $tableColumn['default'];
     }
     $options = array('notnull' => (bool) $tableColumn['isnotnull'], 'default' => $default, 'primary' => (bool) ($tableColumn['pri'] == 't'), 'comment' => isset($tableColumn['comment']) ? $tableColumn['comment'] : null);
     $column = new Column($tableColumn['field'], PostGISType::getType($tableColumn['type']), $options);
     $column->setCustomSchemaOption('geometry_type', $info['type'])->setCustomSchemaOption('srid', $info['srid']);
     $args->setColumn($column)->preventDefault();
 }
 /**
  * @param \Doctrine\ORM\Tools\Event\SchemaColumnDefinitionEventArgs $args
  */
 public function onSchemaColumnDefinition(SchemaColumnDefinitionEventArgs $args)
 {
     $tableColumn = $args->getTableColumn();
     $table = $args->getTable();
     $conn = $args->getConnection();
     $tableColumn = array_change_key_case($tableColumn, CASE_LOWER);
     if ($tableColumn['type'] !== 'geometry') {
         return;
     }
     $sql = "SELECT COUNT(*) as index_exists\n                FROM pg_class, pg_index\n                WHERE oid IN (\n                    SELECT indexrelid\n                    FROM pg_index si, pg_class sc, pg_namespace sn\n                    WHERE sc.relname = ? AND sc.oid = si.indrelid AND sc.relnamespace = sn.oid\n                 ) AND pg_index.indexrelid = oid AND relname = ?";
     $stmt = $conn->prepare($sql);
     $stmt->execute(array($table, $this->generateIndexName($table, $tableColumn['field'])));
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $indexExists = $row['index_exists'] > 0;
     $sql = 'SELECT coord_dimension, srid, type FROM geometry_columns WHERE f_table_name = ? AND f_geometry_column = ?';
     $stmt = $conn->prepare($sql);
     $stmt->execute(array($table, $tableColumn['field']));
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $type = strtolower($row['type']);
     $options = array('length' => null, 'notnull' => (bool) $tableColumn['isnotnull'], 'default' => isset($tableColumn['default']) ? $tableColumn['default'] : null, 'primary' => (bool) ($tableColumn['pri'] == 't'), 'precision' => null, 'scale' => null, 'fixed' => null, 'unsigned' => false, 'autoincrement' => false, 'comment' => isset($tableColumn['comment']) ? $tableColumn['comment'] : null);
     $column = new Column($tableColumn['field'], Type::getType($type), $options);
     $column->setCustomSchemaOption('spatial_srid', (int) $row['srid'])->setCustomSchemaOption('spatial_dimension', (int) $row['coord_dimension'])->setCustomSchemaOption('spatial_index', (bool) $indexExists);
     $args->preventDefault()->setColumn($column);
 }
 /**
  * @param \Doctrine\ORM\Tools\Event\SchemaColumnDefinitionEventArgs $args
  */
 public function onSchemaColumnDefinition(SchemaColumnDefinitionEventArgs $args)
 {
     $tableColumn = $args->getTableColumn();
     $table = $args->getTable();
     $conn = $args->getConnection();
     $tableColumn = array_change_key_case($tableColumn, CASE_LOWER);
     switch (strtolower($tableColumn['type'])) {
         case 'point':
         case 'linestring':
         case 'polygon':
         case 'multipoint':
         case 'multilinestring':
         case 'multipolygon':
         case 'geometrycollection':
             break;
         default:
             return;
     }
     $sql = "SHOW INDEX FROM " . $table . " WHERE Column_name = ?";
     $stmt = $conn->prepare($sql);
     $stmt->execute(array($this->generateIndexName($table, $tableColumn['field'])));
     $indexExists = (bool) $stmt->fetch(\PDO::FETCH_ASSOC);
     $options = array('length' => null, 'unsigned' => false, 'fixed' => null, 'default' => isset($tableColumn['default']) ? $tableColumn['default'] : null, 'notnull' => (bool) ($tableColumn['null'] != 'YES'), 'scale' => null, 'precision' => null, 'autoincrement' => false, 'comment' => isset($tableColumn['comment']) ? $tableColumn['comment'] : null);
     $column = new Column($tableColumn['field'], Type::getType($tableColumn['type']), $options);
     $column->setCustomSchemaOption('spatial_srid', 4326)->setCustomSchemaOption('spatial_dimension', 2)->setCustomSchemaOption('spatial_index', $indexExists);
     $args->preventDefault()->setColumn($column);
 }