Skip to content

Commit ee56459

Browse files
committed
Fix tabular formatting for CREATE TABLE
Fixes #690 This fix is somewhat ugly. I really don't like it. Frankly, I don't like this whole tabular style feature.
1 parent bec158b commit ee56459

19 files changed

+142
-65
lines changed

src/dialect.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,7 @@ const processDialectFormatOptions = (
4242
): ProcessedDialectFormatOptions => ({
4343
alwaysDenseOperators: options.alwaysDenseOperators || [],
4444
onelineClauses: Object.fromEntries(options.onelineClauses.map(name => [name, true])),
45+
tabularOnelineClauses: Object.fromEntries(
46+
(options.tabularOnelineClauses ?? options.onelineClauses).map(name => [name, true])
47+
),
4548
});

src/formatter/ExpressionFormatter.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,16 @@ export interface DialectFormatOptions {
5050
alwaysDenseOperators?: string[];
5151
// List of clauses that should be formatted on a single line
5252
onelineClauses: string[];
53+
// List of clauses that should be formatted on a single line in tabular style
54+
tabularOnelineClauses?: string[];
5355
}
5456

5557
// Contains the same data as DialectFormatOptions,
5658
// but optimized for faster and more conventient lookup.
5759
export interface ProcessedDialectFormatOptions {
5860
alwaysDenseOperators: string[];
5961
onelineClauses: Record<string, boolean>;
62+
tabularOnelineClauses: Record<string, boolean>;
6063
}
6164

6265
/** Formats a generic SQL expression */
@@ -255,7 +258,11 @@ export default class ExpressionFormatter {
255258
}
256259

257260
private isOnelineClause(node: ClauseNode): boolean {
258-
return this.dialectCfg.onelineClauses[node.nameKw.text];
261+
if (isTabularStyle(this.cfg)) {
262+
return this.dialectCfg.tabularOnelineClauses[node.nameKw.text];
263+
} else {
264+
return this.dialectCfg.onelineClauses[node.nameKw.text];
265+
}
259266
}
260267

261268
private formatClauseInIndentedStyle(node: ClauseNode) {

src/languages/bigquery/bigquery.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ const reservedClauses = expandPhrases([
3838
'REMOTE WITH CONNECTION',
3939
]);
4040

41-
const onelineClauses = expandPhrases([
41+
const standardOnelineClauses = expandPhrases([
42+
'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',
43+
]);
44+
45+
const tabularOnelineClauses = expandPhrases([
4246
// - create:
4347
// https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
44-
'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',
4548
'CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]',
4649
// - update:
4750
'UPDATE',
@@ -160,7 +163,7 @@ export const bigquery: DialectOptions = {
160163
name: 'bigquery',
161164
tokenizerOptions: {
162165
reservedSelect,
163-
reservedClauses: [...reservedClauses, ...onelineClauses],
166+
reservedClauses: [...reservedClauses, ...tabularOnelineClauses, ...standardOnelineClauses],
164167
reservedSetOperations,
165168
reservedJoins,
166169
reservedPhrases,
@@ -187,7 +190,8 @@ export const bigquery: DialectOptions = {
187190
postProcess,
188191
},
189192
formatOptions: {
190-
onelineClauses,
193+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
194+
tabularOnelineClauses,
191195
},
192196
};
193197

src/languages/db2/db2.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ const reservedClauses = expandPhrases([
3636
'INSERT',
3737
]);
3838

39-
const onelineClauses = expandPhrases([
40-
// - create:
39+
const standardOnelineClauses = expandPhrases([
4140
'CREATE [GLOBAL TEMPORARY | EXTERNAL] TABLE [IF NOT EXISTS]',
41+
]);
42+
43+
const tabularOnelineClauses = expandPhrases([
44+
// - create:
4245
'CREATE [OR REPLACE] VIEW',
4346
// - update:
4447
'UPDATE',
@@ -261,7 +264,7 @@ export const db2: DialectOptions = {
261264
name: 'db2',
262265
tokenizerOptions: {
263266
reservedSelect,
264-
reservedClauses: [...reservedClauses, ...onelineClauses],
267+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
265268
reservedSetOperations,
266269
reservedJoins,
267270
reservedPhrases,
@@ -298,6 +301,7 @@ export const db2: DialectOptions = {
298301
],
299302
},
300303
formatOptions: {
301-
onelineClauses,
304+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
305+
tabularOnelineClauses,
302306
},
303307
};

src/languages/db2i/db2i.formatter.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ const reservedClauses = expandPhrases([
3737
'FOR SYSTEM NAME',
3838
]);
3939

40-
const onelineClauses = expandPhrases([
40+
const standardOnelineClauses = expandPhrases(['CREATE [OR REPLACE] TABLE']);
41+
42+
const tabularOnelineClauses = expandPhrases([
4143
// - create:
42-
'CREATE [OR REPLACE] TABLE',
4344
'CREATE [OR REPLACE] [RECURSIVE] VIEW',
4445
// - update:
4546
'UPDATE',
@@ -157,7 +158,7 @@ export const db2i: DialectOptions = {
157158
name: 'db2i',
158159
tokenizerOptions: {
159160
reservedSelect,
160-
reservedClauses: [...reservedClauses, ...onelineClauses],
161+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
161162
reservedSetOperations,
162163
reservedJoins,
163164
reservedPhrases,
@@ -177,6 +178,7 @@ export const db2i: DialectOptions = {
177178
operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||', '=>'],
178179
},
179180
formatOptions: {
180-
onelineClauses,
181+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
182+
tabularOnelineClauses,
181183
},
182184
};

src/languages/hive/hive.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,12 @@ const reservedClauses = expandPhrases([
4141
'[OVERWRITE] INTO TABLE',
4242
]);
4343

44-
const onelineClauses = expandPhrases([
45-
// - create:
44+
const standardOnelineClauses = expandPhrases([
4645
'CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]',
46+
]);
47+
48+
const tabularOnelineClauses = expandPhrases([
49+
// - create:
4750
'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',
4851
// - update:
4952
'UPDATE',
@@ -86,7 +89,7 @@ export const hive: DialectOptions = {
8689
name: 'hive',
8790
tokenizerOptions: {
8891
reservedSelect,
89-
reservedClauses: [...reservedClauses, ...onelineClauses],
92+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
9093
reservedSetOperations,
9194
reservedJoins,
9295
reservedPhrases,
@@ -100,6 +103,7 @@ export const hive: DialectOptions = {
100103
operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||'],
101104
},
102105
formatOptions: {
103-
onelineClauses,
106+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
107+
tabularOnelineClauses,
104108
},
105109
};

src/languages/mariadb/mariadb.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ const reservedClauses = expandPhrases([
3030
'RETURNING',
3131
]);
3232

33-
const onelineClauses = expandPhrases([
34-
// - create:
33+
const standardOnelineClauses = expandPhrases([
3534
'CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]',
35+
]);
36+
37+
const tabularOnelineClauses = expandPhrases([
38+
// - create:
3639
'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',
3740
// - update:
3841
'UPDATE [LOW_PRIORITY] [IGNORE]',
@@ -269,7 +272,7 @@ export const mariadb: DialectOptions = {
269272
name: 'mariadb',
270273
tokenizerOptions: {
271274
reservedSelect,
272-
reservedClauses: [...reservedClauses, ...onelineClauses],
275+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
273276
reservedSetOperations,
274277
reservedJoins,
275278
reservedPhrases,
@@ -311,6 +314,7 @@ export const mariadb: DialectOptions = {
311314
postProcess,
312315
},
313316
formatOptions: {
314-
onelineClauses,
317+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
318+
tabularOnelineClauses,
315319
},
316320
};

src/languages/mysql/mysql.formatter.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ const reservedClauses = expandPhrases([
2828
'SET',
2929
]);
3030

31-
const onelineClauses = expandPhrases([
31+
const standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY] TABLE [IF NOT EXISTS]']);
32+
33+
const tabularOnelineClauses = expandPhrases([
3234
// - create:
33-
'CREATE [TEMPORARY] TABLE [IF NOT EXISTS]',
3435
'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',
3536
// - update:
3637
'UPDATE [LOW_PRIORITY] [IGNORE]',
@@ -236,7 +237,7 @@ export const mysql: DialectOptions = {
236237
name: 'mysql',
237238
tokenizerOptions: {
238239
reservedSelect,
239-
reservedClauses: [...reservedClauses, ...onelineClauses],
240+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
240241
reservedSetOperations,
241242
reservedJoins,
242243
reservedPhrases,
@@ -280,6 +281,7 @@ export const mysql: DialectOptions = {
280281
postProcess,
281282
},
282283
formatOptions: {
283-
onelineClauses,
284+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
285+
tabularOnelineClauses,
284286
},
285287
};

src/languages/plsql/plsql.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ const reservedClauses = expandPhrases([
3232
'RETURNING',
3333
]);
3434

35-
const onelineClauses = expandPhrases([
36-
// - create:
35+
const standardOnelineClauses = expandPhrases([
3736
'CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE',
37+
]);
38+
39+
const tabularOnelineClauses = expandPhrases([
40+
// - create:
3841
'CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW',
3942
'CREATE MATERIALIZED VIEW',
4043
// - update:
@@ -85,7 +88,7 @@ export const plsql: DialectOptions = {
8588
name: 'plsql',
8689
tokenizerOptions: {
8790
reservedSelect,
88-
reservedClauses: [...reservedClauses, ...onelineClauses],
91+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
8992
reservedSetOperations,
9093
reservedJoins,
9194
reservedPhrases,
@@ -122,7 +125,8 @@ export const plsql: DialectOptions = {
122125
},
123126
formatOptions: {
124127
alwaysDenseOperators: ['@'],
125-
onelineClauses,
128+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
129+
tabularOnelineClauses,
126130
},
127131
};
128132

src/languages/postgresql/postgresql.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ const reservedClauses = expandPhrases([
2929
'RETURNING',
3030
]);
3131

32-
const onelineClauses = expandPhrases([
33-
// - create
32+
const standardOnelineClauses = expandPhrases([
3433
'CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]',
34+
]);
35+
36+
const tabularOnelineClauses = expandPhrases([
37+
// - create
3538
'CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW',
3639
'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',
3740
// - update:
@@ -256,7 +259,7 @@ export const postgresql: DialectOptions = {
256259
name: 'postgresql',
257260
tokenizerOptions: {
258261
reservedSelect,
259-
reservedClauses: [...reservedClauses, ...onelineClauses],
262+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
260263
reservedSetOperations,
261264
reservedJoins,
262265
reservedPhrases,
@@ -364,6 +367,7 @@ export const postgresql: DialectOptions = {
364367
},
365368
formatOptions: {
366369
alwaysDenseOperators: ['::', ':'],
367-
onelineClauses,
370+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
371+
tabularOnelineClauses,
368372
},
369373
};

src/languages/redshift/redshift.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ const reservedClauses = expandPhrases([
2424
'SET',
2525
]);
2626

27-
const onelineClauses = expandPhrases([
28-
// - create:
27+
const standardOnelineClauses = expandPhrases([
2928
'CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]',
29+
]);
30+
31+
const tabularOnelineClauses = expandPhrases([
32+
// - create:
3033
'CREATE [OR REPLACE | MATERIALIZED] VIEW',
3134
// - update:
3235
'UPDATE',
@@ -143,7 +146,7 @@ export const redshift: DialectOptions = {
143146
name: 'redshift',
144147
tokenizerOptions: {
145148
reservedSelect,
146-
reservedClauses: [...reservedClauses, ...onelineClauses],
149+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
147150
reservedSetOperations,
148151
reservedJoins,
149152
reservedPhrases,
@@ -172,6 +175,7 @@ export const redshift: DialectOptions = {
172175
},
173176
formatOptions: {
174177
alwaysDenseOperators: ['::'],
175-
onelineClauses,
178+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
179+
tabularOnelineClauses,
176180
},
177181
};

src/languages/singlestoredb/singlestoredb.formatter.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ const reservedClauses = expandPhrases([
3030
'CREATE [OR REPLACE] [EXTERNAL] FUNCTION',
3131
]);
3232

33-
const onelineClauses = expandPhrases([
34-
// - create:
33+
const standardOnelineClauses = expandPhrases([
3534
'CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]',
35+
]);
36+
37+
const tabularOnelineClauses = expandPhrases([
38+
// - create:
3639
'CREATE VIEW',
3740
// - update:
3841
'UPDATE',
@@ -238,7 +241,7 @@ export const singlestoredb: DialectOptions = {
238241
name: 'singlestoredb',
239242
tokenizerOptions: {
240243
reservedSelect,
241-
reservedClauses: [...reservedClauses, ...onelineClauses],
244+
reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],
242245
reservedSetOperations,
243246
reservedJoins,
244247
reservedPhrases,
@@ -280,6 +283,7 @@ export const singlestoredb: DialectOptions = {
280283
},
281284
formatOptions: {
282285
alwaysDenseOperators: ['::', '::$', '::%'],
283-
onelineClauses,
286+
onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],
287+
tabularOnelineClauses,
284288
},
285289
};

0 commit comments

Comments
 (0)