diff --git a/core/abstract/abstract_driver.php b/core/abstract/abstract_driver.php index ca34e35..a45138e 100644 --- a/core/abstract/abstract_driver.php +++ b/core/abstract/abstract_driver.php @@ -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); } // -------------------------------------------------------------------------- diff --git a/core/abstract/abstract_table.php b/core/abstract/abstract_table.php new file mode 100644 index 0000000..9943364 --- /dev/null +++ b/core/abstract/abstract_table.php @@ -0,0 +1,98 @@ + $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 \ No newline at end of file diff --git a/core/query_builder.php b/core/query_builder.php index e67a9e3..c1facc9 100644 --- a/core/query_builder.php +++ b/core/query_builder.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; diff --git a/core/table_builder.php b/core/table_builder.php new file mode 100644 index 0000000..b274416 --- /dev/null +++ b/core/table_builder.php @@ -0,0 +1,293 @@ +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 diff --git a/core/table_column.php b/core/table_column.php new file mode 100644 index 0000000..141e0d4 --- /dev/null +++ b/core/table_column.php @@ -0,0 +1,78 @@ +