From a397bc5da0b494462bfd0707439443c8daa658d3 Mon Sep 17 00:00:00 2001 From: Colin Barry Date: Fri, 7 Nov 2025 11:25:42 +0000 Subject: [PATCH 1/4] feat: Upgrade tab-completion grammar to 3.7 --- src/utils/constants.hpp | 370 +++++++++++++++++++++++++++++++++------- 1 file changed, 309 insertions(+), 61 deletions(-) diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index a067667c..f12865a5 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -54,85 +54,333 @@ 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"}; +static const std::vector kMemgraphKeywords{"ADD", + "ALTER", + "ANALYZE", + "ASYNC", + "AUTH", + "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", + "IN_MEMORY_ANALYTICAL", + "IN_MEMORY_TRANSACTIONAL", + "INACTIVE", + "INDEXES", + "INFO", + "INSTANCE", + "INSTANCES", + "ISOLATION", + "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", + "TRANSACTION_MANAGEMENT", + "TRANSACTIONS", + "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"}; +static const std::vector kCypherKeywords{"AFTER", + "ALL", + "AND", + "ANY", + "AS", + "ASC", + "ASCENDING", + "ASSERT", + "AT", + "BEFORE", + "BOOLEAN", + "BUILD", + "BY", + "CALL", + "CASE", + "CHECK", + "COALESCE", + "COMMITTED", + "CONTAINING", + "CONTAINS", + "COUNT", + "CREATE", + "CURRENT", + "DATE", + "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", + "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", + "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"}; -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", +static const std::vector kAwesomeFunctions{"ABS", "ACOS", "ASIN", + "ASSERT", "ATAN", "ATAN2", + "CEIL", "COS", - "PI", - "SIN", - "TAN", - "CONTAINS", - "ENDSWITH", + "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", - "STARTSWITH", + "SQRT", + "STARTNODE", "SUBSTRING", + "TAIL", + "TAN", + "TIMESTAMP", + "TOBOOLEAN", + "TOBYTESTRING", + "TOENUM", + "TOFLOAT", + "TOINTEGER", "TOLOWER", + "TOSET", "TOSTRING", + "TOSTRINGORNULL", "TOUPPER", "TRIM", - "ASSERT", - "COUNTER", - "TOBYTESTRING", - "FROMBYTESTRING", - "DATE", - "LOCALTIME", - "LOCALDATETIME", - "DURATION"}; + "TYPE", + "UNIFORMSAMPLE", + "VALUES", + "VALUETYPE"}; } // namespace constants From b8ffd75c978727786ce5db308179ea1c48a11682 Mon Sep 17 00:00:00 2001 From: Colin Barry Date: Fri, 7 Nov 2025 11:38:59 +0000 Subject: [PATCH 2/4] fix: Replace keywords vector with constexpr array --- src/utils/constants.hpp | 657 ++++++++++++++++++++-------------------- src/utils/utils.cpp | 6 +- 2 files changed, 333 insertions(+), 330 deletions(-) diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index f12865a5..36bdeef8 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include namespace constants { @@ -54,333 +54,336 @@ static const std::string kPrompt = "memgraph> "; static const std::string kMultilinePrompt = " -> "; /// Memgraph and OpenCypher keywords. -static const std::vector kMemgraphKeywords{"ADD", - "ALTER", - "ANALYZE", - "ASYNC", - "AUTH", - "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", - "IN_MEMORY_ANALYTICAL", - "IN_MEMORY_TRANSACTIONAL", - "INACTIVE", - "INDEXES", - "INFO", - "INSTANCE", - "INSTANCES", - "ISOLATION", - "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", - "TRANSACTION_MANAGEMENT", - "TRANSACTIONS", - "TRANSFORM", - "TRIGGER", - "TRIGGERS", - "TTL", - "UNIQUE", - "UNLOCK", - "UNREGISTER", - "UPDATE", - "USAGE", - "USE", - "USER", - "USERS", - "VERSION"}; +static constexpr std::array kMemgraphKeywords{ + "ADD", + "ALTER", + "ANALYZE", + "ASYNC", + "AUTH", + "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", + "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{"AFTER", - "ALL", - "AND", - "ANY", - "AS", - "ASC", - "ASCENDING", - "ASSERT", - "AT", - "BEFORE", - "BOOLEAN", - "BUILD", - "BY", - "CALL", - "CASE", - "CHECK", - "COALESCE", - "COMMITTED", - "CONTAINING", - "CONTAINS", - "COUNT", - "CREATE", - "CURRENT", - "DATE", - "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", - "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", - "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"}; +static constexpr std::array kCypherKeywords{ + "AFTER", + "ALL", + "AND", + "ANY", + "AS", + "ASC", + "ASCENDING", + "ASSERT", + "AT", + "BEFORE", + "BOOLEAN", + "BUILD", + "BY", + "CALL", + "CASE", + "CHECK", + "COALESCE", + "COMMITTED", + "CONTAINING", + "CONTAINS", + "COUNT", + "CREATE", + "CURRENT", + "DATE", + "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", + "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", + "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"}; -static const std::vector 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"}; +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); } From 2d1976b5b4fe3007217418c15ca4a4f9f8991173 Mon Sep 17 00:00:00 2001 From: Colin Barry Date: Fri, 7 Nov 2025 11:43:30 +0000 Subject: [PATCH 3/4] fix: Add [[maybe_unused]] to stop warning about unused keywords --- src/utils/constants.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index 36bdeef8..95407d65 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -54,7 +54,7 @@ static const std::string kPrompt = "memgraph> "; static const std::string kMultilinePrompt = " -> "; /// Memgraph and OpenCypher keywords. -static constexpr std::array kMemgraphKeywords{ +[[maybe_unused]] static constexpr std::array kMemgraphKeywords{ "ADD", "ALTER", "ANALYZE", @@ -188,7 +188,7 @@ static constexpr std::array kMemgraphKeywords{ "USERS", "VERSION"}; -static constexpr std::array kCypherKeywords{ +[[maybe_unused]] static constexpr std::array kCypherKeywords{ "AFTER", "ALL", "AND", @@ -311,7 +311,7 @@ static constexpr std::array kCypherKeywords{ "XOR", "YIELD"}; -static constexpr std::array kAwesomeFunctions{ +[[maybe_unused]] static constexpr std::array kAwesomeFunctions{ "ABS", "ACOS", "ASIN", From 36668ac4b805edc100b35433e7b36dde11c895c8 Mon Sep 17 00:00:00 2001 From: Colin Barry Date: Mon, 19 Jan 2026 10:37:09 +0000 Subject: [PATCH 4/4] feat: Add even newer keywords --- src/utils/constants.hpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index 95407d65..ea2717cd 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -55,11 +55,13 @@ static const std::string kMultilinePrompt = " -> "; /// Memgraph and OpenCypher keywords. [[maybe_unused]] static constexpr std::array kMemgraphKeywords{ + "ACTIVE", "ADD", "ALTER", "ANALYZE", "ASYNC", "AUTH", + "BAD", "BATCH_INTERVAL", "BATCH_LIMIT", "BATCH_SIZE", @@ -110,6 +112,7 @@ static const std::string kMultilinePrompt = " -> "; "IN_MEMORY_ANALYTICAL", "IN_MEMORY_TRANSACTIONAL", "ISOLATION", + "JSONL", "KAFKA", "KB", "KEY", @@ -206,6 +209,7 @@ static const std::string kMultilinePrompt = " -> "; "CASE", "CHECK", "COALESCE", + "COMMIT", "COMMITTED", "CONTAINING", "CONTAINS", @@ -213,6 +217,7 @@ static const std::string kMultilinePrompt = " -> "; "CREATE", "CURRENT", "DATE", + "DEFINER", "DELETE", "DESC", "DESCENDING", @@ -242,6 +247,7 @@ static const std::string kMultilinePrompt = " -> "; "IN", "INDEX", "INTEGER", + "INVOKER", "IS", "KSHORTEST", "LABELS", @@ -285,6 +291,7 @@ static const std::string kMultilinePrompt = " -> "; "REPLACE", "RESOURCE", "RETURN", + "SECURITY", "SET", "SHOW", "SINGLE", @@ -309,7 +316,8 @@ static const std::string kMultilinePrompt = " -> "; "WHERE", "WITH", "XOR", - "YIELD"}; + "YIELD", + "ZONEDDATETIME"}; [[maybe_unused]] static constexpr std::array kAwesomeFunctions{ "ABS",