/*
* Copyright (c) 2011-2014 Jeppetto and Jonathan Thompson
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.iternine.jeppetto.dao.dynamodb.expression;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
/**
*/
@SuppressWarnings("UnusedDeclaration")
public enum DynamoDBReservedWords {
ABORT,
ABSOLUTE,
ACTION,
ADD,
AFTER,
AGENT,
AGGREGATE,
ALL,
ALLOCATE,
ALTER,
ANALYZE,
AND,
ANY,
ARCHIVE,
ARE,
ARRAY,
AS,
ASC,
ASCII,
ASENSITIVE,
ASSERTION,
ASYMMETRIC,
AT,
ATOMIC,
ATTACH,
ATTRIBUTE,
AUTH,
AUTHORIZATION,
AUTHORIZE,
AUTO,
AVG,
BACK,
BACKUP,
BASE,
BATCH,
BEFORE,
BEGIN,
BETWEEN,
BIGINT,
BINARY,
BIT,
BLOB,
BLOCK,
BOOLEAN,
BOTH,
BREADTH,
BUCKET,
BULK,
BY,
BYTE,
CALL,
CALLED,
CALLING,
CAPACITY,
CASCADE,
CASCADED,
CASE,
CAST,
CATALOG,
CHAR,
CHARACTER,
CHECK,
CLASS,
CLOB,
CLOSE,
CLUSTER,
CLUSTERED,
CLUSTERING,
CLUSTERS,
COALESCE,
COLLATE,
COLLATION,
COLLECTION,
COLUMN,
COLUMNS,
COMBINE,
COMMENT,
COMMIT,
COMPACT,
COMPILE,
COMPRESS,
CONDITION,
CONFLICT,
CONNECT,
CONNECTION,
CONSISTENCY,
CONSISTENT,
CONSTRAINT,
CONSTRAINTS,
CONSTRUCTOR,
CONSUMED,
CONTINUE,
CONVERT,
COPY,
CORRESPONDING,
COUNT,
COUNTER,
CREATE,
CROSS,
CUBE,
CURRENT,
CURSOR,
CYCLE,
DATA,
DATABASE,
DATE,
DATETIME,
DAY,
DEALLOCATE,
DEC,
DECIMAL,
DECLARE,
DEFAULT,
DEFERRABLE,
DEFERRED,
DEFINE,
DEFINED,
DEFINITION,
DELETE,
DELIMITED,
DEPTH,
DEREF,
DESC,
DESCRIBE,
DESCRIPTOR,
DETACH,
DETERMINISTIC,
DIAGNOSTICS,
DIRECTORIES,
DISABLE,
DISCONNECT,
DISTINCT,
DISTRIBUTE,
DO,
DOMAIN,
DOUBLE,
DROP,
DUMP,
DURATION,
DYNAMIC,
EACH,
ELEMENT,
ELSE,
ELSEIF,
EMPTY,
ENABLE,
END,
EQUAL,
EQUALS,
ERROR,
ESCAPE,
ESCAPED,
EVAL,
EVALUATE,
EXCEEDED,
EXCEPT,
EXCEPTION,
EXCEPTIONS,
EXCLUSIVE,
EXEC,
EXECUTE,
EXISTS,
EXIT,
EXPLAIN,
EXPLODE,
EXPORT,
EXPRESSION,
EXTENDED,
EXTERNAL,
EXTRACT,
FAIL,
FALSE,
FAMILY,
FETCH,
FIELDS,
FILE,
FILTER,
FILTERING,
FINAL,
FINISH,
FIRST,
FIXED,
FLATTERN,
FLOAT,
FOR,
FORCE,
FOREIGN,
FORMAT,
FORWARD,
FOUND,
FREE,
FROM,
FULL,
FUNCTION,
FUNCTIONS,
GENERAL,
GENERATE,
GET,
GLOB,
GLOBAL,
GO,
GOTO,
GRANT,
GREATER,
GROUP,
GROUPING,
HANDLER,
HASH,
HAVE,
HAVING,
HEAP,
HIDDEN,
HOLD,
HOUR,
IDENTIFIED,
IDENTITY,
IF,
IGNORE,
IMMEDIATE,
IMPORT,
IN,
INCLUDING,
INCLUSIVE,
INCREMENT,
INCREMENTAL,
INDEX,
INDEXED,
INDEXES,
INDICATOR,
INFINITE,
INITIALLY,
INLINE,
INNER,
INNTER,
INOUT,
INPUT,
INSENSITIVE,
INSERT,
INSTEAD,
INT,
INTEGER,
INTERSECT,
INTERVAL,
INTO,
INVALIDATE,
IS,
ISOLATION,
ITEM,
ITEMS,
ITERATE,
JOIN,
KEY,
KEYS,
LAG,
LANGUAGE,
LARGE,
LAST,
LATERAL,
LEAD,
LEADING,
LEAVE,
LEFT,
LENGTH,
LESS,
LEVEL,
LIKE,
LIMIT,
LIMITED,
LINES,
LIST,
LOAD,
LOCAL,
LOCALTIME,
LOCALTIMESTAMP,
LOCATION,
LOCATOR,
LOCK,
LOCKS,
LOG,
LOGED,
LONG,
LOOP,
LOWER,
MAP,
MATCH,
MATERIALIZED,
MAX,
MAXLEN,
MEMBER,
MERGE,
METHOD,
METRICS,
MIN,
MINUS,
MINUTE,
MISSING,
MOD,
MODE,
MODIFIES,
MODIFY,
MODULE,
MONTH,
MULTI,
MULTISET,
NAME,
NAMES,
NATIONAL,
NATURAL,
NCHAR,
NCLOB,
NEW,
NEXT,
NO,
NONE,
NOT,
NULL,
NULLIF,
NUMBER,
NUMERIC,
OBJECT,
OF,
OFFLINE,
OFFSET,
OLD,
ON,
ONLINE,
ONLY,
OPAQUE,
OPEN,
OPERATOR,
OPTION,
OR,
ORDER,
ORDINALITY,
OTHER,
OTHERS,
OUT,
OUTER,
OUTPUT,
OVER,
OVERLAPS,
OVERRIDE,
OWNER,
PAD,
PARALLEL,
PARAMETER,
PARAMETERS,
PARTIAL,
PARTITION,
PARTITIONED,
PARTITIONS,
PATH,
PERCENT,
PERCENTILE,
PERMISSION,
PERMISSIONS,
PIPE,
PIPELINED,
PLAN,
POOL,
POSITION,
PRECISION,
PREPARE,
PRESERVE,
PRIMARY,
PRIOR,
PRIVATE,
PRIVILEGES,
PROCEDURE,
PROCESSED,
PROJECT,
PROJECTION,
PROPERTY,
PROVISIONING,
PUBLIC,
PUT,
QUERY,
QUIT,
QUORUM,
RAISE,
RANDOM,
RANGE,
RANK,
RAW,
READ,
READS,
REAL,
REBUILD,
RECORD,
RECURSIVE,
REDUCE,
REF,
REFERENCE,
REFERENCES,
REFERENCING,
REGEXP,
REGION,
REINDEX,
RELATIVE,
RELEASE,
REMAINDER,
RENAME,
REPEAT,
REPLACE,
REQUEST,
RESET,
RESIGNAL,
RESOURCE,
RESPONSE,
RESTORE,
RESTRICT,
RESULT,
RETURN,
RETURNING,
RETURNS,
REVERSE,
REVOKE,
RIGHT,
ROLE,
ROLES,
ROLLBACK,
ROLLUP,
ROUTINE,
ROW,
ROWS,
RULE,
RULES,
SAMPLE,
SATISFIES,
SAVE,
SAVEPOINT,
SCAN,
SCHEMA,
SCOPE,
SCROLL,
SEARCH,
SECOND,
SECTION,
SEGMENT,
SEGMENTS,
SELECT,
SELF,
SEMI,
SENSITIVE,
SEPARATE,
SEQUENCE,
SERIALIZABLE,
SESSION,
SET,
SETS,
SHARD,
SHARE,
SHARED,
SHORT,
SHOW,
SIGNAL,
SIMILAR,
SIZE,
SKEWED,
SMALLINT,
SNAPSHOT,
SOME,
SOURCE,
SPACE,
SPACES,
SPARSE,
SPECIFIC,
SPECIFICTYPE,
SPLIT,
SQL,
SQLCODE,
SQLERROR,
SQLEXCEPTION,
SQLSTATE,
SQLWARNING,
START,
STATE,
STATIC,
STATUS,
STORAGE,
STORE,
STORED,
STREAM,
STRING,
STRUCT,
STYLE,
SUB,
SUBMULTISET,
SUBPARTITION,
SUBSTRING,
SUBTYPE,
SUM,
SUPER,
SYMMETRIC,
SYNONYM,
SYSTEM,
TABLE,
TABLESAMPLE,
TEMP,
TEMPORARY,
TERMINATED,
TEXT,
THAN,
THEN,
THROUGHPUT,
TIME,
TIMESTAMP,
TIMEZONE,
TINYINT,
TO,
TOKEN,
TOTAL,
TOUCH,
TRAILING,
TRANSACTION,
TRANSFORM,
TRANSLATE,
TRANSLATION,
TREAT,
TRIGGER,
TRIM,
TRUE,
TRUNCATE,
TTL,
TUPLE,
TYPE,
UNDER,
UNDO,
UNION,
UNIQUE,
UNIT,
UNKNOWN,
UNLOGGED,
UNNEST,
UNPROCESSED,
UNSIGNED,
UNTIL,
UPDATE,
UPPER,
URL,
USAGE,
USE,
USER,
USERS,
USING,
UUID,
VACUUM,
VALUE,
VALUED,
VALUES,
VARCHAR,
VARIABLE,
VARIANCE,
VARINT,
VARYING,
VIEW,
VIEWS,
VIRTUAL,
VOID,
WAIT,
WHEN,
WHENEVER,
WHERE,
WHILE,
WINDOW,
WITH,
WITHIN,
WITHOUT,
WORK,
WRAPPED,
WRITE,
YEAR,
ZONE;
//-------------------------------------------------------------
// Variables - Private - Static
//-------------------------------------------------------------
private static Set<String> reservedWords = new HashSet<String>() {{
for (DynamoDBReservedWords reservedWord : DynamoDBReservedWords.values()) {
add(reservedWord.name().toLowerCase());
}
}};
private static Pattern nonWordCharacter = Pattern.compile("\\W");
//-------------------------------------------------------------
// Methods - Public - Static
//-------------------------------------------------------------
public static boolean isReserved(String word) {
char ch = word.charAt(0);
return Character.isDigit(ch)
|| ch == '_'
|| reservedWords.contains(word.toLowerCase())
|| nonWordCharacter.matcher(word).find();
}
}