Add beginning of table builder classes
This commit is contained in:
parent
2af3b0be9f
commit
9011678dc3
@ -15,6 +15,10 @@
|
||||
|
||||
namespace Query\Driver;
|
||||
|
||||
use Query\Table\Table_Builder;
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Base Database class
|
||||
*
|
||||
@ -88,7 +92,7 @@ abstract class Abstract_Driver extends \PDO implements Driver_Interface {
|
||||
$this->$sub = new $class($this);
|
||||
}
|
||||
|
||||
$this->table = new \Query\Table\Table_Builder('', array(), $this);
|
||||
$this->table = new Table_Builder('', array(), $this);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
98
core/abstract/abstract_table.php
Normal file
98
core/abstract/abstract_table.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* Query
|
||||
*
|
||||
* Free Query Builder / Database Abstraction Layer
|
||||
*
|
||||
* @package Query
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012 - 2014
|
||||
* @link https://github.com/aviat4ion/Query
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
namespace Query\Table;
|
||||
|
||||
/**
|
||||
* Base class for table builder component classes`
|
||||
*/
|
||||
abstract class Abstract_Table {
|
||||
|
||||
/**
|
||||
* Valid options for the current class
|
||||
* @var array
|
||||
*/
|
||||
protected $valid_options;
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Abstract Methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* String representation of the column/index
|
||||
*/
|
||||
abstract public function __toString();
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Concrete methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set options for the current column
|
||||
*
|
||||
* @param array $options
|
||||
* return \Query\Table_Column
|
||||
*/
|
||||
public function set_options(Array $options)
|
||||
{
|
||||
$type = end(explode('_', get_class($this)));
|
||||
|
||||
foreach($options as $option => $value)
|
||||
{
|
||||
if ( ! in_array($option, $this->valid_options))
|
||||
{
|
||||
throw new \InvalidArgumentException("{$option} is not a valid {$type}");
|
||||
}
|
||||
|
||||
$func = "set_{$option}";
|
||||
|
||||
(method_exists($this, "set_{$option}"))
|
||||
? $this->$func($value)
|
||||
: $this->__set($option, $value);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Getters
|
||||
* @param mixed $name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
if ( ! isset($this->$name)) return NULL;
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Setters
|
||||
* @param mixed $name
|
||||
* @param mixed $val
|
||||
* @return \Query\Table_Column
|
||||
*/
|
||||
public function __set($name, $val)
|
||||
{
|
||||
$this->$name = $val;
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
// End of abstract_table.php
|
@ -15,6 +15,8 @@
|
||||
|
||||
namespace Query;
|
||||
|
||||
use \Query\Driver\Driver_Interface;
|
||||
|
||||
/**
|
||||
* Convienience class for creating sql queries - also the class that
|
||||
* instantiates the specific db driver
|
||||
@ -180,7 +182,7 @@ class Query_Builder implements Query_Builder_Interface {
|
||||
*
|
||||
* @param \Query\Driver\Driver_Interface $db
|
||||
*/
|
||||
public function __construct(\Query\Driver\Driver_Interface $db)
|
||||
public function __construct(Driver_Interface $db)
|
||||
{
|
||||
$this->db = $db;
|
||||
|
||||
|
293
core/table_builder.php
Normal file
293
core/table_builder.php
Normal file
@ -0,0 +1,293 @@
|
||||
<?php
|
||||
/**
|
||||
* Query
|
||||
*
|
||||
* Free Query Builder / Database Abstraction Layer
|
||||
*
|
||||
* @package Query
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012 - 2014
|
||||
* @link https://github.com/aviat4ion/Query
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
namespace Query\Table;
|
||||
|
||||
/**
|
||||
* Abstract class defining database / table creation methods
|
||||
*
|
||||
* @package Query
|
||||
* @subpackage Table_Builder
|
||||
*/
|
||||
class Table_Builder {
|
||||
|
||||
/**
|
||||
* The name of the current table
|
||||
* @var string
|
||||
*/
|
||||
protected $name = '';
|
||||
|
||||
/**
|
||||
* Driver for the current db
|
||||
* @var Driver_Interface
|
||||
*/
|
||||
private $driver = NULL;
|
||||
|
||||
/**
|
||||
* Options for the current table
|
||||
* @var array
|
||||
*/
|
||||
private $table_options = array();
|
||||
|
||||
/**
|
||||
* Columns to be added/updated for the current table
|
||||
* @var array
|
||||
*/
|
||||
private $columns = array();
|
||||
|
||||
/**
|
||||
* Indexes to be added/updated for the current table
|
||||
* @var array
|
||||
*/
|
||||
private $indexes = array();
|
||||
|
||||
/**
|
||||
* Foreign keys to be added/updated for the current table
|
||||
* @var array
|
||||
*/
|
||||
private $foreign_keys = array();
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $options
|
||||
* @param Driver_Interface $driver
|
||||
* @return Table_Builder
|
||||
*/
|
||||
public function __construct($name, $options = array(), \Query\Driver\Driver_Interface $driver = NULL)
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
if ( ! empty($options))
|
||||
{
|
||||
$this->table_options = array_merge($this->table_options, $options);
|
||||
}
|
||||
|
||||
if ( ! is_null($driver))
|
||||
{
|
||||
$this->driver = $driver;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Alias to constructor
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $options
|
||||
* @param \Query\Driver_Interface $driver
|
||||
*/
|
||||
public function __invoke($name, $options = array(), \Query\Driver\Driver_Interface $driver = NULL)
|
||||
{
|
||||
$this->__construct($name, $options, $driver);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set the reference to the current database driver
|
||||
*
|
||||
* @param \Query\Driver_Interface $driver
|
||||
* @return \Query\Table_Builder
|
||||
*/
|
||||
public function set_driver(\Query\Driver_Interface $driver)
|
||||
{
|
||||
$this->driver = $driver;
|
||||
return $this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the current DB Driver
|
||||
*
|
||||
* @return \Query\Driver_Interface
|
||||
*/
|
||||
public function get_driver()
|
||||
{
|
||||
return $this->driver;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Column Methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Add a column to the current table
|
||||
*
|
||||
* @param string $column_name
|
||||
* @param string $type
|
||||
* @param array $options
|
||||
*/
|
||||
public function add_column($column_name, $type = NULL, $options = array())
|
||||
{
|
||||
$col = new Table_Column($column_name, $type, $options);
|
||||
$this->columns[] = $col;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function remove_column($column_name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function rename_column($old_name, $new_name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function change_column($column_name, $new_column_type, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function has_column($column_name, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Index Methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function add_index($columns, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function remove_index($columns, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function remove_index_by_name($name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function has_index($columns, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Foreign Key Methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function add_foreign_key($columns, $referenced_table, $referenced_columns = array('id'), $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function drop_foreign_key($columns, $constraint = NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function has_foreign_key($columns, $constraint = NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Table-wide methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function exists()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function drop()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function rename($new_table_name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function get_columns()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Action methods
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function create()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function save()
|
||||
{
|
||||
($this->exists())
|
||||
? $this->update()
|
||||
: $this->create();
|
||||
|
||||
$this->reset();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
public function reset()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// End of table_bulider.php
|
78
core/table_column.php
Normal file
78
core/table_column.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* Query
|
||||
*
|
||||
* Free Query Builder / Database Abstraction Layer
|
||||
*
|
||||
* @package Query
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012 - 2014
|
||||
* @link https://github.com/aviat4ion/Query
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
namespace Query\Table;
|
||||
|
||||
/**
|
||||
* Class representing a column when creating a table
|
||||
*/
|
||||
class Table_Column extends Abstract_Table {
|
||||
|
||||
/**
|
||||
* The name of the column
|
||||
* @var string
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* The type of the column
|
||||
* @var string
|
||||
*/
|
||||
protected $type;
|
||||
|
||||
/**
|
||||
* Valid column options
|
||||
* @var type array
|
||||
*/
|
||||
protected $valid_options = array(
|
||||
'limit',
|
||||
'length',
|
||||
'default',
|
||||
'null',
|
||||
'precision',
|
||||
'scale',
|
||||
'after',
|
||||
'update',
|
||||
'comment'
|
||||
);
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set the attributes for the column
|
||||
*
|
||||
* @param string $name
|
||||
* @param [string] $type
|
||||
* @param [array] $options
|
||||
*/
|
||||
public function __construct($name, $type = NULL, $options = array())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Return the string to create the column
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// End of table_column.php
|
41
core/table_foreign_key.php
Normal file
41
core/table_foreign_key.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Query
|
||||
*
|
||||
* Free Query Builder / Database Abstraction Layer
|
||||
*
|
||||
* @package Query
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012 - 2014
|
||||
* @link https://github.com/aviat4ion/Query
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
namespace Query\Table;
|
||||
|
||||
/**
|
||||
* Class representing a foreign key
|
||||
*/
|
||||
class Table_Foreign_Key extends Abstract_Table {
|
||||
|
||||
/**
|
||||
* Valid options for a foreign key
|
||||
* @var type array
|
||||
*/
|
||||
protected $valid_options = array(
|
||||
'delete',
|
||||
'update',
|
||||
'constraint'
|
||||
);
|
||||
|
||||
/**
|
||||
* String representation of the foreign key
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
// End of table_foreign_key.php
|
42
core/table_index.php
Normal file
42
core/table_index.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Query
|
||||
*
|
||||
* Free Query Builder / Database Abstraction Layer
|
||||
*
|
||||
* @package Query
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012 - 2014
|
||||
* @link https://github.com/aviat4ion/Query
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
namespace Query\Table;
|
||||
|
||||
/**
|
||||
* Class representing indicies when creating a table
|
||||
*/
|
||||
class Table_Index extends Abstract_Table {
|
||||
|
||||
/**
|
||||
* Valid options for a table index
|
||||
* @var array
|
||||
*/
|
||||
protected $valid_options = array(
|
||||
'type',
|
||||
'unique',
|
||||
'name'
|
||||
);
|
||||
|
||||
/**
|
||||
* Return the string representation of the current index
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// End of table_index.php
|
Loading…
Reference in New Issue
Block a user