ClickHouse
59 строк · 1.5 Кб
1#include "ICommand.h"2#include <Interpreters/Context.h>3
4namespace DB5{
6
7namespace ErrorCodes8{
9extern const int BAD_ARGUMENTS;10}
11
12class CommandMove final : public ICommand13{
14public:15CommandMove()16{17command_name = "move";18description = "Move file or directory from `from_path` to `to_path`";19usage = "move [OPTION]... <FROM_PATH> <TO_PATH>";20}21
22void processOptions(23Poco::Util::LayeredConfiguration &,24po::variables_map &) const override25{}26
27void execute(28const std::vector<String> & command_arguments,29std::shared_ptr<DiskSelector> & disk_selector,30Poco::Util::LayeredConfiguration & config) override31{32if (command_arguments.size() != 2)33{34printHelpMessage();35throw DB::Exception(DB::ErrorCodes::BAD_ARGUMENTS, "Bad Arguments");36}37
38String disk_name = config.getString("disk", "default");39
40const String & path_from = command_arguments[0];41const String & path_to = command_arguments[1];42
43DiskPtr disk = disk_selector->get(disk_name);44
45String relative_path_from = validatePathAndGetAsRelative(path_from);46String relative_path_to = validatePathAndGetAsRelative(path_to);47
48if (disk->isFile(relative_path_from))49disk->moveFile(relative_path_from, relative_path_to);50else51disk->moveDirectory(relative_path_from, relative_path_to);52}53};54}
55
56std::unique_ptr <DB::ICommand> makeCommandMove()57{
58return std::make_unique<DB::CommandMove>();59}
60