/* * Copyright (C) 2019 pengjian.uestc @ gmail.com */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #include "redis/command_factory.hh" #include "service/storage_proxy.hh" #include "redis/commands.hh" #include "utils/log.hh" namespace redis { static logging::logger logging("command_factory"); future command_factory::create_execute(service::storage_proxy& proxy, request& req, redis::redis_options& options, service_permit permit) { static thread_local std::unordered_map (service::storage_proxy& proxy, request& req, redis::redis_options& options, service_permit permit)>> _commands = { { "ping", commands::ping }, { "select", commands::select }, { "get", commands::get }, { "exists", commands::exists }, { "ttl", commands::ttl }, { "strlen", commands::strlen }, { "set", commands::set }, { "setex", commands::setex }, { "del", commands::del }, { "echo", commands::echo }, { "lolwut", commands::lolwut }, { "hget", commands::hget }, { "hset", commands::hset }, { "hgetall", commands::hgetall }, { "hdel", commands::hdel }, { "hexists", commands::hexists }, }; auto&& command = _commands.find(req._command); if (command != _commands.end()) { return (command->second)(proxy, req, options, permit); } auto& b = req._command; logging.error("receive unknown command = {}", sstring(reinterpret_cast(b.data()), b.size())); return commands::unknown(proxy, req, options, permit); } }