diff --git a/src/components/editor/QueryEditor.vue b/src/components/editor/QueryEditor.vue index 0581ad499f..55a8c74d8a 100644 --- a/src/components/editor/QueryEditor.vue +++ b/src/components/editor/QueryEditor.vue @@ -160,7 +160,7 @@ onMounted(async () => { const [ { EditorView, keymap }, { EditorState, Compartment }, - { sql, MySQL, PostgreSQL }, + { sql, MySQL, PostgreSQL, SQLDialect }, { basicSetup }, { oneDark }, { autocompletion, startCompletion }, @@ -175,7 +175,12 @@ onMounted(async () => { editorViewModule = { EditorView, keymap } as typeof import("@codemirror/view"); fontSizeTheme = new Compartment(); - const dialect = props.dialect === "postgres" ? PostgreSQL : MySQL; + const baseDialect = props.dialect === "postgres" ? PostgreSQL : MySQL; + const extraKeywords = "PIVOT UNPIVOT EXCLUDE REPLACE QUALIFY ASOF POSITIONAL ANTI SEMI SAMPLE TABLESAMPLE STRUCT MAP LIST ARRAY LAMBDA UNNEST LATERAL FILTER RECURSIVE SUMMARIZE PRAGMA READ_CSV READ_PARQUET READ_JSON DESCRIBE SHOW COPY EXPORT IMPORT"; + const dialect = SQLDialect.define({ + ...baseDialect.spec, + keywords: (baseDialect.spec.keywords || "") + " " + extraKeywords, + }); const runKeymap = keymap.of([ { diff --git a/src/lib/sqlCompletion.ts b/src/lib/sqlCompletion.ts index 90c2cd1aea..acb477bceb 100644 --- a/src/lib/sqlCompletion.ts +++ b/src/lib/sqlCompletion.ts @@ -3,6 +3,19 @@ const SQL_KEYWORDS = [ "ON", "GROUP BY", "ORDER BY", "HAVING", "LIMIT", "OFFSET", "INSERT", "INTO", "VALUES", "UPDATE", "SET", "DELETE", "CREATE", "TABLE", "VIEW", "AS", "AND", "OR", "NOT", "IN", "IS", "NULL", "LIKE", "DISTINCT", + "UNION", "ALL", "EXISTS", "BETWEEN", "CASE", "WHEN", "THEN", "ELSE", "END", + "COUNT", "SUM", "AVG", "MIN", "MAX", "COALESCE", "CAST", + "ALTER", "DROP", "ADD", "COLUMN", "INDEX", "PRIMARY", "KEY", "FOREIGN", + "REFERENCES", "CONSTRAINT", "DEFAULT", "CHECK", "UNIQUE", + "BEGIN", "COMMIT", "ROLLBACK", "TRUNCATE", "EXPLAIN", "ANALYZE", + "WITH", "RECURSIVE", "OVER", "PARTITION BY", "ROW_NUMBER", "RANK", "DENSE_RANK", + "LAG", "LEAD", "FIRST_VALUE", "LAST_VALUE", "NTILE", + "CROSS", "FULL", "NATURAL", "USING", "LATERAL", "UNNEST", + "FILTER", "EXCLUDE", "REPLACE", "QUALIFY", "PIVOT", "UNPIVOT", + "ASOF", "POSITIONAL", "ANTI", "SEMI", "SAMPLE", "TABLESAMPLE", + "STRUCT", "MAP", "LIST", "ARRAY", "LAMBDA", "LIST_TRANSFORM", + "READ_CSV", "READ_PARQUET", "READ_JSON", "COPY", "EXPORT", "IMPORT", + "DESCRIBE", "SHOW", "SUMMARIZE", "PRAGMA", ]; const TABLE_TRIGGER_KEYWORDS = new Set(["from", "join", "update", "into"]);