| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace cx_newsletter;
- use \wpdb;
- use \cx_appengine\string_builder;
- abstract class database_builder
- extends database_worker
- implements database_builder_interface {
- public function __construct(
- wpdb $database,
- table_names $tables,
- database_versions_manager $versions
- ) {
- parent::__construct($database, $tables);
- $this->versions = $versions;
- }
- protected function drop_table(string $name) : void {
- $query = $this->get_database()->prepare('drop table if exists '.$name);
- $this->get_database()->query($query);
- }
- protected function table_exists(string $name) : bool {
- $name = $this->get_database()->esc_like($name);
- $query = $this->get_database()->prepare('show tables like %s', $name);
- return $this->get_database()->get_var($query) === $name;
- }
-
- protected function add_column(
- string $table,
- string $column,
- string $type
- ) : void {
- $query = (
- 'alter table '.$table.' '.
- 'add column '.$column.' '.$type
- );
- $this->get_database()->query($query);
- }
- protected function add_foreign_key(
- string $table,
- string $column,
- string $foreign_table,
- string $foreign_column
- ) : void {
- $query = (
- 'alter table '.$table.' '.
- 'add foreign key ('.$column.') '.
- 'references '.$foreign_table.'('.$foreign_column.')'
- );
- $this->get_database()->query($query);
- }
- protected function create_table(string $name, array $structure) : void {
- $query = 'create table '.$name.' ';
- $query .= $this->string_from_structure($structure);
- $this->get_database()->query($query);
- }
- private function string_from_structure(array $structure) : string {
- $flat = [];
- foreach ($structure as $key => $type) {
- array_push($flat, $key.' '.$type);
- }
- $result = new string_builder($flat, ', ');
- $result->push(')');
- $result->push_start('(');
- return $result->get();
- }
- protected function get_versions() : database_versions_manager {
- return $this->versions;
- }
- private database_versions_manager $versions;
- }
|