update postgresReservedWords

This commit is contained in:
Nash Tsai 2014-09-22 09:47:30 +08:00
parent d0f8fb545b
commit 614db2ac9e
1 changed files with 592 additions and 160 deletions

View File

@ -12,6 +12,7 @@ import (
// func init() { // func init() {
// RegisterDialect("postgres", &postgres{}) // RegisterDialect("postgres", &postgres{})
// } // }
// from http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
var ( var (
postgresReservedWords = map[string]bool{ postgresReservedWords = map[string]bool{
"A": true, "A": true,
@ -170,165 +171,596 @@ var (
"DATE": true, "DATE": true,
"DATETIME_INTERVAL_CODE": true, "DATETIME_INTERVAL_CODE": true,
"DATETIME_INTERVAL_PRECISION": true, "DATETIME_INTERVAL_PRECISION": true,
"DAY": true, "DAY": true,
"DB": true, "DB": true,
"DEALLOCATE": true, "DEALLOCATE": true,
"DEC": true, "DEC": true,
"DECIMAL": true, "DECIMAL": true,
"DECLARE": true, "DECLARE": true,
"DEFAULT": true, "DEFAULT": true,
"DEFAULTS": true, "DEFAULTS": true,
"DEFERRABLE": true, "DEFERRABLE": true,
"DEFERRED": true, "DEFERRED": true,
"DEFINED": true, "DEFINED": true,
"DEFINER": true, "DEFINER": true,
"DEGREE": true, "DEGREE": true,
"DELETE": true, "DELETE": true,
"DELIMITER": true, "DELIMITER": true,
"DELIMITERS": true, "DELIMITERS": true,
"DENSE_RANK": true, "DENSE_RANK": true,
"DEPTH": true, "DEPTH": true,
"DEREF": true, "DEREF": true,
"DERIVED": true, "DERIVED": true,
"DESC": true, "DESC": true,
"DESCRIBE": true, "DESCRIBE": true,
"DESCRIPTOR": true, "DESCRIPTOR": true,
"DETERMINISTIC": true, "DETERMINISTIC": true,
"DIAGNOSTICS": true, "DIAGNOSTICS": true,
"DICTIONARY": true, "DICTIONARY": true,
"DISABLE": true, "DISABLE": true,
"DISCARD": true, "DISCARD": true,
"DISCONNECT": true, "DISCONNECT": true,
"DISPATCH": true, "DISPATCH": true,
"DISTINCT": true, "DISTINCT": true,
"DLNEWCOPY": true, "DLNEWCOPY": true,
"DLPREVIOUSCOPY": true, "DLPREVIOUSCOPY": true,
"DLURLCOMPLETE": true, "DLURLCOMPLETE": true,
"DLURLCOMPLETEONLY": true, "DLURLCOMPLETEONLY": true,
"DLURLCOMPLETEWRITE": true, "DLURLCOMPLETEWRITE": true,
"DLURLPATH": true, "DLURLPATH": true,
"DLURLPATHONLY": true, "DLURLPATHONLY": true,
"DLURLPATHWRITE": true, "DLURLPATHWRITE": true,
"DLURLSCHEME": true, "DLURLSCHEME": true,
"DLURLSERVER": true, "DLURLSERVER": true,
"DLVALUE": true, "DLVALUE": true,
"DO": true, "DO": true,
"DOCUMENT": true, "DOCUMENT": true,
"DOMAIN": true, "DOMAIN": true,
"DOUBLE": true, "DOUBLE": true,
"DROP": true, "DROP": true,
"DYNAMIC": true, "DYNAMIC": true,
"DYNAMIC_FUNCTION": true, "DYNAMIC_FUNCTION": true,
"DYNAMIC_FUNCTION_CODE": true, "DYNAMIC_FUNCTION_CODE": true,
"EACH": true, "EACH": true,
"ELEMENT": true, "ELEMENT": true,
"ELSE": true, "ELSE": true,
"EMPTY": true, "EMPTY": true,
"ENABLE": true, "ENABLE": true,
"ENCODING": true, "ENCODING": true,
"ENCRYPTED": true, "ENCRYPTED": true,
"END": true, "END": true,
"END-EXEC": true, "END-EXEC": true,
"END_FRAME": true, "END_FRAME": true,
"END_PARTITION": true, "END_PARTITION": true,
"ENFORCED": true, "ENFORCED": true,
"ENUM": true, "ENUM": true,
"EQUALS": true, "EQUALS": true,
"ESCAPE": true, "ESCAPE": true,
"EVENT": true, "EVENT": true,
"EVERY": true, "EVERY": true,
"EXCEPT": true, "EXCEPT": true,
"EXCEPTION": true, "EXCEPTION": true,
"EXCLUDE": true, "EXCLUDE": true,
"EXCLUDING": true, "EXCLUDING": true,
"EXCLUSIVE": true, "EXCLUSIVE": true,
"EXEC": true, "EXEC": true,
"EXECUTE": true, "EXECUTE": true,
"EXISTS": true, "EXISTS": true,
"EXP": true, "EXP": true,
"EXPLAIN": true, "EXPLAIN": true,
"EXPRESSION": true, "EXPRESSION": true,
"EXTENSION": true, "EXTENSION": true,
"EXTERNAL": true, "EXTERNAL": true,
"EXTRACT": true, "EXTRACT": true,
"FALSE": true, "FALSE": true,
"FAMILY": true, "FAMILY": true,
"FETCH": true, "FETCH": true,
"FILE": true, "FILE": true,
"FILTER": true, "FILTER": true,
"FINAL": true, "FINAL": true,
"FIRST": true, "FIRST": true,
"FIRST_VALUE": true, "FIRST_VALUE": true,
"FLAG": true, "FLAG": true,
"FLOAT": true, "FLOAT": true,
"FLOOR": true, "FLOOR": true,
"FOLLOWING": true, "FOLLOWING": true,
"FOR": true, "FOR": true,
"FORCE": true, "FORCE": true,
"FOREIGN": true, "FOREIGN": true,
"FORTRAN": true, "FORTRAN": true,
"FORWARD": true, "FORWARD": true,
"FOUND": true, "FOUND": true,
"FRAME_ROW": true, "FRAME_ROW": true,
"FREE": true, "FREE": true,
"FREEZE": true, "FREEZE": true,
"FROM": true, "FROM": true,
"FS": true, "FS": true,
"FULL": true, "FULL": true,
"FUNCTION": true, "FUNCTION": true,
"FUNCTIONS": true, "FUNCTIONS": true,
"FUSION": true, "FUSION": true,
"G": true, "G": true,
"GENERAL": true, "GENERAL": true,
"GENERATED": true, "GENERATED": true,
"GET": true, "GET": true,
"GLOBAL": true, "GLOBAL": true,
"GO": true, "GO": true,
"GOTO": true, "GOTO": true,
"GRANT": true, "GRANT": true,
"GRANTED": true, "GRANTED": true,
"GREATEST": true, "GREATEST": true,
"GROUP": true, "GROUP": true,
"GROUPING": true, "GROUPING": true,
"GROUPS": true, "GROUPS": true,
"HANDLER": true, "HANDLER": true,
"HAVING": true, "HAVING": true,
"HEADER": true, "HEADER": true,
"HEX": true, "HEX": true,
"HIERARCHY": true, "HIERARCHY": true,
"HOLD": true, "HOLD": true,
"HOUR": true, "HOUR": true,
"ID": true, "ID": true,
"IDENTITY": true, "IDENTITY": true,
"IF": true, "IF": true,
"IGNORE": true, "IGNORE": true,
"ILIKE": true, "ILIKE": true,
"IMMEDIATE": true, "IMMEDIATE": true,
"IMMEDIATELY": true, "IMMEDIATELY": true,
"IMMUTABLE": true, "IMMUTABLE": true,
"IMPLEMENTATION": true, "IMPLEMENTATION": true,
"IMPLICIT": true, "IMPLICIT": true,
"IMPORT": true, "IMPORT": true,
"IN": true, "IN": true,
"INCLUDING": true, "INCLUDING": true,
"INCREMENT": true, "INCREMENT": true,
"INDENT": true, "INDENT": true,
"INDEX": true, "INDEX": true,
"INDEXES": true, "INDEXES": true,
"INDICATOR": true, "INDICATOR": true,
"INHERIT": true, "INHERIT": true,
"INHERITS": true, "INHERITS": true,
"INITIALLY": true, "INITIALLY": true,
"INLINE": true, "INLINE": true,
"INNER": true, "INNER": true,
"INOUT": true, "INOUT": true,
"INPUT": true, "INPUT": true,
"INSENSITIVE": true, "INSENSITIVE": true,
"INSERT": true, "INSERT": true,
"INSTANCE": true, "INSTANCE": true,
"INSTANTIABLE": true, "INSTANTIABLE": true,
"INSTEAD": true, "INSTEAD": true,
"INT": true, "INT": true,
"INTEGER": true,
"INTEGRITY": true,
"INTERSECT": true,
"INTERSECTION": true,
"INTERVAL": true,
"INTO": true,
"INVOKER": true,
"IS": true,
"ISNULL": true,
"ISOLATION": true,
"JOIN": true,
"K": true,
"KEY": true,
"KEY_MEMBER": true,
"KEY_TYPE": true,
"LABEL": true,
"LAG": true,
"LANGUAGE": true,
"LARGE": true,
"LAST": true,
"LAST_VALUE": true,
"LATERAL": true,
"LC_COLLATE": true,
"LC_CTYPE": true,
"LEAD": true,
"LEADING": true,
"LEAKPROOF": true,
"LEAST": true,
"LEFT": true,
"LENGTH": true,
"LEVEL": true,
"LIBRARY": true,
"LIKE": true,
"LIKE_REGEX": true,
"LIMIT": true,
"LINK": true,
"LISTEN": true,
"LN": true,
"LOAD": true,
"LOCAL": true,
"LOCALTIME": true,
"LOCALTIMESTAMP": true,
"LOCATION": true,
"LOCATOR": true,
"LOCK": true,
"LOWER": true,
"M": true,
"MAP": true,
"MAPPING": true,
"MATCH": true,
"MATCHED": true,
"MATERIALIZED": true,
"MAX": true,
"MAXVALUE": true,
"MAX_CARDINALITY": true,
"MEMBER": true,
"MERGE": true,
"MESSAGE_LENGTH": true,
"MESSAGE_OCTET_LENGTH": true,
"MESSAGE_TEXT": true,
"METHOD": true,
"MIN": true,
"MINUTE": true,
"MINVALUE": true,
"MOD": true,
"MODE": true,
"MODIFIES": true,
"MODULE": true,
"MONTH": true,
"MORE": true,
"MOVE": true,
"MULTISET": true,
"MUMPS": true,
"NAME": true,
"NAMES": true,
"NAMESPACE": true,
"NATIONAL": true,
"NATURAL": true,
"NCHAR": true,
"NCLOB": true,
"NESTING": true,
"NEW": true,
"NEXT": true,
"NFC": true,
"NFD": true,
"NFKC": true,
"NFKD": true,
"NIL": true,
"NO": true,
"NONE": true,
"NORMALIZE": true,
"NORMALIZED": true,
"NOT": true,
"NOTHING": true,
"NOTIFY": true,
"NOTNULL": true,
"NOWAIT": true,
"NTH_VALUE": true,
"NTILE": true,
"NULL": true,
"NULLABLE": true,
"NULLIF": true,
"NULLS": true,
"NUMBER": true,
"NUMERIC": true,
"OBJECT": true,
"OCCURRENCES_REGEX": true,
"OCTETS": true,
"OCTET_LENGTH": true,
"OF": true,
"OFF": true,
"OFFSET": true,
"OIDS": true,
"OLD": true,
"ON": true,
"ONLY": true,
"OPEN": true,
"OPERATOR": true,
"OPTION": true,
"OPTIONS": true,
"OR": true,
"ORDER": true,
"ORDERING": true,
"ORDINALITY": true,
"OTHERS": true,
"OUT": true,
"OUTER": true,
"OUTPUT": true,
"OVER": true,
"OVERLAPS": true,
"OVERLAY": true,
"OVERRIDING": true,
"OWNED": true,
"OWNER": true,
"P": true,
"PAD": true,
"PARAMETER": true,
"PARAMETER_MODE": true,
"PARAMETER_NAME": true,
"PARAMETER_ORDINAL_POSITION": true,
"PARAMETER_SPECIFIC_CATALOG": true,
"PARAMETER_SPECIFIC_NAME": true,
"PARAMETER_SPECIFIC_SCHEMA": true,
"PARSER": true,
"PARTIAL": true,
"PARTITION": true,
"PASCAL": true,
"PASSING": true,
"PASSTHROUGH": true,
"PASSWORD": true,
"PATH": true,
"PERCENT": true,
"PERCENTILE_CONT": true,
"PERCENTILE_DISC": true,
"PERCENT_RANK": true,
"PERIOD": true,
"PERMISSION": true,
"PLACING": true,
"PLANS": true,
"PLI": true,
"PORTION": true,
"POSITION": true,
"POSITION_REGEX": true,
"POWER": true,
"PRECEDES": true,
"PRECEDING": true,
"PRECISION": true,
"PREPARE": true,
"PREPARED": true,
"PRESERVE": true,
"PRIMARY": true,
"PRIOR": true,
"PRIVILEGES": true,
"PROCEDURAL": true,
"PROCEDURE": true,
"PROGRAM": true,
"PUBLIC": true,
"QUOTE": true,
"RANGE": true,
"RANK": true,
"READ": true,
"READS": true,
"REAL": true,
"REASSIGN": true,
"RECHECK": true,
"RECOVERY": true,
"RECURSIVE": true,
"REF": true,
"REFERENCES": true,
"REFERENCING": true,
"REFRESH": true,
"REGR_AVGX": true,
"REGR_AVGY": true,
"REGR_COUNT": true,
"REGR_INTERCEPT": true,
"REGR_R2": true,
"REGR_SLOPE": true,
"REGR_SXX": true,
"REGR_SXY": true,
"REGR_SYY": true,
"REINDEX": true,
"RELATIVE": true,
"RELEASE": true,
"RENAME": true,
"REPEATABLE": true,
"REPLACE": true,
"REPLICA": true,
"REQUIRING": true,
"RESET": true,
"RESPECT": true,
"RESTART": true,
"RESTORE": true,
"RESTRICT": true,
"RESULT": true,
"RETURN": true,
"RETURNED_CARDINALITY": true,
"RETURNED_LENGTH": true,
"RETURNED_OCTET_LENGTH": true,
"RETURNED_SQLSTATE": true,
"RETURNING": true,
"RETURNS": true,
"REVOKE": true,
"RIGHT": true,
"ROLE": true,
"ROLLBACK": true,
"ROLLUP": true,
"ROUTINE": true,
"ROUTINE_CATALOG": true,
"ROUTINE_NAME": true,
"ROUTINE_SCHEMA": true,
"ROW": true,
"ROWS": true,
"ROW_COUNT": true,
"ROW_NUMBER": true,
"RULE": true,
"SAVEPOINT": true,
"SCALE": true,
"SCHEMA": true,
"SCHEMA_NAME": true,
"SCOPE": true,
"SCOPE_CATALOG": true,
"SCOPE_NAME": true,
"SCOPE_SCHEMA": true,
"SCROLL": true,
"SEARCH": true,
"SECOND": true,
"SECTION": true,
"SECURITY": true,
"SELECT": true,
"SELECTIVE": true,
"SELF": true,
"SENSITIVE": true,
"SEQUENCE": true,
"SEQUENCES": true,
"SERIALIZABLE": true,
"SERVER": true,
"SERVER_NAME": true,
"SESSION": true,
"SESSION_USER": true,
"SET": true,
"SETOF": true,
"SETS": true,
"SHARE": true,
"SHOW": true,
"SIMILAR": true,
"SIMPLE": true,
"SIZE": true,
"SMALLINT": true,
"SNAPSHOT": true,
"SOME": true,
"SOURCE": true,
"SPACE": true,
"SPECIFIC": true,
"SPECIFICTYPE": true,
"SPECIFIC_NAME": true,
"SQL": true,
"SQLCODE": true,
"SQLERROR": true,
"SQLEXCEPTION": true,
"SQLSTATE": true,
"SQLWARNING": true,
"SQRT": true,
"STABLE": true,
"STANDALONE": true,
"START": true,
"STATE": true,
"STATEMENT": true,
"STATIC": true,
"STATISTICS": true,
"STDDEV_POP": true,
"STDDEV_SAMP": true,
"STDIN": true,
"STDOUT": true,
"STORAGE": true,
"STRICT": true,
"STRIP": true,
"STRUCTURE": true,
"STYLE": true,
"SUBCLASS_ORIGIN": true,
"SUBMULTISET": true,
"SUBSTRING": true,
"SUBSTRING_REGEX": true,
"SUCCEEDS": true,
"SUM": true,
"SYMMETRIC": true,
"SYSID": true,
"SYSTEM": true,
"SYSTEM_TIME": true,
"SYSTEM_USER": true,
"T": true,
"TABLE": true,
"TABLES": true,
"TABLESAMPLE": true,
"TABLESPACE": true,
"TABLE_NAME": true,
"TEMP": true,
"TEMPLATE": true,
"TEMPORARY": true,
"TEXT": true,
"THEN": true,
"TIES": true,
"TIME": true,
"TIMESTAMP": true,
"TIMEZONE_HOUR": true,
"TIMEZONE_MINUTE": true,
"TO": true,
"TOKEN": true,
"TOP_LEVEL_COUNT": true,
"TRAILING": true,
"TRANSACTION": true,
"TRANSACTIONS_COMMITTED": true,
"TRANSACTIONS_ROLLED_BACK": true,
"TRANSACTION_ACTIVE": true,
"TRANSFORM": true,
"TRANSFORMS": true,
"TRANSLATE": true,
"TRANSLATE_REGEX": true,
"TRANSLATION": true,
"TREAT": true,
"TRIGGER": true,
"TRIGGER_CATALOG": true,
"TRIGGER_NAME": true,
"TRIGGER_SCHEMA": true,
"TRIM": true,
"TRIM_ARRAY": true,
"TRUE": true,
"TRUNCATE": true,
"TRUSTED": true,
"TYPE": true,
"TYPES": true,
"UESCAPE": true,
"UNBOUNDED": true,
"UNCOMMITTED": true,
"UNDER": true,
"UNENCRYPTED": true,
"UNION": true,
"UNIQUE": true,
"UNKNOWN": true,
"UNLINK": true,
"UNLISTEN": true,
"UNLOGGED": true,
"UNNAMED": true,
"UNNEST": true,
"UNTIL": true,
"UNTYPED": true,
"UPDATE": true,
"UPPER": true,
"URI": true,
"USAGE": true,
"USER": true,
"USER_DEFINED_TYPE_CATALOG": true,
"USER_DEFINED_TYPE_CODE": true,
"USER_DEFINED_TYPE_NAME": true,
"USER_DEFINED_TYPE_SCHEMA": true,
"USING": true,
"VACUUM": true,
"VALID": true,
"VALIDATE": true,
"VALIDATOR": true,
"VALUE": true,
"VALUES": true,
"VALUE_OF": true,
"VARBINARY": true,
"VARCHAR": true,
"VARIADIC": true,
"VARYING": true,
"VAR_POP": true,
"VAR_SAMP": true,
"VERBOSE": true,
"VERSION": true,
"VERSIONING": true,
"VIEW": true,
"VOLATILE": true,
"WHEN": true,
"WHENEVER": true,
"WHERE": true,
"WHITESPACE": true,
"WIDTH_BUCKET": true,
"WINDOW": true,
"WITH": true,
"WITHIN": true,
"WITHOUT": true,
"WORK": true,
"WRAPPER": true,
"WRITE": true,
"XML": true,
"XMLAGG": true,
"XMLATTRIBUTES": true,
"XMLBINARY": true,
"XMLCAST": true,
"XMLCOMMENT": true,
"XMLCONCAT": true,
"XMLDECLARATION": true,
"XMLDOCUMENT": true,
"XMLELEMENT": true,
"XMLEXISTS": true,
"XMLFOREST": true,
"XMLITERATE": true,
"XMLNAMESPACES": true,
"XMLPARSE": true,
"XMLPI": true,
"XMLQUERY": true,
"XMLROOT": true,
"XMLSCHEMA": true,
"XMLSERIALIZE": true,
"XMLTABLE": true,
"XMLTEXT": true,
"XMLVALIDATE": true,
"YEAR": true,
"YES": true,
"ZONE": true,
} }
) )
@ -595,7 +1027,7 @@ func (db *postgres) GetTables() ([]*core.Table, error) {
func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) { func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT indexname, indexdef FROM pg_indexes WHERE schemaname = 'public' and tablename = $1" s := "SELECT indexname, indexdef FROM pg_indexes WHERE schemaname='public' AND tablename=$1"
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if err != nil { if err != nil {