|
| 1 | +// Copyright 2018 Grove Enterprises LLC |
| 2 | +// |
| 3 | +// Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | +// you may not use this file except in compliance with the License. |
| 5 | +// You may obtain a copy of the License at |
| 6 | +// |
| 7 | +// http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | +// |
| 9 | +// Unless required by applicable law or agreed to in writing, software |
| 10 | +// distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | +// See the License for the specific language governing permissions and |
| 13 | +// limitations under the License. |
| 14 | + |
| 15 | +//! Support for custom dialects |
| 16 | +
|
| 17 | +pub trait Dialect { |
| 18 | + /// Get a list of keywords for this dialect |
| 19 | + fn keywords(&self) -> Vec<&'static str>; |
| 20 | +} |
| 21 | + |
| 22 | +pub struct AnsiSqlDialect { |
| 23 | +} |
| 24 | + |
| 25 | +impl Dialect for AnsiSqlDialect { |
| 26 | + fn keywords(&self) -> Vec<&'static str> { |
| 27 | + return vec!["ABS", "ALL", "ALLOCATE", "ALTER", "AND", "ANY", "ARE", "ARRAY", "ARRAY_AGG", |
| 28 | + "ARRAY_MAX_CARDINALITY", "AS", "ASENSITIVE", "ASYMMETRIC", "AT", "ATOMIC", "AUTHORIZATION", |
| 29 | + "AVG", "BEGIN", "BEGIN_FRAME", "BEGIN_PARTITION", "BETWEEN", "BIGINT", "BINARY", "BLOB", |
| 30 | + "BOOLEAN", "BOTH", "BY", "CALL", "CALLED", "CARDINALITY", "CASCADED", "CASE", "CAST", "CEIL", |
| 31 | + "CEILING", "CHAR", "CHAR_LENGTH", "CHARACTER", "CHARACTER_LENGTH", "CHECK", "CLOB", "CLOSE", |
| 32 | + "COALESCE", "COLLATE", "COLLECT", "COLUMN", "COMMIT", "CONDITION", "CONNECT", "CONSTRAINT", |
| 33 | + "CONTAINS", "CONVERT", "CORR", "CORRESPONDING", "COUNT", "COVAR_POP", "COVAR_SAMP", "CREATE", |
| 34 | + "CROSS", "CUBE", "CUME_DIST", "CURRENT", "CURRENT_CATALOG", "CURRENT_DATE", |
| 35 | + "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_ROW", |
| 36 | + "CURRENT_SCHEMA", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_TRANSFORM_GROUP_FOR_TYPE", |
| 37 | + "CURRENT_USER", "CURSOR", "CYCLE", "DATE", "DAY", "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", |
| 38 | + "DEFAULT", "DELETE", "DENSE_RANK", "DEREF", "DESCRIBE", "DETERMINISTIC", "DISCONNECT", |
| 39 | + "DISTINCT", "DOUBLE", "DROP", "DYNAMIC", "EACH", "ELEMENT", "ELSE", "END", "END_FRAME", |
| 40 | + "END_PARTITION", "END-EXEC", "EQUALS", "ESCAPE", "EVERY", "EXCEPT", "EXEC", "EXECUTE", |
| 41 | + "EXISTS", "EXP", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FILTER", "FIRST_VALUE", "FLOAT", |
| 42 | + "FLOOR", "FOR", "FOREIGN", "FRAME_ROW", "FREE", "FROM", "FULL", "FUNCTION", "FUSION", |
| 43 | + "GET", "GLOBAL", "GRANT", "GROUP", "GROUPING", "GROUPS", "HAVING", "HOLD", "HOUR", "IDENTITY", |
| 44 | + "IN", "INDICATOR", "INNER", "INOUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTERSECT", |
| 45 | + "INTERSECTION", "INTERVAL", "INTO", "IS", "JOIN", "LAG", "LANGUAGE", "LARGE", "LAST_VALUE", |
| 46 | + "LATERAL", "LEAD", "LEADING", "LEFT", "LIKE", "LIKE_REGEX", "LN", "LOCAL", "LOCALTIME", |
| 47 | + "LOCALTIMESTAMP", "LOWER", "MATCH", "MAX", "MEMBER", "MERGE", "METHOD", "MIN", "MINUTE", |
| 48 | + "MOD", "MODIFIES", "MODULE", "MONTH", "MULTISET", "NATIONAL", "NATURAL", "NCHAR", "NCLOB", |
| 49 | + "NEW", "NO", "NONE", "NORMALIZE", "NOT", "NTH_VALUE", "NTILE", "NULL", "NULLIF", "NUMERIC", |
| 50 | + "OCTET_LENGTH", "OCCURRENCES_REGEX", "OF", "OFFSET", "OLD", "ON", "ONLY", "OPEN", "OR", |
| 51 | + "ORDER", "OUT", "OUTER", "OVER", "OVERLAPS", "OVERLAY", "PARAMETER", "PARTITION", "PERCENT", |
| 52 | + "PERCENT_RANK", "PERCENTILE_CONT", "PERCENTILE_DISC", "PERIOD", "PORTION", "POSITION", |
| 53 | + "POSITION_REGEX", "POWER", "PRECEDES", "PRECISION", "PREPARE", "PRIMARY", |
| 54 | + "PROCEDURE", "RANGE", "RANK", "READS", "REAL", "RECURSIVE", "REF", "REFERENCES", |
| 55 | + "REFERENCING", "REGR_AVGX", "REGR_AVGY", "REGR_COUNT", "REGR_INTERCEPT", "REGR_R2", |
| 56 | + "REGR_SLOPE", "REGR_SXX", "REGR_SXY", "REGR_SYY", "RELEASE", "RESULT", "RETURN", "RETURNS", |
| 57 | + "REVOKE", "RIGHT", "ROLLBACK", "ROLLUP", "ROW", "ROW_NUMBER", "ROWS", "SAVEPOINT", |
| 58 | + "SCOPE", "SCROLL", "SEARCH", "SECOND", "SELECT", "SENSITIVE", "SESSION_USER", "SET", |
| 59 | + "SIMILAR", "SMALLINT", "SOME", "SPECIFIC", "SPECIFICTYPE", "SQL", "SQLEXCEPTION", "SQLSTATE", |
| 60 | + "SQLWARNING", "SQRT", "START", "STATIC", "STDDEV_POP", "STDDEV_SAMP", "SUBMULTISET", |
| 61 | + "SUBSTRING", "SUBSTRING_REGEX", "SUCCEEDS", "SUM", "SYMMETRIC", "SYSTEM", "SYSTEM_TIME", |
| 62 | + "SYSTEM_USER", "TABLE", "TABLESAMPLE", "THEN", "TIME", "TIMESTAMP", "TIMEZONE_HOUR", |
| 63 | + "TIMEZONE_MINUTE", "TO", "TRAILING", "TRANSLATE", "TRANSLATE_REGEX", "TRANSLATION", |
| 64 | + "TREAT", "TRIGGER", "TRUNCATE", "TRIM", "TRIM_ARRAY", "TRUE", "UESCAPE", "UNION", "UNIQUE", |
| 65 | + "UNKNOWN", "UNNEST", "UPDATE", "UPPER", "USER", "USING", "VALUE", "VALUES", "VALUE_OF", |
| 66 | + "VAR_POP", "VAR_SAMP", "VARBINARY", "VARCHAR", "VARYING", "VERSIONING", "WHEN", "WHENEVER", |
| 67 | + "WHERE", "WIDTH_BUCKET", "WINDOW", "WITH", "WITHIN", "WITHOUT", "YEAR"]; |
| 68 | + } |
| 69 | +} |
| 70 | + |
| 71 | +pub struct GenericSqlDialect {} |
| 72 | + |
| 73 | +impl Dialect for GenericSqlDialect { |
| 74 | + fn keywords(&self) -> Vec<&'static str> { |
| 75 | + return vec![ |
| 76 | + "SELECT", |
| 77 | + "FROM", |
| 78 | + "WHERE", |
| 79 | + "LIMIT", |
| 80 | + "ORDER", |
| 81 | + "GROUP", |
| 82 | + "BY", |
| 83 | + "HAVING", |
| 84 | + "UNION", |
| 85 | + "ALL", |
| 86 | + "INSERT", |
| 87 | + "UPDATE", |
| 88 | + "DELETE", |
| 89 | + "IN", |
| 90 | + "IS", |
| 91 | + "NULL", |
| 92 | + "SET", |
| 93 | + "CREATE", |
| 94 | + "EXTERNAL", |
| 95 | + "TABLE", |
| 96 | + "ASC", |
| 97 | + "DESC", |
| 98 | + "AND", |
| 99 | + "OR", |
| 100 | + "NOT", |
| 101 | + "AS", |
| 102 | + "STORED", |
| 103 | + "CSV", |
| 104 | + "PARQUET", |
| 105 | + "LOCATION", |
| 106 | + "WITH", |
| 107 | + "WITHOUT", |
| 108 | + "HEADER", |
| 109 | + "ROW", |
| 110 | + |
| 111 | + // SQL types |
| 112 | + "CHAR", |
| 113 | + "CHARACTER", |
| 114 | + "VARYING", |
| 115 | + "LARGE", |
| 116 | + "OBJECT", |
| 117 | + "VARCHAR", |
| 118 | + "CLOB", |
| 119 | + "BINARY", |
| 120 | + "VARBINARY", |
| 121 | + "BLOB", |
| 122 | + "FLOAT", |
| 123 | + "REAL", |
| 124 | + "DOUBLE", |
| 125 | + "PRECISION", |
| 126 | + "INT", |
| 127 | + "INTEGER", |
| 128 | + "SMALLINT", |
| 129 | + "BIGINT", |
| 130 | + "NUMERIC", |
| 131 | + "DECIMAL", |
| 132 | + "DEC", |
| 133 | + "BOOLEAN", |
| 134 | + "DATE", |
| 135 | + "TIME", |
| 136 | + "TIMESTAMP", |
| 137 | + |
| 138 | + ]; |
| 139 | + } |
| 140 | +} |
| 141 | + |
0 commit comments