2016-03-19 01:18:49 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2016-06-10 20:46:58 +00:00
|
|
|
|
#include <threadpool.hpp>
|
2016-03-19 01:18:49 +00:00
|
|
|
|
#include <DB/Core/Types.h>
|
|
|
|
|
#include <DB/Parsers/IAST.h>
|
|
|
|
|
#include <DB/Storages/IStorage.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/** Позволяет проитерироваться по списку таблиц.
|
|
|
|
|
*/
|
|
|
|
|
class IDatabaseIterator
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual void next() = 0;
|
|
|
|
|
virtual bool isValid() const = 0;
|
|
|
|
|
|
|
|
|
|
virtual const String & name() const = 0;
|
|
|
|
|
virtual StoragePtr & table() const = 0;
|
|
|
|
|
|
|
|
|
|
virtual ~IDatabaseIterator() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
using DatabaseIteratorPtr = std::unique_ptr<IDatabaseIterator>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Движок баз данных.
|
|
|
|
|
* Отвечает за:
|
|
|
|
|
* - инициализацию множества таблиц;
|
|
|
|
|
* - проверку существования и получение таблицы для работы;
|
|
|
|
|
* - получение списка всех таблиц;
|
|
|
|
|
* - создание и удаление таблиц;
|
|
|
|
|
* - переименовывание таблиц и перенос между БД с одинаковыми движками.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class IDatabase : public std::enable_shared_from_this<IDatabase>
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
/// Получить имя движка базы данных.
|
|
|
|
|
virtual String getEngineName() const = 0;
|
|
|
|
|
|
2016-06-10 20:46:58 +00:00
|
|
|
|
/// Загрузить множество существующих таблиц. Если задан thread_pool - использовать его.
|
|
|
|
|
/// Можно вызывать только один раз, сразу после создания объекта.
|
|
|
|
|
virtual void loadTables(Context & context, boost::threadpool::pool * thread_pool) = 0;
|
|
|
|
|
|
2016-03-19 01:18:49 +00:00
|
|
|
|
/// Проверить существование таблицы.
|
|
|
|
|
virtual bool isTableExist(const String & name) const = 0;
|
|
|
|
|
|
|
|
|
|
/// Получить таблицу для работы. Вернуть nullptr, если таблицы нет.
|
|
|
|
|
virtual StoragePtr tryGetTable(const String & name) = 0;
|
|
|
|
|
|
|
|
|
|
/// Получить итератор, позволяющий перебрать все таблицы.
|
|
|
|
|
/// Допустимо наличие "скрытых" таблиц, которые не видны при переборе, но видны, если получать их по имени, используя функции выше.
|
|
|
|
|
virtual DatabaseIteratorPtr getIterator() = 0;
|
|
|
|
|
|
|
|
|
|
/// Является ли БД пустой.
|
|
|
|
|
virtual bool empty() const = 0;
|
|
|
|
|
|
|
|
|
|
/// Добавить таблицу в базу данных. Прописать её наличие в метаданных.
|
|
|
|
|
virtual void createTable(const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine) = 0;
|
|
|
|
|
|
|
|
|
|
/// Удалить таблицу из базы данных и вернуть её. Удалить метаданные.
|
2016-03-26 04:44:49 +00:00
|
|
|
|
virtual void removeTable(const String & name) = 0;
|
2016-03-19 01:18:49 +00:00
|
|
|
|
|
|
|
|
|
/// Добавить таблицу в базу данных, но не прописывать её в метаданных. БД может не поддерживать этот метод.
|
|
|
|
|
virtual void attachTable(const String & name, const StoragePtr & table) = 0;
|
|
|
|
|
|
|
|
|
|
/// Забыть про таблицу, не удаляя её, и вернуть её. БД может не поддерживать этот метод.
|
|
|
|
|
virtual StoragePtr detachTable(const String & name) = 0;
|
|
|
|
|
|
|
|
|
|
/// Переименовать таблицу и, возможно, переместить таблицу в другую БД.
|
|
|
|
|
virtual void renameTable(const Context & context, const String & name, IDatabase & to_database, const String & to_name) = 0;
|
|
|
|
|
|
2016-05-13 21:08:19 +00:00
|
|
|
|
using ASTModifier = std::function<void(ASTPtr &)>;
|
|
|
|
|
|
|
|
|
|
/// Изменить структуру таблицы в метаданных.
|
|
|
|
|
/// Нужно вызывать под TableStructureLock соответствующей таблицы. Если engine_modifier пустой, то engine не изменяется.
|
|
|
|
|
virtual void alterTable(
|
|
|
|
|
const Context & context,
|
|
|
|
|
const String & name,
|
|
|
|
|
const NamesAndTypesList & columns,
|
|
|
|
|
const NamesAndTypesList & materialized_columns,
|
|
|
|
|
const NamesAndTypesList & alias_columns,
|
|
|
|
|
const ColumnDefaults & column_defaults,
|
2016-05-17 01:17:32 +00:00
|
|
|
|
const ASTModifier & engine_modifier) = 0;
|
2016-05-13 21:08:19 +00:00
|
|
|
|
|
2016-03-19 01:18:49 +00:00
|
|
|
|
/// Получить запрос CREATE TABLE для таблицы. Может выдавать информацию и для detached таблиц, для которых есть метаданные.
|
|
|
|
|
virtual ASTPtr getCreateQuery(const String & name) const = 0;
|
|
|
|
|
|
|
|
|
|
/// Попросить все таблицы завершить фоновые потоки, которые они используют, и удалить все объекты таблиц.
|
|
|
|
|
virtual void shutdown() = 0;
|
|
|
|
|
|
2016-03-28 11:19:14 +00:00
|
|
|
|
/// Удалить метаданные, удаление которых отличается от рекурсивного удаления директории, если такие есть.
|
|
|
|
|
virtual void drop() = 0;
|
|
|
|
|
|
2016-03-19 01:18:49 +00:00
|
|
|
|
virtual ~IDatabase() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
using DatabasePtr = std::shared_ptr<IDatabase>;
|
|
|
|
|
using Databases = std::map<String, DatabasePtr>;
|
|
|
|
|
|
|
|
|
|
}
|