sql-formatter
Version:
Format whitespace in a SQL query to make it more readable
385 lines (379 loc) • 5.7 kB
JavaScript
import Formatter from '../core/Formatter';
import Tokenizer from '../core/Tokenizer';
const reservedWords = [
'AES128',
'AES256',
'ALLOWOVERWRITE',
'ANALYSE',
'ARRAY',
'AS',
'ASC',
'AUTHORIZATION',
'BACKUP',
'BINARY',
'BLANKSASNULL',
'BOTH',
'BYTEDICT',
'BZIP2',
'CAST',
'CHECK',
'COLLATE',
'COLUMN',
'CONSTRAINT',
'CREATE',
'CREDENTIALS',
'CURRENT_DATE',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
'CURRENT_USER',
'CURRENT_USER_ID',
'DEFAULT',
'DEFERRABLE',
'DEFLATE',
'DEFRAG',
'DELTA',
'DELTA32K',
'DESC',
'DISABLE',
'DISTINCT',
'DO',
'ELSE',
'EMPTYASNULL',
'ENABLE',
'ENCODE',
'ENCRYPT',
'ENCRYPTION',
'END',
'EXPLICIT',
'FALSE',
'FOR',
'FOREIGN',
'FREEZE',
'FULL',
'GLOBALDICT256',
'GLOBALDICT64K',
'GRANT',
'GZIP',
'IDENTITY',
'IGNORE',
'ILIKE',
'INITIALLY',
'INTO',
'LEADING',
'LOCALTIME',
'LOCALTIMESTAMP',
'LUN',
'LUNS',
'LZO',
'LZOP',
'MINUS',
'MOSTLY13',
'MOSTLY32',
'MOSTLY8',
'NATURAL',
'NEW',
'NULLS',
'OFF',
'OFFLINE',
'OFFSET',
'OLD',
'ON',
'ONLY',
'OPEN',
'ORDER',
'OVERLAPS',
'PARALLEL',
'PARTITION',
'PERCENT',
'PERMISSIONS',
'PLACING',
'PRIMARY',
'RAW',
'READRATIO',
'RECOVER',
'REFERENCES',
'REJECTLOG',
'RESORT',
'RESTORE',
'SESSION_USER',
'SIMILAR',
'SYSDATE',
'SYSTEM',
'TABLE',
'TAG',
'TDES',
'TEXT255',
'TEXT32K',
'THEN',
'TIMESTAMP',
'TO',
'TOP',
'TRAILING',
'TRUE',
'TRUNCATECOLUMNS',
'UNIQUE',
'USER',
'USING',
'VERBOSE',
'WALLET',
'WHEN',
'WITH',
'WITHOUT',
'PREDICATE',
'COLUMNS',
'COMPROWS',
'COMPRESSION',
'COPY',
'FORMAT',
'DELIMITER',
'FIXEDWIDTH',
'AVRO',
'JSON',
'ENCRYPTED',
'BZIP2',
'GZIP',
'LZOP',
'PARQUET',
'ORC',
'ACCEPTANYDATE',
'ACCEPTINVCHARS',
'BLANKSASNULL',
'DATEFORMAT',
'EMPTYASNULL',
'ENCODING',
'ESCAPE',
'EXPLICIT_IDS',
'FILLRECORD',
'IGNOREBLANKLINES',
'IGNOREHEADER',
'NULL AS',
'REMOVEQUOTES',
'ROUNDEC',
'TIMEFORMAT',
'TRIMBLANKS',
'TRUNCATECOLUMNS',
'COMPROWS',
'COMPUPDATE',
'MAXERROR',
'NOLOAD',
'STATUPDATE',
'MANIFEST',
'REGION',
'IAM_ROLE',
'MASTER_SYMMETRIC_KEY',
'SSH',
'ACCEPTANYDATE',
'ACCEPTINVCHARS',
'ACCESS_KEY_ID',
'SECRET_ACCESS_KEY',
'AVRO',
'BLANKSASNULL',
'BZIP2',
'COMPROWS',
'COMPUPDATE',
'CREDENTIALS',
'DATEFORMAT',
'DELIMITER',
'EMPTYASNULL',
'ENCODING',
'ENCRYPTED',
'ESCAPE',
'EXPLICIT_IDS',
'FILLRECORD',
'FIXEDWIDTH',
'FORMAT',
'IAM_ROLE',
'GZIP',
'IGNOREBLANKLINES',
'IGNOREHEADER',
'JSON',
'LZOP',
'MANIFEST',
'MASTER_SYMMETRIC_KEY',
'MAXERROR',
'NOLOAD',
'NULL AS',
'READRATIO',
'REGION',
'REMOVEQUOTES',
'ROUNDEC',
'SSH',
'STATUPDATE',
'TIMEFORMAT',
'SESSION_TOKEN',
'TRIMBLANKS',
'TRUNCATECOLUMNS',
'EXTERNAL',
'DATA CATALOG',
'HIVE METASTORE',
'CATALOG_ROLE',
'VACUUM',
'COPY',
'UNLOAD',
'EVEN',
'ALL',
];
const reservedTopLevelWords = [
'ADD',
'AFTER',
'ALTER COLUMN',
'ALTER TABLE',
'DELETE FROM',
'EXCEPT',
'FROM',
'GROUP BY',
'HAVING',
'INSERT INTO',
'INSERT',
'INTERSECT',
'TOP',
'LIMIT',
'MODIFY',
'ORDER BY',
'SELECT',
'SET CURRENT SCHEMA',
'SET SCHEMA',
'SET',
'UNION ALL',
'UNION',
'UPDATE',
'VALUES',
'WHERE',
'VACUUM',
'COPY',
'UNLOAD',
'ANALYZE',
'ANALYSE',
'DISTKEY',
'SORTKEY',
'COMPOUND',
'INTERLEAVED',
'FORMAT',
'DELIMITER',
'FIXEDWIDTH',
'AVRO',
'JSON',
'ENCRYPTED',
'BZIP2',
'GZIP',
'LZOP',
'PARQUET',
'ORC',
'ACCEPTANYDATE',
'ACCEPTINVCHARS',
'BLANKSASNULL',
'DATEFORMAT',
'EMPTYASNULL',
'ENCODING',
'ESCAPE',
'EXPLICIT_IDS',
'FILLRECORD',
'IGNOREBLANKLINES',
'IGNOREHEADER',
'NULL AS',
'REMOVEQUOTES',
'ROUNDEC',
'TIMEFORMAT',
'TRIMBLANKS',
'TRUNCATECOLUMNS',
'COMPROWS',
'COMPUPDATE',
'MAXERROR',
'NOLOAD',
'STATUPDATE',
'MANIFEST',
'REGION',
'IAM_ROLE',
'MASTER_SYMMETRIC_KEY',
'SSH',
'ACCEPTANYDATE',
'ACCEPTINVCHARS',
'ACCESS_KEY_ID',
'SECRET_ACCESS_KEY',
'AVRO',
'BLANKSASNULL',
'BZIP2',
'COMPROWS',
'COMPUPDATE',
'CREDENTIALS',
'DATEFORMAT',
'DELIMITER',
'EMPTYASNULL',
'ENCODING',
'ENCRYPTED',
'ESCAPE',
'EXPLICIT_IDS',
'FILLRECORD',
'FIXEDWIDTH',
'FORMAT',
'IAM_ROLE',
'GZIP',
'IGNOREBLANKLINES',
'IGNOREHEADER',
'JSON',
'LZOP',
'MANIFEST',
'MASTER_SYMMETRIC_KEY',
'MAXERROR',
'NOLOAD',
'NULL AS',
'READRATIO',
'REGION',
'REMOVEQUOTES',
'ROUNDEC',
'SSH',
'STATUPDATE',
'TIMEFORMAT',
'SESSION_TOKEN',
'TRIMBLANKS',
'TRUNCATECOLUMNS',
'EXTERNAL',
'DATA CATALOG',
'HIVE METASTORE',
'CATALOG_ROLE',
];
const reservedTopLevelWordsNoIndent = [];
const reservedNewlineWords = [
'AND',
'ELSE',
'OR',
'OUTER APPLY',
'WHEN',
'VACUUM',
'COPY',
'UNLOAD',
'ANALYZE',
'ANALYSE',
'DISTKEY',
'SORTKEY',
'COMPOUND',
'INTERLEAVED',
// joins
'JOIN',
'INNER JOIN',
'LEFT JOIN',
'LEFT OUTER JOIN',
'RIGHT JOIN',
'RIGHT OUTER JOIN',
'FULL JOIN',
'FULL OUTER JOIN',
'CROSS JOIN',
'NATURAL JOIN',
];
export default class RedshiftFormatter extends Formatter {
tokenizer() {
return new Tokenizer({
reservedWords,
reservedTopLevelWords,
reservedNewlineWords,
reservedTopLevelWordsNoIndent,
stringTypes: [`""`, "''", '``'],
openParens: ['('],
closeParens: [')'],
indexedPlaceholderTypes: ['?'],
namedPlaceholderTypes: ['@', '#', '$'],
lineCommentTypes: ['--'],
operators: ['|/', '||/', '<<', '>>', '!=', '||'],
});
}
}