diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index a067667c..ea2717cd 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include namespace constants { @@ -54,85 +54,344 @@ static const std::string kPrompt = "memgraph> "; static const std::string kMultilinePrompt = " -> "; /// Memgraph and OpenCypher keywords. -static const std::vector kMemgraphKeywords{ - "ALTER", "ASYNC", "AUTH", "BATCH", "BATCHES", "CLEAR", "CSV", "DATA", "DELIMITER", "DENY", - "DROP", "FOR", "FREE", "FROM", "GRANT", "HEADER", "INFO", "IDENTIFIED", "INTERVAL", "K_TEST", - "KAFKA", "LOAD", "LOCK", "MAIN", "MODE", "PASSWORD", "REPLICA", "REPLICAS", "REPLICATION", "PORT", - "PRIVILEGES", "QUOTE", "REVOKE", "ROLE", "ROLES", "SIZE", "START", "STATS", "STOP", "STREAM", - "STREAMS", "SYNC", "TIMEOUT", "TO", "TOPIC", "TRANSFORM", "UNLOCK", "USER", "USERS"}; +[[maybe_unused]] static constexpr std::array kMemgraphKeywords{ + "ACTIVE", + "ADD", + "ALTER", + "ANALYZE", + "ASYNC", + "AUTH", + "BAD", + "BATCH_INTERVAL", + "BATCH_LIMIT", + "BATCH_SIZE", + "BOOTSTRAP_SERVERS", + "CLEAR", + "CLUSTER", + "CONFIG", + "CONFIGS", + "CONSTRAINT", + "CONSTRAINTS", + "CONSUMER_GROUP", + "COORDINATOR", + "CREDENTIALS", + "CSV", + "DATA", + "DATABASE", + "DATABASES", + "DELIMITER", + "DEMOTE", + "DENY", + "DISABLE", + "DROP", + "DUMP", + "DURABILITY", + "ENABLE", + "ENUM", + "ENUMS", + "EXECUTE", + "EXPLAIN", + "FAILOVER", + "FOR", + "FORCE", + "FREE", + "FREE_MEMORY", + "FROM", + "GLOBAL", + "GRANT", + "GRANTS", + "GRAPH", + "HEADER", + "IDENTIFIED", + "IMPERSONATE_USER", + "INACTIVE", + "INDEXES", + "INFO", + "INSTANCE", + "INSTANCES", + "IN_MEMORY_ANALYTICAL", + "IN_MEMORY_TRANSACTIONAL", + "ISOLATION", + "JSONL", + "KAFKA", + "KB", + "KEY", + "LAG", + "LEADERSHIP", + "LEVEL", + "LICENSE", + "LOAD", + "LOCK", + "LOCK_PATH", + "MAIN", + "MB", + "MEMORY", + "METRICS", + "MODE", + "MODULE_READ", + "MODULE_WRITE", + "MULTI_DATABASE_EDIT", + "MULTI_DATABASE_USE", + "ON_DISK_TRANSACTIONAL", + "PASSWORD", + "PORT", + "PRIVILEGES", + "PULSAR", + "QUOTE", + "READ_FILE", + "REGISTER", + "RENAME", + "REPLICA", + "REPLICAS", + "REPLICATION", + "RESET", + "REVOKE", + "ROLE", + "ROLES", + "ROWS", + "SCHEMA", + "SERVER", + "SERVICE_URL", + "SESSION", + "SETTING", + "SETTINGS", + "SNAPSHOT", + "SNAPSHOTS", + "START", + "STATE", + "STATISTICS", + "STATS", + "STATUS", + "STOP", + "STORAGE", + "STORAGE_MODE", + "STREAM", + "STREAMS", + "STRICT_SYNC", + "SYNC", + "TERMINATE", + "TIMEOUT", + "TO", + "TOPICS", + "TRACE", + "TRANSACTION", + "TRANSACTIONS", + "TRANSACTION_MANAGEMENT", + "TRANSFORM", + "TRIGGER", + "TRIGGERS", + "TTL", + "UNIQUE", + "UNLOCK", + "UNREGISTER", + "UPDATE", + "USAGE", + "USE", + "USER", + "USERS", + "VERSION"}; -static const std::vector kCypherKeywords{ - "ALL", "AND", "ANY", "AS", "ASC", "ASCENDING", "BFS", "BY", "CASE", - "CONTAINS", "COUNT", "CREATE", "CYPHERNULL", "DELETE", "DESC", "DESCENDING", "DETACH", "DISTINCT", - "ELSE", "END", "ENDS", "EXTRACT", "FALSE", "FILTER", "IN", "INDEX", "IS", - "LIMIT", "L_SKIP", "MATCH", "MERGE", "NONE", "NOT", "ON", "OPTIONAL", "OR", - "ORDER", "REDUCE", "REMOVE", "RETURN", "SET", "SHOW", "SINGLE", "STARTS", "THEN", - "TRUE", "UNION", "UNWIND", "WHEN", "WHERE", "WITH", "WSHORTEST", "XOR"}; +[[maybe_unused]] static constexpr std::array kCypherKeywords{ + "AFTER", + "ALL", + "AND", + "ANY", + "AS", + "ASC", + "ASCENDING", + "ASSERT", + "AT", + "BEFORE", + "BOOLEAN", + "BUILD", + "BY", + "CALL", + "CASE", + "CHECK", + "COALESCE", + "COMMIT", + "COMMITTED", + "CONTAINING", + "CONTAINS", + "COUNT", + "CREATE", + "CURRENT", + "DATE", + "DEFINER", + "DELETE", + "DESC", + "DESCENDING", + "DETACH", + "DIRECTORY", + "DISTINCT", + "DO", + "DURATION", + "EDGE", + "EDGES", + "EDGE_TYPES", + "ELSE", + "END", + "ENDS", + "EVERY", + "EXACTLY", + "EXISTS", + "EXTRACT", + "FALSE", + "FILTER", + "FLOAT", + "FOREACH", + "HOPS", + "IF", + "IGNORE", + "IMPORT", + "IN", + "INDEX", + "INTEGER", + "INVOKER", + "IS", + "KSHORTEST", + "LABELS", + "LIMIT", + "LIST", + "LOCALDATETIME", + "LOCALTIME", + "MAP", + "MATCH", + "MATCHING", + "MERGE", + "NEXT", + "NO", + "NODE", + "NODES", + "NODE_LABELS", + "NONE", + "NOT", + "NOTHING", + "NULL", + "NULLIF", + "OFF", + "OF_TOKEN", + "ON", + "OPTIONAL", + "OR", + "ORDER", + "PARQUET", + "PERIODIC", + "POINT", + "PROCEDURE", + "PROCEDURES", + "PROFILE", + "PROFILES", + "PROFILE_RESTRICTION", + "QUERY", + "READ", + "RECOVER", + "REDUCE", + "REMOVE", + "REPLACE", + "RESOURCE", + "RETURN", + "SECURITY", + "SET", + "SHOW", + "SINGLE", + "SKIP", + "STARTS", + "STRING", + "TEXT", + "THEN", + "TRUE", + "TYPED", + "TYPES", + "UNCOMMITTED", + "UNION", + "UNLIMITED", + "UNWIND", + "USING", + "VALUE", + "VALUES", + "VECTOR", + "WEBSOCKET", + "WHEN", + "WHERE", + "WITH", + "XOR", + "YIELD", + "ZONEDDATETIME"}; -static const std::vector kAwesomeFunctions{"DEGREE", - "INDEGREE", - "OUTDEGREE", - "ENDNODE", - "HEAD", - "ID", - "LAST", - "PROPERTIES", - "SIZE", - "STARTNODE", - "TIMESTAMP", - "TOBOOLEAN", - "TOFLOAT", - "TOINTEGER", - "TYPE", - "VALUETYPE", - "KEYS", - "LABELS", - "NODES", - "RANGE", - "RELATIONSHIPS", - "TAIL", - "UNIFORMSAMPLE", - "ABS", - "CEIL", - "FLOOR", - "RAND", - "ROUND", - "SIGN", - "E", - "EXP", - "LOG", - "LOG10", - "SQRT", - "ACOS", - "ASIN", - "ATAN", - "ATAN2", - "COS", - "PI", - "SIN", - "TAN", - "CONTAINS", - "ENDSWITH", - "LEFT", - "LTRIM", - "REPLACE", - "REVERSE", - "RIGHT", - "RTRIM", - "SPLIT", - "STARTSWITH", - "SUBSTRING", - "TOLOWER", - "TOSTRING", - "TOUPPER", - "TRIM", - "ASSERT", - "COUNTER", - "TOBYTESTRING", - "FROMBYTESTRING", - "DATE", - "LOCALTIME", - "LOCALDATETIME", - "DURATION"}; +[[maybe_unused]] static constexpr std::array kAwesomeFunctions{ + "ABS", + "ACOS", + "ASIN", + "ASSERT", + "ATAN", + "ATAN2", + "CEIL", + "COS", + "COUNTER", + "DATE", + "DATETIME", + "DEGREE", + "DURATION", + "E", + "ENDNODE", + "EXP", + "FLOOR", + "FROMBYTESTRING", + "GETHOPSCOUNTER", + "HEAD", + "INDEGREE", + "ISEMPTY", + "KEYS", + "LABELS", + "LAST", + "LEFT", + "LENGTH", + "LOCALDATETIME", + "LOCALTIME", + "LOG", + "LOG10", + "LTRIM", + "NODES", + "OUTDEGREE", + "PI", + "POINT", + "POINT.DISTANCE", + "POINT.WITHINBBOX", + "PROPERTIES", + "PROPERTYSIZE", + "RAND", + "RANDOMUUID", + "RANGE", + "RELATIONSHIPS", + "REPLACE", + "REVERSE", + "RIGHT", + "ROUND", + "RTRIM", + "SIGN", + "SIN", + "SPLIT", + "SQRT", + "STARTNODE", + "SUBSTRING", + "TAIL", + "TAN", + "TIMESTAMP", + "TOBOOLEAN", + "TOBYTESTRING", + "TOENUM", + "TOFLOAT", + "TOINTEGER", + "TOLOWER", + "TOSET", + "TOSTRING", + "TOSTRINGORNULL", + "TOUPPER", + "TRIM", + "TYPE", + "UNIFORMSAMPLE", + "VALUES", + "VALUETYPE"}; } // namespace constants diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index d5f46b67..b35f9c14 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -455,17 +455,17 @@ std::vector GetCompletions(const char *text) { // Collect a vector of matches: vocabulary words that begin with text. std::string text_str = utils::ToUpperCase(std::string(text)); - for (auto word : constants::kCypherKeywords) { + for (std::string_view const word : constants::kCypherKeywords) { if (word.size() >= text_str.size() && word.compare(0, text_str.size(), text_str) == 0) { matches.emplace_back(word); } } - for (auto word : constants::kMemgraphKeywords) { + for (std::string_view const word : constants::kMemgraphKeywords) { if (word.size() >= text_str.size() && word.compare(0, text_str.size(), text_str) == 0) { matches.emplace_back(word); } } - for (auto word : constants::kAwesomeFunctions) { + for (std::string_view const word : constants::kAwesomeFunctions) { if (word.size() >= text_str.size() && word.compare(0, text_str.size(), text_str) == 0) { matches.emplace_back(word); }