Skip to content

Instantly share code, notes, and snippets.

@DavidWells
Last active October 26, 2017 23:28
Show Gist options
  • Save DavidWells/7ae8455dfdac446d38ddb19f5d4bf980 to your computer and use it in GitHub Desktop.
Save DavidWells/7ae8455dfdac446d38ddb19f5d4bf980 to your computer and use it in GitHub Desktop.
List of reserved dynamoDB keys
module.exports = [
"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"
]
// ref https://github.com/sportnumerics/stats/blob/5ae2ebe884df2260514953f041e1eabaab5526eb/lib/service/persistence.js#L117
const _ = require('lodash')
const knownKeywords = require('./keywords')
const ATTRIBUTE_PREFIX = ':p';
const TOKEN_PREFIX = '#token';
function isKeyword(keyword) {
return _.includes(knownKeywords, keyword.toUpperCase());
};
function sanitizeKeyName(keyName) {
if (isKeyword(keyName)) {
const token = _.uniqueId(TOKEN_PREFIX);
return {
sanitizedName: token,
nameMapping: { [token]: keyName }
};
} else {
return {
sanitizedName: keyName,
nameMapping: {}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment