/**
  * setUpBeforeClass
  *
  * @throws \LogicException
  * @return  void
  */
 public static function setUpBeforeClass()
 {
     if (!static::$driver) {
         throw new \LogicException('static::$driver variable is empty.');
     }
     static::$dsn = $dsn = TestDsnResolver::getDsn(static::$driver);
     if (!$dsn) {
         static::markTestSkipped('DSN of driver ' . static::$driver . ' not available');
     }
     static::$dbname = $dbname = isset($dsn['dbname']) ? $dsn['dbname'] : null;
     if (!$dbname) {
         throw new \LogicException(sprintf('No dbname in %s DSN', static::$driver));
     }
     // Id db exists, return.
     if (static::$dbo) {
         static::$dbo->select($dbname);
         return;
     }
     try {
         // Use factory create dbo, only create once and will be singleton.
         $db = self::$dbo = DatabaseFactory::getDbo(static::$driver, array('host' => isset($dsn['host']) ? $dsn['host'] : null, 'user' => isset($dsn['user']) ? $dsn['user'] : null, 'password' => isset($dsn['pass']) ? $dsn['pass'] : null, 'port' => isset($dsn['port']) ? $dsn['port'] : null, 'prefix' => isset($dsn['prefix']) ? $dsn['prefix'] : null));
     } catch (\RangeException $e) {
         static::markTestSkipped($e->getMessage());
         return;
     }
     $database = $db->getDatabase($dbname);
     if (static::$debug) {
         $database->drop(true);
     }
     $database->create(true);
     $db->select($dbname);
     $queries = file_get_contents(__DIR__ . '/Stub/' . static::$driver . '.sql');
     DatabaseHelper::batchQuery($db, $queries);
 }
Ejemplo n.º 2
0
 /**
  * changeColumn
  *
  * @param string $oldName
  * @param string|Column  $newName
  * @param string $type
  * @param bool   $signed
  * @param bool   $allowNull
  * @param string $default
  * @param string $comment
  * @param array  $options
  *
  * @return  static
  */
 public function changeColumn($oldName, $newName, $type = 'text', $signed = true, $allowNull = true, $default = '', $comment = '', $options = array())
 {
     $column = $name = $newName;
     if ($column instanceof Column) {
         $name = $column->getName();
         $type = $column->getType();
         $length = $column->getLength();
         $allowNull = $column->getAllowNull();
         $default = $column->getDefault();
         $comment = $column->getComment();
     }
     $type = PostgresqlType::getType($type);
     $length = isset($length) ? $length : PostgresqlType::getLength($type);
     $length = PostgresqlType::noLength($type) ? null : $length;
     $length = $length ? '(' . $length . ')' : null;
     $query = $this->db->getQuery(true);
     // Type
     $sql = PostgresqlQueryBuilder::build('ALTER TABLE ' . $query->quoteName($this->table), 'ALTER COLUMN', $query->quoteName($oldName), 'TYPE', $type . $length, $this->usingTextToNumeric($oldName, $type));
     // Not NULL
     $sql .= ";\n" . PostgresqlQueryBuilder::build('ALTER TABLE ' . $query->quoteName($this->table), 'ALTER COLUMN', $query->quoteName($oldName), $allowNull ? 'DROP' : 'SET', 'NOT NULL');
     // Default
     if (!is_null($default)) {
         $sql .= ";\n" . PostgresqlQueryBuilder::build('ALTER TABLE ' . $query->quoteName($this->table), 'ALTER COLUMN', $query->quoteName($oldName), 'SET DEFAULT' . $query->quote($default));
     }
     // Comment
     $sql .= ";\n" . PostgresqlQueryBuilder::comment('COLUMN', $this->table, $oldName, $comment);
     // Rename
     $sql .= ";\n" . PostgresqlQueryBuilder::renameColumn($this->table, $oldName, $name);
     DatabaseHelper::batchQuery($this->db, $sql);
     return $this;
 }