summaryrefslogtreecommitdiff
path: root/sqlparse
Commit message (Collapse)AuthorAgeFilesLines
* add all Oracle 11g NON-RESERVED keywords (in a separate dict, as @vmuriart ↵Dan Lenski2016-06-281-1/+106
| | | | suggested)
* I think ROWID, ROWLABEL, ROWNUM, and SYSDATE should be classified as ↵Dan Lenski2016-06-261-4/+4
| | | | Name.Builtin rather than Keyword, since they are identifier-like
* add all Oracle 11g reserved words that aren't already in sqlparse.keywordsDan Lenski2016-06-261-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Oracle has at least three categories of keywords: 1. reserved words (can't be used in unquoted identifiers) 2. "non-reserved" keywords (which have a specific syntactic meaning, but which *can* be used in unquoted identifiers… which is insane) 3. reserved words which are specific to PL/SQL (so probably shouldn't be considered special by sqlparse) This PR adds everything from #1 which sqlparse didn't already include. Some of these are used in other SQL databases as well (e.g. SYNONYM, ENABLE, DISABLE) while most are Oracle-specific. I referred to the Oracle 11g docs for these lists: http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#BABGHAFH And I used the following script to find the ones that were missing from sqlparse: import sqlparse import textwrap # Oracle 11g reserved words: http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#BABGHAFH reserved = { 'ACCESS', 'ELSE', 'MODIFY', 'START', 'ADD', 'EXCLUSIVE', 'NOAUDIT', 'SELECT', 'ALL', 'EXISTS', 'NOCOMPRESS', 'SESSION', 'ALTER', 'FILE', 'NOT', 'SET', 'AND', 'FLOAT', 'NOTFOUND', 'SHARE', 'ANY', 'FOR', 'NOWAIT', 'SIZE', 'ARRAYLEN', 'FROM', 'NULL', 'SMALLINT', 'AS', 'GRANT', 'NUMBER', 'SQLBUF', 'ASC', 'GROUP', 'OF', 'SUCCESSFUL', 'AUDIT', 'HAVING', 'OFFLINE', 'SYNONYM', 'BETWEEN', 'IDENTIFIED', 'ON', 'SYSDATE', 'BY', 'IMMEDIATE', 'ONLINE', 'TABLE', 'CHAR', 'IN', 'OPTION', 'THEN', 'CHECK', 'INCREMENT', 'OR', 'TO', 'CLUSTER', 'INDEX', 'ORDER', 'TRIGGER', 'COLUMN', 'INITIAL', 'PCTFREE', 'UID', 'COMMENT', 'INSERT', 'PRIOR', 'UNION', 'COMPRESS', 'INTEGER', 'PRIVILEGES', 'UNIQUE', 'CONNECT', 'INTERSECT', 'PUBLIC', 'UPDATE', 'CREATE', 'INTO', 'RAW', 'USER', 'CURRENT', 'IS', 'RENAME', 'VALIDATE', 'DATE', 'LEVEL', 'RESOURCE', 'VALUES', 'DECIMAL', 'LIKE', 'REVOKE', 'VARCHAR', 'DEFAULT', 'LOCK', 'ROW', 'VARCHAR2', 'DELETE', 'LONG', 'ROWID', 'VIEW', 'DESC', 'MAXEXTENTS', 'ROWLABEL', 'WHENEVER', 'DISTINCT', 'MINUS', 'ROWNUM', 'WHERE', 'DROP', 'MODE', 'ROWS', 'WITH', } # Oracle 11g "non-reserved" keywords (don't blame me, I didn't come up with this insane concept): # http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#BABHJHFE keywords = { 'ADMIN', 'CURSOR', 'FOUND', 'MOUNT', 'AFTER', 'CYCLE', 'FUNCTION', 'NEXT', 'ALLOCATE', 'DATABASE', 'GO', 'NEW', 'ANALYZE', 'DATAFILE', 'GOTO', 'NOARCHIVELOG', 'ARCHIVE', 'DBA', 'GROUPS', 'NOCACHE', 'ARCHIVELOG', 'DEC', 'INCLUDING', 'NOCYCLE', 'AUTHORIZATION', 'DECLARE', 'INDICATOR', 'NOMAXVALUE', 'AVG', 'DISABLE', 'INITRANS', 'NOMINVALUE', 'BACKUP', 'DISMOUNT', 'INSTANCE', 'NONE', 'BEGIN', 'DOUBLE', 'INT', 'NOORDER', 'BECOME', 'DUMP', 'KEY', 'NORESETLOGS', 'BEFORE', 'EACH', 'LANGUAGE', 'NORMAL', 'BLOCK', 'ENABLE', 'LAYER', 'NOSORT', 'BODY', 'END', 'LINK', 'NUMERIC', 'CACHE', 'ESCAPE', 'LISTS', 'OFF', 'CANCEL', 'EVENTS', 'LOGFILE', 'OLD', 'CASCADE', 'EXCEPT', 'MANAGE', 'ONLY', 'CHANGE', 'EXCEPTIONS', 'MANUAL', 'OPEN', 'CHARACTER', 'EXEC', 'MAX', 'OPTIMAL', 'CHECKPOINT', 'EXPLAIN', 'MAXDATAFILES', 'OWN', 'CLOSE', 'EXECUTE', 'MAXINSTANCES', 'PACKAGE', 'COBOL', 'EXTENT', 'MAXLOGFILES', 'PARALLEL', 'COMMIT', 'EXTERNALLY', 'MAXLOGHISTORY', 'PCTINCREASE', 'COMPILE', 'FETCH', 'MAXLOGMEMBERS', 'PCTUSED', 'CONSTRAINT', 'FLUSH', 'MAXTRANS', 'PLAN', 'CONSTRAINTS', 'FREELIST', 'MAXVALUE', 'PLI', 'CONTENTS', 'FREELISTS', 'MIN', 'PRECISION', 'CONTINUE', 'FORCE', 'MINEXTENTS', 'PRIMARY', 'CONTROLFILE', 'FOREIGN', 'MINVALUE', 'PRIVATE', 'COUNT', 'FORTRAN', 'MODULE', 'PROCEDURE', 'PROFILE', 'SAVEPOINT', 'SQLSTATE', 'TRACING', 'QUOTA', 'SCHEMA', 'STATEMENT_ID', 'TRANSACTION', 'READ', 'SCN', 'STATISTICS', 'TRIGGERS', 'REAL', 'SECTION', 'STOP', 'TRUNCATE', 'RECOVER', 'SEGMENT', 'STORAGE', 'UNDER', 'REFERENCES', 'SEQUENCE', 'SUM', 'UNLIMITED', 'REFERENCING', 'SHARED', 'SWITCH', 'UNTIL', 'RESETLOGS', 'SNAPSHOT', 'SYSTEM', 'USE', 'RESTRICTED', 'SOME', 'TABLES', 'USING', 'REUSE', 'SORT', 'TABLESPACE', 'WHEN', 'ROLE', 'SQL', 'TEMPORARY', 'WRITE', 'ROLES', 'SQLCODE', 'THREAD', 'WORK', 'ROLLBACK', 'SQLERROR', 'TIME' } # Oracle 11g reserved words for PL/SQL only: # http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#BABDFFBA plsql_reserved = { 'ABORT', 'BETWEEN', 'CRASH', 'DIGITS', 'ACCEPT', 'BINARY_INTEGER', 'CREATE', 'DISPOSE', 'ACCESS', 'BODY', 'CURRENT', 'DISTINCT', 'ADD', 'BOOLEAN', 'CURRVAL', 'DO', 'ALL', 'BY', 'CURSOR', 'DROP', 'ALTER', 'CASE', 'DATABASE', 'ELSE', 'AND', 'CHAR', 'DATA_BASE', 'ELSIF', 'ANY', 'CHAR_BASE', 'DATE', 'END', 'ARRAY', 'CHECK', 'DBA', 'ENTRY', 'ARRAYLEN', 'CLOSE', 'DEBUGOFF', 'EXCEPTION', 'AS', 'CLUSTER', 'DEBUGON', 'EXCEPTION_INIT', 'ASC', 'CLUSTERS', 'DECLARE', 'EXISTS', 'ASSERT', 'COLAUTH', 'DECIMAL', 'EXIT', 'ASSIGN', 'COLUMNS', 'DEFAULT', 'FALSE', 'AT', 'COMMIT', 'DEFINITION', 'FETCH', 'AUTHORIZATION', 'COMPRESS', 'DELAY', 'FLOAT', 'AVG', 'CONNECT', 'DELETE', 'FOR', 'BASE_TABLE', 'CONSTANT', 'DELTA', 'FORM', 'BEGIN', 'COUNT', 'DESC', 'FROM', 'FUNCTION', 'NEW', 'RELEASE', 'SUM', 'GENERIC', 'NEXTVAL', 'REMR', 'TABAUTH', 'GOTO', 'NOCOMPRESS', 'RENAME', 'TABLE', 'GRANT', 'NOT', 'RESOURCE', 'TABLES', 'GROUP', 'NULL', 'RETURN', 'TASK', 'HAVING', 'NUMBER', 'REVERSE', 'TERMINATE', 'IDENTIFIED', 'NUMBER_BASE', 'REVOKE', 'THEN', 'IF', 'OF', 'ROLLBACK', 'TO', 'IN', 'ON', 'ROWID', 'TRUE', 'INDEX', 'OPEN', 'ROWLABEL', 'TYPE', 'INDEXES', 'OPTION', 'ROWNUM', 'UNION', 'INDICATOR', 'OR', 'ROWTYPE', 'UNIQUE', 'INSERT', 'ORDER', 'RUN', 'UPDATE', 'INTEGER', 'OTHERS', 'SAVEPOINT', 'USE', 'INTERSECT', 'OUT', 'SCHEMA', 'VALUES', 'INTO', 'PACKAGE', 'SELECT', 'VARCHAR', 'IS', 'PARTITION', 'SEPARATE', 'VARCHAR2', 'LEVEL', 'PCTFREE', 'SET', 'VARIANCE', 'LIKE', 'POSITIVE', 'SIZE', 'VIEW', 'LIMITED', 'PRAGMA', 'SMALLINT', 'VIEWS', 'LOOP', 'PRIOR', 'SPACE', 'WHEN', 'MAX', 'PRIVATE', 'SQL', 'WHERE', 'MIN', 'PROCEDURE', 'SQLCODE', 'WHILE', 'MINUS', 'PUBLIC', 'SQLERRM', 'WITH', 'MLSLABEL', 'RAISE', 'START', 'WORK', 'MOD', 'RANGE', 'STATEMENT', 'XOR', 'MODE', 'REAL', 'STDDEV', 'NATURAL', 'RECORD', 'SUBTYPE' } - reserved for batch, name in ((reserved, 'Oracle 11g reserved words'), (keywords, 'Oracle 11g "non-reserved" keywords'), (plsql_reserved, 'Oracle 11g reserved words for PL/SQL only'),): missing = batch - set(sqlparse.keywords.KEYWORDS) - set(sqlparse.keywords.KEYWORDS_COMMON) if missing: print("{} out of {} {} are missing from sqlparse.keywords.KEYWORDS (v{}):".format(len(missing), len(batch), name, sqlparse.__version__)) print(textwrap.fill(repr(missing), initial_indent=' ', subsequent_indent=' ')) else: print("All {} {} are in from sqlparse.keywords.KEYWORDS (v{}).".format(len(batch), name, sqlparse.__version__))
* Fix token-parent behaviorVictor Uriarte2016-06-121-0/+3
| | | | Closes issue #226
* Migrate optparse to argparse; optparse deprecated in py2.7Victor Uriarte2016-06-121-77/+106
| | | | cleanup example
* Update setup.pyVictor Uriarte2016-06-121-0/+115
| | | | switch scripts to console-script
* Refactor raw conversion on split_unquoted_newlinesVictor Uriarte2016-06-122-4/+4
|
* Remove token_first; its redundant to token_next(idx=0)Victor Uriarte2016-06-121-20/+8
|
* Restyle pprint_tree and align upto idx=99Victor Uriarte2016-06-121-3/+11
|
* Refactor groupingVictor Uriarte2016-06-121-8/+11
| | | | Alternate form to transverse the tlists and clean up matching.
* Add sql.Operation tokenlistVictor Uriarte2016-06-122-7/+11
|
* Replace remove with list comprehension on sql.pyVictor Uriarte2016-06-111-1/+3
| | | | Help performance for #62, #135
* Fix grouping of `case` within parenthesis.Victor Uriarte2016-06-111-0/+2
| | | | Closes #164
* Updating Utilities for clarity and fix tokentype behaviorVictor Uriarte2016-06-111-10/+10
|
* Refactor sql.py insert_afterVictor Uriarte2016-06-111-1/+1
|
* Refactor sql.py group_tokensVictor Uriarte2016-06-111-19/+11
| | | | | first token in group had no parents and almost became batman
* Redo unicode-encoding on lexer.pyVictor Uriarte2016-06-111-11/+4
|
* Fix get_token_at_offset behavior at edgeVictor Uriarte2016-06-111-1/+1
| | | | | At position 6 (with an index starting at 0) it should have been on 2nd word for the example sql='select * from dual'
* Apply new-style str formatVictor Uriarte2016-06-113-20/+24
|
* Change variable name to lowercaseVictor Uriarte2016-06-111-4/+4
|
* Remove unneded code from sql.pyVictor Uriarte2016-06-111-12/+2
| | | | Remove HACK code. Code is now properly updated
* clean up groupingVictor Uriarte2016-06-111-3/+4
|
* Merge pull request #253 from vmuriart/refactor_filtersVik2016-06-093-295/+213
|\ | | | | Refactor filters
| * Refactor leading wsVictor Uriarte2016-06-091-4/+6
| |
| * Remove redundant tokenVictor Uriarte2016-06-091-6/+5
| | | | | | | | no point in returning tk to remove it right after
| * Clean-up flatten uptoVictor Uriarte2016-06-091-6/+7
| |
| * Refactor various Indent GroupingsVictor Uriarte2016-06-091-58/+34
| |
| * refactor next opkenVictor Uriarte2016-06-091-24/+20
| |
| * refactor reindentVictor Uriarte2016-06-091-53/+29
| |
| * Add customizable newlineVictor Uriarte2016-06-091-2/+3
| |
| * refactor process caseVictor Uriarte2016-06-091-12/+9
| |
| * Add indent and nl()Victor Uriarte2016-06-091-63/+37
| |
| * remove leftover returnsVictor Uriarte2016-06-091-2/+1
| |
| * Remove returnsVictor Uriarte2016-06-091-9/+3
| |
| * Remove base_indentVictor Uriarte2016-06-091-20/+23
| |
| * refactor next tokenVictor Uriarte2016-06-091-17/+18
| |
| * whitespace filterVictor Uriarte2016-06-091-9/+12
| |
| * Update SpacesAroundOperatorsFilterVictor Uriarte2016-06-091-19/+14
| |
| * Refactor StripCommentsFilterVictor Uriarte2016-06-091-17/+18
| |
| * update serializerunicodeVictor Uriarte2016-06-091-3/+3
| |
* | Update init and misc filesVictor Uriarte2016-06-062-9/+10
|/
* Organize engine moduleVictor Uriarte2016-06-063-37/+53
|
* Split filters into smaller filesVictor Uriarte2016-06-068-676/+754
|
* Format `pr` to pass flake8 and update functions usedVictor Uriarte2016-06-062-45/+56
|
* Add filter `Spaces around Operators`Adam Greenhall2016-06-062-0/+39
|
* Fix Case statements AlignmentAdam Greenhall2016-06-061-2/+2
|
* Fix/Test JoinsAdam Greenhall2016-06-061-2/+8
|
* Fix/Test Limit statementsAdam Greenhall2016-06-061-1/+1
|
* Fix/Test `Group-By`Adam Greenhall2016-06-061-2/+12
|
* Fix Case statementsAdam Greenhall2016-06-062-1/+33
|