Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Db/Schema/AbstractDdl.php
<?php

namespace XF\Db\Schema;

use
XF\Db\AbstractAdapter;
use
XF\Db\SchemaManager;

abstract class
AbstractDdl
{
   
/**
     * @var AbstractAdapter
     */
   
protected $db;

   
/**
     * @var SchemaManager
     */
   
protected $sm;

    protected
$tableName;

   
/**
     * @var Column[]
     */
   
protected $addColumns = [];

   
/**
     * @var Index[]
     */
   
protected $addIndexes = [];

    protected
$forceChanges = true;

    protected
$autoIncrementIndex;

    abstract public function
getQueries();

    public function
__construct(AbstractAdapter $db, SchemaManager $sm, $tableName)
    {
       
$this->db = $db;
       
$this->sm = $sm;
       
$this->tableName = $tableName;
    }

    public function
getTableName()
    {
        return
$this->tableName;
    }

    public function
forceChanges($force = true)
    {
       
$this->forceChanges = $force;

        return
$this;
    }

    public function
addColumn($columnName, $type = null, $length = null)
    {
       
$column = new Column($this->db, $this, $columnName, null, $this->forceChanges);

        if (
$type !== null)
        {
           
$column->type($type);
        }
        if (
$length !== null)
        {
           
$column->length($length);
        }

       
$this->addColumns[] = $column;

        return
$column;
    }

    public function
addIndex($indexName = null)
    {
       
$index = new Index($this->db, $this, $indexName, null, $this->forceChanges);

       
$this->addIndexes[] = $index;

        return
$index;
    }

   
/**
     * @param $column
     *
     * @return Index
     */
   
public function addPrimaryKey($column)
    {
       
$index = $this->addIndex('primary');

       
$index->columns($column);
       
$index->type('primary');

        return
$index;
    }

   
/**
     * @param $column
     * @param null $indexName
     *
     * @return Index
     */
   
public function addUniqueKey($column, $indexName = null)
    {
       
$index = $this->addIndex($indexName);

       
$index->columns($column);
       
$index->type('unique');

        return
$index;
    }

   
/**
     * @param $column
     * @param null $indexName
     *
     * @return Index
     */
   
public function addKey($column, $indexName = null)
    {
       
$index = $this->addIndex($indexName);

       
$index->columns($column);
       
$index->type('key');

        return
$index;
    }

   
/**
     * @param $column
     * @param null $indexName
     *
     * @return Index
     */
   
public function addFullTextKey($column, $indexName = null)
    {
       
$index = $this->addIndex($indexName);

       
$index->columns($column);
       
$index->type('fulltext');

        return
$index;
    }

    public function
setAutoIncrementIndex(int $index)
    {
       
$this->autoIncrementIndex = $index;
    }

    public function
apply()
    {
       
$queries = $this->getQueries();

        foreach (
$queries AS $query)
        {
           
$this->db->query($query);
        }

        return
$queries;
    }
}