<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/python-packages/sqlparse.git, branch 0.2.0</title>
<subtitle>github.com: andialbrecht/sqlparse.git
</subtitle>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/'/>
<entry>
<title>Bump version to 0.2.0.</title>
<updated>2016-07-20T07:20:19+00:00</updated>
<author>
<name>Andi Albrecht</name>
<email>albrecht.andi@gmail.com</email>
</author>
<published>2016-07-20T07:20:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=9919d14755143780a8889bbafafd554ed8c28930'/>
<id>9919d14755143780a8889bbafafd554ed8c28930</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update changelog.</title>
<updated>2016-07-20T07:17:58+00:00</updated>
<author>
<name>Andi Albrecht</name>
<email>albrecht.andi@gmail.com</email>
</author>
<published>2016-07-20T07:17:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=b00489a43eaa8bf6bef5474f3d96ec0feff59283'/>
<id>b00489a43eaa8bf6bef5474f3d96ec0feff59283</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Cleanup: Don't redefine underscore.</title>
<updated>2016-07-20T07:14:32+00:00</updated>
<author>
<name>Andi Albrecht</name>
<email>albrecht.andi@gmail.com</email>
</author>
<published>2016-07-20T07:13:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=d9bc0b3cc1777f3a7314ce1f315906de9fffcd17'/>
<id>d9bc0b3cc1777f3a7314ce1f315906de9fffcd17</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Format keywords.py</title>
<updated>2016-06-28T21:28:07+00:00</updated>
<author>
<name>Victor Uriarte</name>
<email>victor.m.uriarte@intel.com</email>
</author>
<published>2016-06-28T21:28:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=65a21f54851233b8747b1b28c6ecfcf27233684b'/>
<id>65a21f54851233b8747b1b28c6ecfcf27233684b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #269 from dlenski/oracle-11g-keywords</title>
<updated>2016-06-28T21:24:48+00:00</updated>
<author>
<name>Vik</name>
<email>vmuriart@gmail.com</email>
</author>
<published>2016-06-28T21:24:48+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=1bc9ee9d7271a907b31c88fe6744c8a8d21cd252'/>
<id>1bc9ee9d7271a907b31c88fe6744c8a8d21cd252</id>
<content type='text'>
add all Oracle 11g reserved words that aren't already in sqlparse.keywords</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
add all Oracle 11g reserved words that aren't already in sqlparse.keywords</pre>
</div>
</content>
</entry>
<entry>
<title>add all Oracle 11g NON-RESERVED keywords (in a separate dict, as @vmuriart suggested)</title>
<updated>2016-06-28T20:50:23+00:00</updated>
<author>
<name>Dan Lenski</name>
<email>daniel.lenski@finalphasesystems.com</email>
</author>
<published>2016-06-28T20:46:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=b2ba3dcc31b42e9e43e5df0a18877072fe058f96'/>
<id>b2ba3dcc31b42e9e43e5df0a18877072fe058f96</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>I think ROWID, ROWLABEL, ROWNUM, and SYSDATE should be classified as Name.Builtin rather than Keyword, since they are identifier-like</title>
<updated>2016-06-26T17:33:50+00:00</updated>
<author>
<name>Dan Lenski</name>
<email>daniel.lenski@finalphasesystems.com</email>
</author>
<published>2016-06-26T17:33:14+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=0e6d03c15da16c96c65f851427001e55fd6736c9'/>
<id>0e6d03c15da16c96c65f851427001e55fd6736c9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>add all Oracle 11g reserved words that aren't already in sqlparse.keywords</title>
<updated>2016-06-26T17:21:30+00:00</updated>
<author>
<name>Dan Lenski</name>
<email>daniel.lenski@finalphasesystems.com</email>
</author>
<published>2016-06-26T17:21:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=c9f87f1b602ccb00d1e4f6ea0fa69c186c67b1dd'/>
<id>c9f87f1b602ccb00d1e4f6ea0fa69c186c67b1dd</id>
<content type='text'>
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__))
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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__))
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #268 from darikg/returning</title>
<updated>2016-06-25T14:21:58+00:00</updated>
<author>
<name>Vik</name>
<email>vmuriart@gmail.com</email>
</author>
<published>2016-06-25T14:21:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=dc74eb771432c73dc28cf46ac4a8b8b6d0351a94'/>
<id>dc74eb771432c73dc28cf46ac4a8b8b6d0351a94</id>
<content type='text'>
Returning clause ends where clause</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Returning clause ends where clause</pre>
</div>
</content>
</entry>
<entry>
<title>Returning clause ends where clause</title>
<updated>2016-06-25T14:08:52+00:00</updated>
<author>
<name>Darik Gamble</name>
<email>darik.gamble.spam@gmail.com</email>
</author>
<published>2016-06-25T14:08:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/sqlparse.git/commit/?id=c27a604291f7ae1d6dbf3a49376972f723ad16f1'/>
<id>c27a604291f7ae1d6dbf3a49376972f723ad16f1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
