Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added to quote all the keywords for PostgreSQL. List from https://www… #551

Merged
merged 2 commits into from
Apr 30, 2019
Merged

Added to quote all the keywords for PostgreSQL. List from https://www… #551

merged 2 commits into from
Apr 30, 2019

Conversation

boonshift
Copy link
Contributor

….postgresql.org/docs/8.1/sql-keywords-appendix.html

Original problem: I added a column "desc", when inserting data, desc was not quoted and failed.

I ran some code locally,

val postgresqlKeywords = "a,abort,abs,absolute,access,action,ada,add,admin,after,aggregate,alias,all,allocate,also,alter,always,analyse,analyze,and,any,are,array,as,asc,asensitive,assertion,assignment,asymmetric,at,atomic,attribute,attributes,authorization,avg,backward,before,begin,bernoulli,between,bigint,binary,bit,bitvar,bit_length,blob,boolean,both,breadth,by,c,cache,call,called,cardinality,cascade,cascaded,case,cast,catalog,catalog_name,ceil,ceiling,chain,char,character,characteristics,characters,character_length,character_set_catalog,character_set_name,character_set_schema,char_length,check,checked,checkpoint,class,class_origin,clob,close,cluster,coalesce,cobol,collate,collation,collation_catalog,collation_name,collation_schema,collect,column,column_name,command_function,command_function_code,comment,commit,committed,completion,condition,condition_number,connect,connection,connection_name,constraint,constraints,constraint_catalog,constraint_name,constraint_schema,constructor,contains,continue,conversion,convert,copy,corr,corresponding,count,covar_pop,covar_samp,create,createdb,createrole,createuser,cross,csv,cube,cume_dist,current,current_date,current_default_transform_group,current_path,current_role,current_time,current_timestamp,current_transform_group_for_type,current_user,cursor,cursor_name,cycle,data,database,date,datetime_interval_code,datetime_interval_precision,day,deallocate,dec,decimal,declare,default,defaults,deferrable,deferred,defined,definer,degree,delete,delimiter,delimiters,dense_rank,depth,deref,derived,desc,describe,descriptor,destroy,destructor,deterministic,diagnostics,dictionary,disable,disconnect,dispatch,distinct,do,domain,double,drop,dynamic,dynamic_function,dynamic_function_code,each,element,else,enable,encoding,encrypted,end,end-exec,equals,escape,every,except,exception,exclude,excluding,exclusive,exec,execute,existing,exists,exp,explain,external,extract,false,fetch,filter,final,first,float,floor,following,for,force,foreign,fortran,forward,found,free,freeze,from,full,function,fusion,g,general,generated,get,global,go,goto,grant,granted,greatest,group,grouping,handler,having,header,hierarchy,hold,host,hour,identity,ignore,ilike,immediate,immutable,implementation,implicit,in,including,increment,index,indicator,infix,inherit,inherits,initialize,initially,inner,inout,input,insensitive,insert,instance,instantiable,instead,int,integer,intersect,intersection,interval,into,invoker,is,isnull,isolation,iterate,join,k,key,key_member,key_type,lancompiler,language,large,last,lateral,leading,least,left,length,less,level,like,limit,listen,ln,load,local,localtime,localtimestamp,location,locator,lock,login,lower,m,map,match,matched,max,maxvalue,member,merge,message_length,message_octet_length,message_text,method,min,minute,minvalue,mod,mode,modifies,modify,module,month,more,move,multiset,mumps,name,names,national,natural,nchar,nclob,nesting,new,next,no,nocreatedb,nocreaterole,nocreateuser,noinherit,nologin,none,normalize,normalized,nosuperuser,not,nothing,notify,notnull,nowait,null,nullable,nullif,nulls,number,numeric,object,octets,octet_length,of,off,offset,oids,old,on,only,open,operation,operator,option,options,or,order,ordering,ordinality,others,out,outer,output,over,overlaps,overlay,overriding,owner,pad,parameter,parameters,parameter_mode,parameter_name,parameter_ordinal_position,parameter_specific_catalog,parameter_specific_name,parameter_specific_schema,partial,partition,pascal,password,path,percentile_cont,percentile_disc,percent_rank,placing,pli,position,postfix,power,preceding,precision,prefix,preorder,prepare,prepared,preserve,primary,prior,privileges,procedural,procedure,public,quote,range,rank,read,reads,real,recheck,recursive,ref,references,referencing,regr_avgx,regr_avgy,regr_count,regr_intercept,regr_r2,regr_slope,regr_sxx,regr_sxy,regr_syy,reindex,relative,release,rename,repeatable,replace,reset,restart,restrict,result,return,returned_cardinality,returned_length,returned_octet_length,returned_sqlstate,returns,revoke,right,role,rollback,rollup,routine,routine_catalog,routine_name,routine_schema,row,rows,row_count,row_number,rule,savepoint,scale,schema,schema_name,scope,scope_catalog,scope_name,scope_schema,scroll,search,second,section,security,select,self,sensitive,sequence,serializable,server_name,session,session_user,set,setof,sets,share,show,similar,simple,size,smallint,some,source,space,specific,specifictype,specific_name,sql,sqlcode,sqlerror,sqlexception,sqlstate,sqlwarning,sqrt,stable,start,state,statement,static,statistics,stddev_pop,stddev_samp,stdin,stdout,storage,strict,structure,style,subclass_origin,sublist,submultiset,substring,sum,superuser,symmetric,sysid,system,system_user,table,tablesample,tablespace,table_name,temp,template,temporary,terminate,than,then,ties,time,timestamp,timezone_hour,timezone_minute,to,toast,top_level_count,trailing,transaction,transactions_committed,transactions_rolled_back,transaction_active,transform,transforms,translate,translation,treat,trigger,trigger_catalog,trigger_name,trigger_schema,trim,true,truncate,trusted,type,uescape,unbounded,uncommitted,under,unencrypted,union,unique,unknown,unlisten,unnamed,unnest,until,update,upper,usage,user,user_defined_type_catalog,user_defined_type_code,user_defined_type_name,user_defined_type_schema,using,vacuum,valid,validator,value,values,varchar,variable,varying,var_pop,var_samp,verbose,view,volatile,when,whenever,where,width_bucket,window,with,within,without,work,write,year,zone".splitToSequence(",")


        val missingKeywords = postgresqlKeywords.minus(ds.connection.metaData.sqlKeywords.splitToSequence(",")).minus(ANSI_SQL_2003_KEYWORDS)
        println("Missing Keywords: " + missingKeywords.joinToString(", "))

and I got a lot of missing keywords...

Missing Keywords: a, abs, absolute, action, ada, add, admin, after, alias, all, allocate, alter, always, and, any, are, array, as, asc, asensitive, assertion, assignment, asymmetric, at, atomic, attribute, attributes, authorization, avg, before, begin, bernoulli, between, bigint, binary, bitvar, bit_length, blob, boolean, both, breadth, by, c, call, called, cardinality, cascade, cascaded, case, cast, catalog, catalog_name, ceil, ceiling, chain, char, character, characteristics, characters, character_length, character_set_catalog, character_set_name, character_set_schema, char_length, check, checked, class_origin, clob, close, coalesce, cobol, collate, collation, collation_catalog, collation_name, collation_schema, collect, column, column_name, command_function, command_function_code, commit, committed, completion, condition, condition_number, connect, connection_name, constraint, constraints, constraint_catalog, constraint_name, constraint_schema, constructor, contains, continue, convert, corr, corresponding, count, covar_pop, covar_samp, create, createdb, createrole, createuser, cross, cube, cume_dist, current, current_date, current_default_transform_group, current_path, current_role, current_time, current_timestamp, current_transform_group_for_type, current_user, cursor, cursor_name, cycle, data, date, datetime_interval_code, datetime_interval_precision, day, deallocate, dec, decimal, declare, default, defaults, deferrable, deferred, defined, definer, degree, delete, dense_rank, depth, deref, derived, desc, describe, descriptor, destroy, destructor, deterministic, diagnostics, disconnect, dispatch, distinct, domain, double, drop, dynamic, dynamic_function, dynamic_function_code, each, element, else, end, end-exec, equals, escape, every, except, exception, exclude, excluding, exec, execute, existing, exists, exp, external, extract, false, fetch, filter, final, first, float, floor, following, for, foreign, fortran, found, free, from, full, function, fusion, g, general, generated, get, global, go, goto, grant, granted, group, grouping, having, hierarchy, hold, host, hour, identity, ignore, immediate, implementation, in, including, increment, indicator, infix, initialize, initially, inner, inout, input, insensitive, insert, instance, instantiable, int, integer, intersect, intersection, interval, into, invoker, is, isolation, iterate, join, k, key, key_member, key_type, lancompiler, language, large, last, lateral, leading, left, length, less, level, like, ln, local, localtime, localtimestamp, locator, login, lower, m, map, match, matched, max, maxvalue, member, merge, message_length, message_octet_length, message_text, method, min, minute, minvalue, mod, modifies, modify, module, month, more, multiset, mumps, name, names, national, natural, nchar, nclob, nesting, new, next, no, nocreatedb, nocreaterole, nocreateuser, noinherit, nologin, none, normalize, normalized, nosuperuser, not, null, nullable, nullif, nulls, number, numeric, object, octets, octet_length, of, old, on, only, open, operation, option, options, or, order, ordering, ordinality, others, out, outer, output, over, overlaps, overlay, overriding, pad, parameter, parameters, parameter_mode, parameter_name, parameter_ordinal_position, parameter_specific_catalog, parameter_specific_name, parameter_specific_schema, partial, partition, pascal, path, percentile_cont, percentile_disc, percent_rank, placing, pli, position, postfix, power, preceding, precision, prefix, preorder, prepare, preserve, primary, prior, privileges, procedure, public, range, rank, read, reads, real, recursive, ref, references, referencing, regr_avgx, regr_avgy, regr_count, regr_intercept, regr_r2, regr_slope, regr_sxx, regr_sxy, regr_syy, relative, release, repeatable, restart, result, return, returned_cardinality, returned_length, returned_octet_length, returned_sqlstate, returns, revoke, right, role, rollback, rollup, routine, routine_catalog, routine_name, routine_schema, row, rows, row_count, row_number, savepoint, scale, schema, schema_name, scope, scope_catalog, scope_name, scope_schema, scroll, search, second, section, security, select, self, sensitive, sequence, serializable, server_name, session, session_user, set, sets, similar, simple, size, smallint, some, source, space, specific, specifictype, specific_name, sql, sqlcode, sqlerror, sqlexception, sqlstate, sqlwarning, sqrt, start, state, statement, static, stddev_pop, stddev_samp, structure, style, subclass_origin, sublist, submultiset, substring, sum, superuser, symmetric, system, system_user, table, tablesample, table_name, temporary, terminate, than, then, ties, time, timestamp, timezone_hour, timezone_minute, to, toast, top_level_count, trailing, transaction, transactions_committed, transactions_rolled_back, transaction_active, transform, transforms, translate, translation, treat, trigger, trigger_catalog, trigger_name, trigger_schema, trim, true, type, uescape, unbounded, uncommitted, under, union, unique, unknown, unnamed, unnest, update, upper, usage, user, user_defined_type_catalog, user_defined_type_code, user_defined_type_name, user_defined_type_schema, using, value, values, varchar, variable, varying, var_pop, var_samp, view, when, whenever, where, width_bucket, window, with, within, without, work, write, year, zone

Not sure why postgresql is returning so few keywords via metadata.

@boonshift boonshift marked this pull request as ready for review April 24, 2019 07:33
@Tapac
Copy link
Contributor

Tapac commented Apr 25, 2019

Thank you for PR, but as I can see from a PgDatabaseMetadata.getSQLKeywords comment they use keyword list from SQL2003-2, so looks like ANSI_SQL_2003_KEYWORDS list in Exposed is outdated.

Could you actualize ANSI_SQL_2003_KEYWORDS that list from a link above and check the difference (without adding specific PG keywords)? From my pov, it will improve not the only PG compatibility but all other dialects.

@boonshift
Copy link
Contributor Author

Did a diff between SQL2003-2 vs PostgreSQL 11 (https://www.postgresql.org/docs/current/sql-keywords-appendix.html) and got the below. Still a few, but much less. Side Note: It does solve the problem that is affecting me, ie. "desc".

What do you think? Actually, am I right to say that the DatabaseMetaData.getSqlKeywords should have given the most complete and accurate list? All this that you are having to do is because that feature is broken there? Or am I missing something?

							      >	ABORT
ABS								ABS
							      >	ABSENT
ABSOLUTE							ABSOLUTE
							      >	ACCESS
							      >	ACCORDING
ACTION								ACTION
ADA								ADA
ADD								ADD
ADMIN								ADMIN
AFTER								AFTER
							      >	AGGREGATE
ALL								ALL
ALLOCATE							ALLOCATE
							      >	ALSO
ALTER								ALTER
ALWAYS								ALWAYS
							      >	ANALYSE
							      >	ANALYZE
AND								AND
ANY								ANY
ARE								ARE
ARRAY								ARRAY
							      >	ARRAY_AGG
							      >	ARRAY_MAX_CARDINALITY
AS								AS
ASC								ASC
ASENSITIVE							ASENSITIVE
ASSERTION							ASSERTION
ASSIGNMENT							ASSIGNMENT
ASYMMETRIC							ASYMMETRIC
AT								AT
ATOMIC								ATOMIC
							      >	ATTACH
ATTRIBUTE							ATTRIBUTE
ATTRIBUTES							ATTRIBUTES
AUTHORIZATION							AUTHORIZATION
AVG								AVG
							      >	BACKWARD
							      >	BASE64
BEFORE								BEFORE
BEGIN								BEGIN
							      >	BEGIN_FRAME
							      >	BEGIN_PARTITION
BERNOULLI							BERNOULLI
BETWEEN								BETWEEN
BIGINT								BIGINT
BINARY								BINARY
							      >	BIT
							      >	BIT_LENGTH
BLOB								BLOB
							      >	BLOCKED
							      >	BOM
BOOLEAN								BOOLEAN
BOTH								BOTH
BREADTH								BREADTH
BY								BY
C								C
							      >	CACHE
CALL								CALL
CALLED								CALLED
CARDINALITY							CARDINALITY
CASCADE								CASCADE
CASCADED							CASCADED
CASE								CASE
CAST								CAST
CATALOG								CATALOG
CATALOG_NAME							CATALOG_NAME
CEIL								CEIL
CEILING								CEILING
CHAIN								CHAIN
CHAR								CHAR
CHAR_LENGTH						      <
CHARACTER							CHARACTER
							      >	CHARACTERISTICS
							      >	CHARACTERS
CHARACTER_LENGTH						CHARACTER_LENGTH
CHARACTER_SET_CATALOG						CHARACTER_SET_CATALOG
CHARACTER_SET_NAME						CHARACTER_SET_NAME
CHARACTER_SET_SCHEMA						CHARACTER_SET_SCHEMA
CHARACTERISTICS						      |	CHAR_LENGTH
CHARACTERS						      <
CHECK								CHECK
CHECKED							      |	CHECKPOINT
							      >	CLASS
CLASS_ORIGIN							CLASS_ORIGIN
CLOB								CLOB
CLOSE								CLOSE
							      >	CLUSTER
COALESCE							COALESCE
COBOL								COBOL
CODE_UNITS						      <
COLLATE								COLLATE
COLLATION							COLLATION
COLLATION_CATALOG						COLLATION_CATALOG
COLLATION_NAME							COLLATION_NAME
COLLATION_SCHEMA						COLLATION_SCHEMA
COLLECT								COLLECT
COLUMN								COLUMN
							      >	COLUMNS
COLUMN_NAME							COLUMN_NAME
COMMAND_FUNCTION						COMMAND_FUNCTION
COMMAND_FUNCTION_CODE						COMMAND_FUNCTION_CODE
							      >	COMMENT
							      >	COMMENTS
COMMIT								COMMIT
COMMITTED							COMMITTED
							      >	CONCURRENTLY
CONDITION							CONDITION
CONDITION_NUMBER						CONDITION_NUMBER
							      >	CONFIGURATION
							      >	CONFLICT
CONNECT								CONNECT
							      >	CONNECTION
CONNECTION_NAME							CONNECTION_NAME
CONSTRAINT							CONSTRAINT
							      >	CONSTRAINTS
CONSTRAINT_CATALOG						CONSTRAINT_CATALOG
CONSTRAINT_NAME							CONSTRAINT_NAME
CONSTRAINT_SCHEMA						CONSTRAINT_SCHEMA
CONSTRAINTS						      |	CONSTRUCTOR
CONSTRUCTORS						      <
CONTAINS							CONTAINS
							      >	CONTENT
CONTINUE							CONTINUE
							      >	CONTROL
							      >	CONVERSION
CONVERT								CONVERT
							      >	COPY
CORR								CORR
CORRESPONDING							CORRESPONDING
							      >	COST
COUNT								COUNT
COVAR_POP							COVAR_POP
COVAR_SAMP							COVAR_SAMP
CREATE								CREATE
CROSS								CROSS
							      >	CSV
CUBE								CUBE
CUME_DIST							CUME_DIST
CURRENT								CURRENT
CURRENT_COLLATION					      |	CURRENT_CATALOG
CURRENT_DATE							CURRENT_DATE
CURRENT_DEFAULT_TRANSFORM_GROUP					CURRENT_DEFAULT_TRANSFORM_GROUP
CURRENT_PATH							CURRENT_PATH
CURRENT_ROLE							CURRENT_ROLE
							      >	CURRENT_ROW
							      >	CURRENT_SCHEMA
CURRENT_TIME							CURRENT_TIME
CURRENT_TIMESTAMP						CURRENT_TIMESTAMP
CURRENT_TRANSFORM_GROUP_FOR_TYPE				CURRENT_TRANSFORM_GROUP_FOR_TYPE
CURRENT_USER							CURRENT_USER
CURSOR								CURSOR
CURSOR_NAME							CURSOR_NAME
CYCLE								CYCLE
DATA								DATA
							      >	DATABASE
							      >	DATALINK
DATE								DATE
DATETIME_INTERVAL_CODE						DATETIME_INTERVAL_CODE
DATETIME_INTERVAL_PRECISION					DATETIME_INTERVAL_PRECISION
DAY								DAY
							      >	DB
DEALLOCATE							DEALLOCATE
DEC								DEC
DECIMAL								DECIMAL
DECLARE								DECLARE
DEFAULT								DEFAULT
DEFAULTS							DEFAULTS
DEFERRABLE							DEFERRABLE
DEFERRED							DEFERRED
DEFINED								DEFINED
DEFINER								DEFINER
DEGREE								DEGREE
DELETE								DELETE
							      >	DELIMITER
							      >	DELIMITERS
DENSE_RANK							DENSE_RANK
							      >	DEPENDS
DEPTH								DEPTH
DEREF								DEREF
DERIVED								DERIVED
DESC								DESC
DESCRIBE							DESCRIBE
DESCRIPTOR							DESCRIPTOR
							      >	DETACH
DETERMINISTIC							DETERMINISTIC
DIAGNOSTICS							DIAGNOSTICS
							      >	DICTIONARY
							      >	DISABLE
							      >	DISCARD
DISCONNECT							DISCONNECT
DISPATCH							DISPATCH
DISTINCT							DISTINCT
							      >	DLNEWCOPY
							      >	DLPREVIOUSCOPY
							      >	DLURLCOMPLETE
							      >	DLURLCOMPLETEONLY
							      >	DLURLCOMPLETEWRITE
							      >	DLURLPATH
							      >	DLURLPATHONLY
							      >	DLURLPATHWRITE
							      >	DLURLSCHEME
							      >	DLURLSERVER
							      >	DLVALUE
							      >	DO
							      >	DOCUMENT
DOMAIN								DOMAIN
DOUBLE								DOUBLE
DROP								DROP
DYNAMIC								DYNAMIC
DYNAMIC_FUNCTION						DYNAMIC_FUNCTION
DYNAMIC_FUNCTION_CODE						DYNAMIC_FUNCTION_CODE
EACH								EACH
ELEMENT								ELEMENT
ELSE								ELSE
							      >	EMPTY
							      >	ENABLE
							      >	ENCODING
							      >	ENCRYPTED
END								END
END							      |	END-EXEC
							      >	END_FRAME
							      >	END_PARTITION
							      >	ENFORCED
							      >	ENUM
EQUALS								EQUALS
							      >	ESCAPE
							      >	EVENT
EVERY								EVERY
EXCEPT								EXCEPT
EXCEPTION							EXCEPTION
EXCLUDE								EXCLUDE
EXCLUDING							EXCLUDING
							      >	EXCLUSIVE
EXEC								EXEC
EXECUTE								EXECUTE
EXISTS								EXISTS
EXP								EXP
							      >	EXPLAIN
							      >	EXPRESSION
							      >	EXTENSION
EXTERNAL							EXTERNAL
EXTRACT								EXTRACT
FALSE								FALSE
							      >	FAMILY
FETCH								FETCH
							      >	FILE
FILTER								FILTER
FINAL								FINAL
FIRST								FIRST
							      >	FIRST_VALUE
							      >	FLAG
FLOAT								FLOAT
FLOOR								FLOOR
FOLLOWING							FOLLOWING
FOR								FOR
							      >	FORCE
FOREIGN								FOREIGN
FORTRAN								FORTRAN
							      >	FORWARD
FOUND								FOUND
							      >	FRAME_ROW
FREE								FREE
							      >	FREEZE
FROM								FROM
							      >	FS
FULL								FULL
FUNCTION							FUNCTION
							      >	FUNCTIONS
FUSION								FUSION
G								G
GENERAL								GENERAL
							      >	GENERATED
GET								GET
GLOBAL								GLOBAL
GO								GO
GOTO								GOTO
GRANT								GRANT
GRANTED								GRANTED
							      >	GREATEST
GROUP								GROUP
GROUPING							GROUPING
							      >	GROUPS
							      >	HANDLER
HAVING								HAVING
							      >	HEADER
							      >	HEX
HIERARCHY							HIERARCHY
HOLD								HOLD
HOUR								HOUR
							      >	ID
IDENTITY							IDENTITY
							      >	IF
							      >	IGNORE
							      >	ILIKE
IMMEDIATE							IMMEDIATE
							      >	IMMEDIATELY
							      >	IMMUTABLE
IMPLEMENTATION							IMPLEMENTATION
							      >	IMPLICIT
							      >	IMPORT
IN								IN
							      >	INCLUDE
INCLUDING							INCLUDING
INCREMENT							INCREMENT
							      >	INDENT
							      >	INDEX
							      >	INDEXES
INDICATOR							INDICATOR
							      >	INHERIT
							      >	INHERITS
INITIALLY							INITIALLY
							      >	INLINE
INNER								INNER
INOUT								INOUT
INPUT								INPUT
INSENSITIVE							INSENSITIVE
INSERT								INSERT
INSTANCE							INSTANCE
INSTANTIABLE							INSTANTIABLE
							      >	INSTEAD
INT								INT
INTEGER								INTEGER
							      >	INTEGRITY
INTERSECT							INTERSECT
INTERSECTION							INTERSECTION
INTERVAL							INTERVAL
INTO								INTO
INVOKER								INVOKER
IS								IS
ISOLATION						      |	ISNULL
ISOLATION							ISOLATION
JOIN								JOIN
K								K
KEY								KEY
KEY_MEMBER							KEY_MEMBER
KEY_TYPE							KEY_TYPE
							      >	LABEL
							      >	LAG
LANGUAGE							LANGUAGE
LARGE								LARGE
LAST								LAST
							      >	LAST_VALUE
LATERAL								LATERAL
							      >	LEAD
LEADING								LEADING
							      >	LEAKPROOF
							      >	LEAST
LEFT								LEFT
LENGTH								LENGTH
LEVEL								LEVEL
							      >	LIBRARY
LIKE								LIKE
							      >	LIKE_REGEX
							      >	LIMIT
							      >	LINK
							      >	LISTEN
LN								LN
							      >	LOAD
LOCAL								LOCAL
LOCALTIME							LOCALTIME
LOCALTIMESTAMP							LOCALTIMESTAMP
							      >	LOCATION
LOCATOR								LOCATOR
							      >	LOCK
							      >	LOCKED
							      >	LOGGED
LOWER								LOWER
M								M
MAP								MAP
							      >	MAPPING
MATCH								MATCH
MATCHED								MATCHED
							      >	MATERIALIZED
MAX								MAX
MAXVALUE							MAXVALUE
							      >	MAX_CARDINALITY
MEMBER								MEMBER
MERGE								MERGE
MESSAGE_LENGTH							MESSAGE_LENGTH
MESSAGE_OCTET_LENGTH						MESSAGE_OCTET_LENGTH
MESSAGE_TEXT							MESSAGE_TEXT
METHOD								METHOD
MIN								MIN
MINUTE								MINUTE
MINVALUE							MINVALUE
MOD								MOD
							      >	MODE
MODIFIES							MODIFIES
MODULE								MODULE
MONTH								MONTH
MORE								MORE
							      >	MOVE
MULTISET							MULTISET
MUMPS								MUMPS
NAME								NAME
NAMES								NAMES
							      >	NAMESPACE
NATIONAL							NATIONAL
NATURAL								NATURAL
NCHAR								NCHAR
NCLOB								NCLOB
NESTING								NESTING
NEW								NEW
NEXT								NEXT
							      >	NFC
							      >	NFD
							      >	NFKC
							      >	NFKD
							      >	NIL
NO								NO
NONE								NONE
NORMALIZE							NORMALIZE
NORMALIZED							NORMALIZED
NOT								NOT
							      >	NOTHING
							      >	NOTIFY
							      >	NOTNULL
							      >	NOWAIT
							      >	NTH_VALUE
							      >	NTILE
NULL								NULL
NULLABLE							NULLABLE
NULLIF								NULLIF
NULLS								NULLS
NUMBER								NUMBER
NUMERIC								NUMERIC
OBJECT								OBJECT
OCTET_LENGTH						      |	OCCURRENCES_REGEX
OCTETS								OCTETS
							      >	OCTET_LENGTH
OF								OF
							      >	OFF
							      >	OFFSET
							      >	OIDS
OLD								OLD
ON								ON
ONLY								ONLY
OPEN								OPEN
							      >	OPERATOR
OPTION								OPTION
OPTIONS								OPTIONS
OR								OR
ORDER								ORDER
ORDERING							ORDERING
ORDINALITY							ORDINALITY
OTHERS								OTHERS
OUT								OUT
OUTER								OUTER
OUTPUT								OUTPUT
OVER								OVER
OVERLAPS							OVERLAPS
OVERLAY								OVERLAY
OVERRIDING							OVERRIDING
							      >	OWNED
							      >	OWNER
							      >	P
PAD								PAD
							      >	PARALLEL
PARAMETER							PARAMETER
PARAMETER_MODE							PARAMETER_MODE
PARAMETER_NAME							PARAMETER_NAME
PARAMETER_ORDINAL_POSITION					PARAMETER_ORDINAL_POSITION
PARAMETER_SPECIFIC_CATALOG					PARAMETER_SPECIFIC_CATALOG
PARAMETER_SPECIFIC_NAME						PARAMETER_SPECIFIC_NAME
PARAMETER_SPECIFIC_SCHEMA					PARAMETER_SPECIFIC_SCHEMA
							      >	PARSER
PARTIAL								PARTIAL
PARTITION							PARTITION
PASCAL								PASCAL
							      >	PASSING
							      >	PASSTHROUGH
							      >	PASSWORD
PATH								PATH
PERCENT_RANK						      |	PERCENT
PERCENTILE_CONT							PERCENTILE_CONT
PERCENTILE_DISC							PERCENTILE_DISC
							      >	PERCENT_RANK
							      >	PERIOD
							      >	PERMISSION
PLACING								PLACING
							      >	PLANS
PLI								PLI
							      >	POLICY
							      >	PORTION
POSITION							POSITION
							      >	POSITION_REGEX
POWER								POWER
							      >	PRECEDES
PRECEDING							PRECEDING
PRECISION							PRECISION
PREPARE								PREPARE
							      >	PREPARED
PRESERVE							PRESERVE
PRIMARY								PRIMARY
PRIOR								PRIOR
PRIVILEGES							PRIVILEGES
							      >	PROCEDURAL
PROCEDURE							PROCEDURE
							      >	PROCEDURES
							      >	PROGRAM
PUBLIC								PUBLIC
							      >	PUBLICATION
							      >	QUOTE
RANGE								RANGE
RANK								RANK
READ								READ
READS								READS
REAL								REAL
							      >	REASSIGN
							      >	RECHECK
							      >	RECOVERY
RECURSIVE							RECURSIVE
REF								REF
REFERENCES							REFERENCES
REFERENCING							REFERENCING
							      >	REFRESH
REGR_AVGX							REGR_AVGX
REGR_AVGY							REGR_AVGY
REGR_COUNT							REGR_COUNT
REGR_INTERCEPT							REGR_INTERCEPT
REGR_R2								REGR_R2
REGR_SLOPE							REGR_SLOPE
REGR_SXX							REGR_SXX
REGR_SXY							REGR_SXY
REGR_SYY							REGR_SYY
							      >	REINDEX
RELATIVE							RELATIVE
RELEASE								RELEASE
							      >	RENAME
REPEATABLE							REPEATABLE
							      >	REPLACE
							      >	REPLICA
							      >	REQUIRING
							      >	RESET
							      >	RESPECT
RESTART								RESTART
							      >	RESTORE
							      >	RESTRICT
RESULT								RESULT
RETURN								RETURN
RETURNED_CARDINALITY						RETURNED_CARDINALITY
RETURNED_LENGTH							RETURNED_LENGTH
RETURNED_OCTET_LENGTH						RETURNED_OCTET_LENGTH
RETURNED_SQLSTATE						RETURNED_SQLSTATE
							      >	RETURNING
RETURNS								RETURNS
REVOKE								REVOKE
RIGHT								RIGHT
ROLE								ROLE
ROLLBACK							ROLLBACK
ROLLUP								ROLLUP
ROUTINE								ROUTINE
							      >	ROUTINES
ROUTINE_CATALOG							ROUTINE_CATALOG
ROUTINE_NAME							ROUTINE_NAME
ROUTINE_SCHEMA							ROUTINE_SCHEMA
ROW								ROW
							      >	ROWS
ROW_COUNT							ROW_COUNT
ROW_NUMBER							ROW_NUMBER
ROWS							      |	RULE
SAVEPOINT							SAVEPOINT
SCALE								SCALE
SCHEMA								SCHEMA
							      >	SCHEMAS
SCHEMA_NAME							SCHEMA_NAME
							      >	SCOPE
SCOPE_CATALOG							SCOPE_CATALOG
SCOPE_NAME							SCOPE_NAME
SCOPE_SCHEMA							SCOPE_SCHEMA
SCROLL								SCROLL
SEARCH								SEARCH
SECOND								SECOND
SECTION								SECTION
SECURITY							SECURITY
SELECT								SELECT
							      >	SELECTIVE
SELF								SELF
SENSITIVE							SENSITIVE
SEQUENCE							SEQUENCE
							      >	SEQUENCES
SERIALIZABLE							SERIALIZABLE
							      >	SERVER
SERVER_NAME							SERVER_NAME
SESSION								SESSION
SESSION_USER							SESSION_USER
SET								SET
							      >	SETOF
SETS								SETS
							      >	SHARE
							      >	SHOW
SIMILAR								SIMILAR
SIMPLE								SIMPLE
SIZE								SIZE
							      >	SKIP
SMALLINT							SMALLINT
							      >	SNAPSHOT
SOME								SOME
SOURCE								SOURCE
SPACE								SPACE
SPECIFIC							SPECIFIC
SPECIFIC_NAME						      <
SPECIFICTYPE							SPECIFICTYPE
							      >	SPECIFIC_NAME
SQL								SQL
							      >	SQLCODE
							      >	SQLERROR
SQLEXCEPTION							SQLEXCEPTION
SQLSTATE							SQLSTATE
SQLWARNING							SQLWARNING
SQRT								SQRT
							      >	STABLE
							      >	STANDALONE
START								START
STATE								STATE
STATEMENT							STATEMENT
STATIC								STATIC
							      >	STATISTICS
STDDEV_POP							STDDEV_POP
STDDEV_SAMP							STDDEV_SAMP
							      >	STDIN
							      >	STDOUT
							      >	STORAGE
							      >	STRICT
							      >	STRIP
STRUCTURE							STRUCTURE
STYLE								STYLE
SUBCLASS_ORIGIN							SUBCLASS_ORIGIN
SUBMULTISET							SUBMULTISET
							      >	SUBSCRIPTION
SUBSTRING							SUBSTRING
							      >	SUBSTRING_REGEX
							      >	SUCCEEDS
SUM								SUM
SYMMETRIC							SYMMETRIC
							      >	SYSID
SYSTEM								SYSTEM
							      >	SYSTEM_TIME
SYSTEM_USER							SYSTEM_USER
							      >	T
TABLE								TABLE
TABLE_NAME						      |	TABLES
TABLESAMPLE							TABLESAMPLE
							      >	TABLESPACE
							      >	TABLE_NAME
							      >	TEMP
							      >	TEMPLATE
TEMPORARY							TEMPORARY
							      >	TEXT
THEN								THEN
TIES								TIES
TIME								TIME
TIMESTAMP							TIMESTAMP
TIMEZONE_HOUR							TIMEZONE_HOUR
TIMEZONE_MINUTE							TIMEZONE_MINUTE
TO								TO
							      >	TOKEN
TOP_LEVEL_COUNT							TOP_LEVEL_COUNT
TRAILING							TRAILING
TRANSACTION							TRANSACTION
TRANSACTION_ACTIVE					      <
TRANSACTIONS_COMMITTED						TRANSACTIONS_COMMITTED
TRANSACTIONS_ROLLED_BACK					TRANSACTIONS_ROLLED_BACK
							      >	TRANSACTION_ACTIVE
TRANSFORM							TRANSFORM
TRANSFORMS							TRANSFORMS
TRANSLATE							TRANSLATE
							      >	TRANSLATE_REGEX
TRANSLATION							TRANSLATION
TREAT								TREAT
TRIGGER								TRIGGER
TRIGGER_CATALOG							TRIGGER_CATALOG
TRIGGER_NAME							TRIGGER_NAME
TRIGGER_SCHEMA							TRIGGER_SCHEMA
TRIM								TRIM
							      >	TRIM_ARRAY
TRUE								TRUE
							      >	TRUNCATE
							      >	TRUSTED
TYPE								TYPE
							      >	TYPES
UESCAPE								UESCAPE
UNBOUNDED							UNBOUNDED
UNCOMMITTED							UNCOMMITTED
UNDER								UNDER
							      >	UNENCRYPTED
UNION								UNION
UNIQUE								UNIQUE
UNKNOWN								UNKNOWN
							      >	UNLINK
							      >	UNLISTEN
							      >	UNLOGGED
UNNAMED								UNNAMED
UNNEST								UNNEST
							      >	UNTIL
							      >	UNTYPED
UPDATE								UPDATE
UPPER								UPPER
							      >	URI
USAGE								USAGE
USER								USER
USER_DEFINED_TYPE_CATALOG					USER_DEFINED_TYPE_CATALOG
USER_DEFINED_TYPE_CODE						USER_DEFINED_TYPE_CODE
USER_DEFINED_TYPE_NAME						USER_DEFINED_TYPE_NAME
USER_DEFINED_TYPE_SCHEMA					USER_DEFINED_TYPE_SCHEMA
USING								USING
							      >	VACUUM
							      >	VALID
							      >	VALIDATE
							      >	VALIDATOR
VALUE								VALUE
VALUES								VALUES
VAR_POP							      |	VALUE_OF
VAR_SAMP						      |	VARBINARY
VARCHAR								VARCHAR
							      >	VARIADIC
VARYING								VARYING
							      >	VAR_POP
							      >	VAR_SAMP
							      >	VERBOSE
							      >	VERSION
							      >	VERSIONING
VIEW								VIEW
							      >	VIEWS
							      >	VOLATILE
WHEN								WHEN
WHENEVER							WHENEVER
WHERE								WHERE
							      >	WHITESPACE
WIDTH_BUCKET							WIDTH_BUCKET
WINDOW								WINDOW
WITH								WITH
WITHIN								WITHIN
WITHOUT								WITHOUT
WORK								WORK
							      >	WRAPPER
WRITE								WRITE
							      >	XML
							      >	XMLAGG
							      >	XMLATTRIBUTES
							      >	XMLBINARY
							      >	XMLCAST
							      >	XMLCOMMENT
							      >	XMLCONCAT
							      >	XMLDECLARATION
							      >	XMLDOCUMENT
							      >	XMLELEMENT
							      >	XMLEXISTS
							      >	XMLFOREST
							      >	XMLITERATE
							      >	XMLNAMESPACES
							      >	XMLPARSE
							      >	XMLPI
							      >	XMLQUERY
							      >	XMLROOT
							      >	XMLSCHEMA
							      >	XMLSERIALIZE
							      >	XMLTABLE
							      >	XMLTEXT
							      >	XMLVALIDATE
YEAR								YEAR
							      >	YES
ZONE								ZONE```

@Tapac
Copy link
Contributor

Tapac commented Apr 26, 2019

After update of SQL2003 keywords list I've got (using your test example) such list of words:
alias, bitvar, bit_length, completion, constructor, createdb, createrole, createuser, destroy, destructor, existing, host, ignore, infix, initialize, iterate, lancompiler, less, login, modify, nocreatedb, nocreaterole, nocreateuser, noinherit, nologin, nosuperuser, null, operation, parameters, postfix, prefix, preorder, scope, sqlcode, sqlerror, sublist, superuser, terminate, than, toast, variable

But some of them (like superuser) is absent from Postgres doc table, other (ignore, iterate) is non-reserved in PostgreSQL.

What do you think?

@boonshift
Copy link
Contributor Author

superuser is listed as a keyword in 8.1, but not in postgresql 11, it seems version to version it is different too... thinking out loud... (1) rely entirely on databasemetadata.sqlKeywords? But that also means we should go find out why it is missing so many keywords, or (2) quote all instead of quoting only keywords?

what do you think?

@Tapac
Copy link
Contributor

Tapac commented Apr 29, 2019

@boonshift , as I can see from a PG jdbc driver, starting from PostegreSQL 9 there is bundled list of keywords and driver retrieves them right from database:

// Exclude SQL:2003 keywords (https://github.com/ronsavage/SQL/blob/master/sql-2003-2.bnf)
        // from the returned list, ugly but required by jdbc spec.
        String sql = "select string_agg(word, ',') from pg_catalog.pg_get_keywords() " 

So I assume that it's worth to just update ANSI_SQL_2003_KEYWORDS in Exposed and it will cover most of the cases.

@boonshift
Copy link
Contributor Author

Cool. Then shall we merge this PR in then? It is now basically updated with ANSI_SQL_2003_KEYWORDS. Thanks!

@Tapac Tapac merged commit 96e78f9 into JetBrains:master Apr 30, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants