2016-03-19 01:18:49 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <DB/Core/Types.h>
|
2016-12-12 07:24:56 +00:00
|
|
|
|
#include <DB/Core/NamesAndTypes.h>
|
|
|
|
|
#include <DB/Storages/ColumnDefault.h>
|
2016-09-02 13:04:11 +00:00
|
|
|
|
#include <ctime>
|
2016-12-12 07:24:56 +00:00
|
|
|
|
#include <memory>
|
|
|
|
|
#include <functional>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ThreadPool;
|
|
|
|
|
|
2016-03-19 01:18:49 +00:00
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2016-12-12 07:24:56 +00:00
|
|
|
|
class Context;
|
|
|
|
|
|
|
|
|
|
class IStorage;
|
|
|
|
|
using StoragePtr = std::shared_ptr<IStorage>;
|
|
|
|
|
|
|
|
|
|
class IAST;
|
|
|
|
|
using ASTPtr = std::shared_ptr<IAST>;
|
|
|
|
|
|
2017-01-23 18:05:07 +00:00
|
|
|
|
struct Settings;
|
2016-12-12 07:24:56 +00:00
|
|
|
|
|
2017-01-23 18:05:07 +00:00
|
|
|
|
|
|
|
|
|
/** Allows to iterate over tables.
|
2016-03-19 01:18:49 +00:00
|
|
|
|
*/
|
|
|
|
|
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>;
|
|
|
|
|
|
|
|
|
|
|
2017-01-23 18:05:07 +00:00
|
|
|
|
/** Database engine.
|
|
|
|
|
* It is responsible for:
|
|
|
|
|
* - initialization of set of known tables;
|
|
|
|
|
* - checking existence of a table and getting a table object;
|
|
|
|
|
* - retrieving a list of all tables;
|
|
|
|
|
* - creating and dropping tables;
|
|
|
|
|
* - renaming tables and moving between databases with same engine.
|
2016-03-19 01:18:49 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class IDatabase : public std::enable_shared_from_this<IDatabase>
|
|
|
|
|
{
|
|
|
|
|
public:
|
2017-01-23 18:05:07 +00:00
|
|
|
|
/// Get name of database engine.
|
2016-03-19 01:18:49 +00:00
|
|
|
|
virtual String getEngineName() const = 0;
|
|
|
|
|
|
2016-06-10 20:46:58 +00:00
|
|
|
|
/// Загрузить множество существующих таблиц. Если задан thread_pool - использовать его.
|
|
|
|
|
/// Можно вызывать только один раз, сразу после создания объекта.
|
2016-08-09 21:48:05 +00:00
|
|
|
|
virtual void loadTables(Context & context, ThreadPool * thread_pool, bool has_force_restore_data_flag) = 0;
|
2016-06-10 20:46:58 +00:00
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
/// Добавить таблицу в базу данных. Прописать её наличие в метаданных.
|
2017-01-23 18:05:07 +00:00
|
|
|
|
virtual void createTable(
|
|
|
|
|
const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine, const Settings & settings) = 0;
|
2016-03-19 01:18:49 +00:00
|
|
|
|
|
|
|
|
|
/// Удалить таблицу из базы данных и вернуть её. Удалить метаданные.
|
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;
|
|
|
|
|
|
|
|
|
|
/// Переименовать таблицу и, возможно, переместить таблицу в другую БД.
|
2017-01-23 18:05:07 +00:00
|
|
|
|
virtual void renameTable(
|
|
|
|
|
const Context & context, const String & name, IDatabase & to_database, const String & to_name, const Settings & settings) = 0;
|
2016-03-19 01:18:49 +00:00
|
|
|
|
|
2016-09-02 13:04:11 +00:00
|
|
|
|
/// Returns time of table's metadata change, 0 if there is no corresponding metadata file.
|
|
|
|
|
virtual time_t getTableMetadataModificationTime(const String & 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>;
|
|
|
|
|
|
|
|
|
|
}
|
2016-09-02 13:04:11 +00:00
|
|
|
|
|