ClickHouse/dbms/include/DB/Storages/IStorage.h

65 lines
2.4 KiB
C
Raw Normal View History

2010-03-01 16:59:51 +00:00
#ifndef DBMS_STORAGES_ISTORAGE_H
#define DBMS_STORAGES_ISTORAGE_H
2010-03-04 19:20:28 +00:00
//#include <boost/property_tree/ptree.hpp>
2010-03-01 16:59:51 +00:00
#include <Poco/SharedPtr.h>
2010-05-21 19:52:50 +00:00
#include <DB/Core/Defines.h>
2010-03-04 19:20:28 +00:00
#include <DB/Core/ColumnNames.h>
#include <DB/Core/Exception.h>
#include <DB/DataStreams/IBlockInputStream.h>
2010-03-18 19:32:14 +00:00
#include <DB/DataStreams/IBlockOutputStream.h>
2010-03-04 19:20:28 +00:00
2010-03-01 16:59:51 +00:00
namespace DB
{
2010-03-04 19:20:28 +00:00
typedef char ptree; /// временная заглушка, вместо boost::property_tree::ptree
//using boost::property_tree::ptree;
2010-03-01 16:59:51 +00:00
using Poco::SharedPtr;
/** Хранилище. Отвечает за:
* - хранение данных таблицы;
* - определение, в каком файле (или не файле) хранятся данные;
* - поиск данных и обновление данных;
* - структура хранения данных (сжатие, etc.)
* - конкуррентный доступ к данным (блокировки, etc.)
*/
class IStorage
{
public:
2010-03-04 19:20:28 +00:00
/// Основное имя типа таблицы (например, StorageWithoutKey).
virtual std::string getName() const = 0;
2010-03-01 16:59:51 +00:00
2010-03-04 19:20:28 +00:00
/** Читать набор столбцов из таблицы.
* Принимает список столбцов, которых нужно прочитать, а также описание запроса,
* из которого может быть извлечена информация о том, каким способом извлекать данные
* (индексы, блокировки и т. п.)
* Возвращает объект, с помощью которого можно последовательно читать данные.
2010-03-01 16:59:51 +00:00
*/
2010-03-04 19:20:28 +00:00
virtual SharedPtr<IBlockInputStream> read(
const ColumnNames & column_names,
const ptree & query,
size_t max_block_size = DEFAULT_BLOCK_SIZE)
{
throw Exception("Method read() is not supported by storage " + getName());
}
2010-03-01 16:59:51 +00:00
2010-03-18 19:32:14 +00:00
/** Пишет данные в таблицу.
* Принимает описание запроса, в котором может содержаться информация о методе записи данных.
* Возвращает объект, с помощью которого можно последовательно писать данные.
*/
virtual SharedPtr<IBlockOutputStream> write(
const ptree & query)
{
throw Exception("Method write() is not supported by storage " + getName());
}
2010-03-01 16:59:51 +00:00
virtual ~IStorage() {}
};
}
#endif