#include "ICommand.h" #include namespace DB { namespace ErrorCodes { extern const int BAD_ARGUMENTS; } class CommandLink final : public ICommand { public: CommandLink() { command_name = "link"; description = "Create hardlink from `from_path` to `to_path`\nPath should be in format './' or './path' or 'path'"; usage = "link [OPTION]... "; } void processOptions( Poco::Util::LayeredConfiguration &, po::variables_map &) const override { } void execute( const std::vector & command_arguments, DB::ContextMutablePtr & global_context, Poco::Util::LayeredConfiguration & config) override { if (command_arguments.size() != 2) { printHelpMessage(); throw DB::Exception("Bad Arguments", DB::ErrorCodes::BAD_ARGUMENTS); } String disk_name = config.getString("disk", "default"); const String & path_from = command_arguments[0]; const String & path_to = command_arguments[1]; DiskPtr disk = global_context->getDisk(disk_name); String relative_path_from = validatePathAndGetAsRelative(path_from); String relative_path_to = validatePathAndGetAsRelative(path_to); disk->createHardLink(relative_path_from, relative_path_to); } }; } std::unique_ptr makeCommandLink() { return std::make_unique(); }