/** * 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); }
/** * 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; }