#pragma once #include namespace DB { /** Parses queries like * CREATE [ROW] POLICY [IF NOT EXISTS | OR REPLACE] name ON [database.]table * [AS {permissive | restrictive}] * [FOR {SELECT | INSERT | UPDATE | DELETE | ALL}] * [USING condition] * [WITH CHECK condition] [,...] * [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] * * ALTER [ROW] POLICY [IF EXISTS] name ON [database.]table * [RENAME TO new_name] * [AS {permissive | restrictive}] * [FOR {SELECT | INSERT | UPDATE | DELETE | ALL}] * [USING {condition | NONE}] * [WITH CHECK {condition | NONE}] [,...] * [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] */ class ParserCreateRowPolicyQuery : public IParserBase { public: void useAttachMode(bool attach_mode_ = true) { attach_mode = attach_mode_; } protected: const char * getName() const override { return "CREATE ROW POLICY or ALTER ROW POLICY query"; } bool parseImpl(Pos & pos, ASTPtr & node, Expected & expected) override; private: bool attach_mode = false; }; }