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; }