added indexParts

This commit is contained in:
Nikita Vasilev 2018-12-28 18:27:06 +03:00
parent 9818d27109
commit 9bf5b6b4aa
2 changed files with 23 additions and 11 deletions

View File

@ -7,37 +7,45 @@
#include <Core/Block.h> #include <Core/Block.h>
#include <ext/singleton.h> #include <ext/singleton.h>
#include <Interpreters/ExpressionActions.h> #include <Interpreters/ExpressionActions.h>
#include <Storages/MergeTree/MergeTreeDataPartChecksum.h>
#include <Parsers/ASTIndexDeclaration.h> #include <Parsers/ASTIndexDeclaration.h>
namespace DB namespace DB
{ {
class MergeTreeIndexPart
{
public:
virtual ~MergeTreeIndexPart() {};
virtual void update(const Block & block, const Names & column_names) = 0;
virtual void merge(const MergeTreeIndexPart & other) = 0;
};
using MergeTreeIndexPartPtr = std::unique_ptr<MergeTreeIndexPart>;
using MergeTreeIndexParts = std::vector<MergeTreeIndexPartPtr>;
/// Interface for secondary MergeTree indexes
class MergeTreeIndex class MergeTreeIndex
{ {
public: public:
MergeTreeIndex(String name, ExpressionActionsPtr expr, Block key)
: name(name), expr(expr), sample(key) {}
virtual ~MergeTreeIndex() {}; virtual ~MergeTreeIndex() {};
virtual void load(const String & part_path) = 0;
virtual void store(const String & part_path, MergeTreeDataPartChecksums & checksums) const = 0;
virtual void update(const Block & block, const Names & column_names) = 0;
virtual void merge(const MergeTreeIndex & other) = 0;
virtual bool alwaysUnknownOrTrue() const = 0; virtual bool alwaysUnknownOrTrue() const = 0;
virtual bool maybeTrue() const = 0; virtual bool maybeTrue(/* args */) const = 0;
virtual MergeTreeIndexPartPtr createEmptyIndexPart() const = 0;
String name; String name;
ExpressionActionsPtr expr; ExpressionActionsPtr expr;
Block header; Block sample;
}; };
using MergeTreeIndexPtr = std::unique_ptr<MergeTreeIndex>; using MergeTreeIndexPtr = std::unique_ptr<MergeTreeIndex>;
using MergeTreeIndexes = std::vector<MergeTreeIndexPtr>; using MergeTreeIndexes = std::vector<MergeTreeIndexPtr>;
class MergeTreeIndexFactory : public ext::singleton<MergeTreeIndexFactory> class MergeTreeIndexFactory : public ext::singleton<MergeTreeIndexFactory>
{ {
friend class ext::singleton<MergeTreeIndexFactory>; friend class ext::singleton<MergeTreeIndexFactory>;

View File

@ -110,6 +110,7 @@ namespace ErrorCodes
extern const int KEEPER_EXCEPTION; extern const int KEEPER_EXCEPTION;
extern const int ALL_REPLICAS_LOST; extern const int ALL_REPLICAS_LOST;
extern const int REPLICA_STATUS_CHANGED; extern const int REPLICA_STATUS_CHANGED;
extern const int INCORRECT_QUERY;
} }
namespace ActionLocks namespace ActionLocks
@ -225,6 +226,9 @@ StorageReplicatedMergeTree::StorageReplicatedMergeTree(
{ {
if (path_.empty()) if (path_.empty())
throw Exception("ReplicatedMergeTree storages require data path", ErrorCodes::INCORRECT_FILE_NAME); throw Exception("ReplicatedMergeTree storages require data path", ErrorCodes::INCORRECT_FILE_NAME);
if (!indexes_ast_.empty()) {
throw Exception("ReplicatedMergeTree storages do not support indexes", ErrorCodes::INCORRECT_QUERY);
}
if (!zookeeper_path.empty() && zookeeper_path.back() == '/') if (!zookeeper_path.empty() && zookeeper_path.back() == '/')
zookeeper_path.resize(zookeeper_path.size() - 1); zookeeper_path.resize(zookeeper_path.size() - 1);