forked from sql-formatter-org/sql-formatter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsql.formatter.ts
More file actions
103 lines (94 loc) · 2.51 KB
/
sql.formatter.ts
File metadata and controls
103 lines (94 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { DialectOptions } from '../../dialect.js';
import { expandPhrases } from '../../expandPhrases.js';
import { functions } from './sql.functions.js';
import { dataTypes, keywords } from './sql.keywords.js';
const reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);
const reservedClauses = expandPhrases([
// queries
'WITH [RECURSIVE]',
'FROM',
'WHERE',
'GROUP BY [ALL | DISTINCT]',
'HAVING',
'WINDOW',
'PARTITION BY',
'ORDER BY',
'LIMIT',
'OFFSET',
'FETCH {FIRST | NEXT}',
// Data manipulation
// - insert:
'INSERT INTO',
'VALUES',
// - update:
'SET',
]);
const standardOnelineClauses = expandPhrases(['CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY] TABLE']);
const tabularOnelineClauses = expandPhrases([
// - create:
'CREATE [RECURSIVE] VIEW',
// - update:
'UPDATE',
'WHERE CURRENT OF',
// - delete:
'DELETE FROM',
// - drop table:
'DROP TABLE',
// - alter table:
'ALTER TABLE',
'ADD COLUMN',
'DROP [COLUMN]',
'RENAME COLUMN',
'RENAME TO',
'ALTER [COLUMN]',
'{SET | DROP} DEFAULT', // for alter column
'ADD SCOPE', // for alter column
'DROP SCOPE {CASCADE | RESTRICT}', // for alter column
'RESTART WITH', // for alter column
// - truncate:
'TRUNCATE TABLE',
// other
'SET SCHEMA',
]);
const reservedSetOperations = expandPhrases([
'UNION [ALL | DISTINCT]',
'EXCEPT [ALL | DISTINCT]',
'INTERSECT [ALL | DISTINCT]',
]);
const reservedJoins = expandPhrases([
'JOIN',
'{LEFT | RIGHT | FULL} [OUTER] JOIN',
'{INNER | CROSS} JOIN',
'NATURAL [INNER] JOIN',
'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',
]);
const reservedKeywordPhrases = expandPhrases([
'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',
'{ROWS | RANGE} BETWEEN',
]);
const reservedDataTypePhrases = expandPhrases([]);
export const sql: DialectOptions = {
name: 'sql',
tokenizerOptions: {
reservedSelect,
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
reservedSetOperations,
reservedJoins,
reservedKeywordPhrases,
reservedDataTypePhrases,
reservedKeywords: keywords,
reservedDataTypes: dataTypes,
reservedFunctionNames: functions,
stringTypes: [
{ quote: "''-qq-bs", prefixes: ['N', 'U&'] },
{ quote: "''-raw", prefixes: ['X'], requirePrefix: true },
],
identTypes: [`""-qq`, '``'],
paramTypes: { positional: true },
operators: ['||'],
},
formatOptions: {
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
tabularOnelineClauses,
},
};