278 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Yoast\WP\Lib\Migrations;
 | 
						|
 | 
						|
/**
 | 
						|
 * Base migration class.
 | 
						|
 */
 | 
						|
abstract class Migration {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The plugin this migration belongs to.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	public static $plugin = 'unknown';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The adapter.
 | 
						|
	 *
 | 
						|
	 * @var Adapter
 | 
						|
	 */
 | 
						|
	private $adapter;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Performs the migration.
 | 
						|
	 *
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	abstract public function up();
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Reverts the migration.
 | 
						|
	 *
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	abstract public function down();
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Creates a new migration.
 | 
						|
	 *
 | 
						|
	 * @param Adapter $adapter The current adapter.
 | 
						|
	 */
 | 
						|
	public function __construct( Adapter $adapter ) {
 | 
						|
		$this->set_adapter( $adapter );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Sets an adapter.
 | 
						|
	 *
 | 
						|
	 * @param Adapter $adapter The adapter to set.
 | 
						|
	 *
 | 
						|
	 * @return $this|null
 | 
						|
	 */
 | 
						|
	public function set_adapter( $adapter ) {
 | 
						|
		if ( ! $adapter instanceof Adapter ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
		$this->adapter = $adapter;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns the current adapter.
 | 
						|
	 *
 | 
						|
	 * @return object
 | 
						|
	 */
 | 
						|
	public function get_adapter() {
 | 
						|
		return $this->adapter;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Creates a database.
 | 
						|
	 *
 | 
						|
	 * @param string     $name    The name of the database.
 | 
						|
	 * @param array|null $options The options.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function create_database( $name, $options = null ) {
 | 
						|
		return $this->adapter->create_database( $name, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Drops a database.
 | 
						|
	 *
 | 
						|
	 * @param string $name The name of the database.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function drop_database( $name ) {
 | 
						|
		return $this->adapter->drop_database( $name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Drops a table.
 | 
						|
	 *
 | 
						|
	 * @param string $table_name The name of the table.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function drop_table( $table_name ) {
 | 
						|
		return $this->adapter->drop_table( $table_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Renames a table.
 | 
						|
	 *
 | 
						|
	 * @param string $name     The name of the table.
 | 
						|
	 * @param string $new_name The new name of the table.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function rename_table( $name, $new_name ) {
 | 
						|
		return $this->adapter->rename_table( $name, $new_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Renames a column.
 | 
						|
	 *
 | 
						|
	 * @param string $table_name      The name of the table.
 | 
						|
	 * @param string $column_name     The column name.
 | 
						|
	 * @param string $new_column_name The new column name.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function rename_column( $table_name, $column_name, $new_column_name ) {
 | 
						|
		return $this->adapter->rename_column( $table_name, $column_name, $new_column_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Adds a column.
 | 
						|
	 *
 | 
						|
	 * @param string       $table_name  The name of the table.
 | 
						|
	 * @param string       $column_name The column name.
 | 
						|
	 * @param string       $type        The column type.
 | 
						|
	 * @param array|string $options     The options.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function add_column( $table_name, $column_name, $type, $options = [] ) {
 | 
						|
		return $this->adapter->add_column( $table_name, $column_name, $type, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Removes a column.
 | 
						|
	 *
 | 
						|
	 * @param string $table_name  The name of the table.
 | 
						|
	 * @param string $column_name The column name.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function remove_column( $table_name, $column_name ) {
 | 
						|
		return $this->adapter->remove_column( $table_name, $column_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Changes a column.
 | 
						|
	 *
 | 
						|
	 * @param string       $table_name  The name of the table.
 | 
						|
	 * @param string       $column_name The column name.
 | 
						|
	 * @param string       $type        The column type.
 | 
						|
	 * @param array|string $options     The options.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function change_column( $table_name, $column_name, $type, $options = [] ) {
 | 
						|
		return $this->adapter->change_column( $table_name, $column_name, $type, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Adds an index.
 | 
						|
	 *
 | 
						|
	 * @param string       $table_name  The name of the table.
 | 
						|
	 * @param array|string $column_name The column name.
 | 
						|
	 * @param array|string $options     The options.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function add_index( $table_name, $column_name, $options = [] ) {
 | 
						|
		return $this->adapter->add_index( $table_name, $column_name, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Removes an index.
 | 
						|
	 *
 | 
						|
	 * @param string       $table_name  The name of the table.
 | 
						|
	 * @param array|string $column_name The column name.
 | 
						|
	 * @param array|string $options     The options.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function remove_index( $table_name, $column_name, $options = [] ) {
 | 
						|
		return $this->adapter->remove_index( $table_name, $column_name, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Adds timestamps.
 | 
						|
	 *
 | 
						|
	 * @param string $table_name          The name of the table.
 | 
						|
	 * @param string $created_column_name Created at column name.
 | 
						|
	 * @param string $updated_column_name Updated at column name.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function add_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) {
 | 
						|
		return $this->adapter->add_timestamps( $table_name, $created_column_name, $updated_column_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Removes timestamps.
 | 
						|
	 *
 | 
						|
	 * @param string $table_name          The name of the table.
 | 
						|
	 * @param string $created_column_name Created at column name.
 | 
						|
	 * @param string $updated_column_name Updated at column name.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function remove_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) {
 | 
						|
		return $this->adapter->remove_timestamps( $table_name, $created_column_name, $updated_column_name );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Creates a table.
 | 
						|
	 *
 | 
						|
	 * @param string       $table_name The name of the table.
 | 
						|
	 * @param array|string $options    The options.
 | 
						|
	 *
 | 
						|
	 * @return bool|Table
 | 
						|
	 */
 | 
						|
	public function create_table( $table_name, $options = [] ) {
 | 
						|
		return $this->adapter->create_table( $table_name, $options );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Execute a query and return the first result.
 | 
						|
	 *
 | 
						|
	 * @param string $sql The query to run.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	public function select_one( $sql ) {
 | 
						|
		return $this->adapter->select_one( $sql );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Execute a query and return all results.
 | 
						|
	 *
 | 
						|
	 * @param string $sql The query to run.
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	public function select_all( $sql ) {
 | 
						|
		return $this->adapter->select_all( $sql );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Execute a query.
 | 
						|
	 *
 | 
						|
	 * @param string $sql The query to run.
 | 
						|
	 *
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function query( $sql ) {
 | 
						|
		return $this->adapter->query( $sql );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Returns a quoted string.
 | 
						|
	 *
 | 
						|
	 * @param string $str The string to quote.
 | 
						|
	 *
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	public function quote_string( $str ) {
 | 
						|
		return $this->adapter->quote_string( $str );
 | 
						|
	}
 | 
						|
}
 |