Line data Source code
1 : import * as dashql from '@ankoh/dashql-core';
2 :
3 : type ProfileOperatorKind = dashql.buffers.profile.ProfileOperatorKind;
4 1 : const Kind = dashql.buffers.profile.ProfileOperatorKind;
5 :
6 : /// The symbols of the engine-neutral operator kinds, kinds without a symbol render their type name
7 1 : const OPERATOR_SYMBOLS: ReadonlyMap<ProfileOperatorKind, string> = new Map([
8 1 : [Kind.OUTPUT, 'relalg_output'],
9 1 : [Kind.SCAN, 'relalg_scan'],
10 1 : [Kind.EXPLICIT_SCAN, 'relalg_explicit_scan'],
11 1 : [Kind.VIRTUAL_TABLE, 'relalg_virtual_table'],
12 1 : [Kind.TABLE_CONSTRUCTION, 'relalg_table_construction'],
13 1 : [Kind.TABLE_FUNCTION, 'relalg_table_function'],
14 1 : [Kind.FILTER, 'relalg_select'],
15 1 : [Kind.PROJECT, 'relalg_map'],
16 1 : [Kind.AGGREGATE, 'relalg_group'],
17 1 : [Kind.WINDOW, 'relalg_window'],
18 1 : [Kind.SORT, 'relalg_sort'],
19 1 : [Kind.LIMIT, 'relalg_limit'],
20 1 : [Kind.JOIN, 'relalg_join'],
21 1 : [Kind.LEFT_OUTER_JOIN, 'relalg_left_outer_join'],
22 1 : [Kind.RIGHT_OUTER_JOIN, 'relalg_right_outer_join'],
23 1 : [Kind.FULL_OUTER_JOIN, 'relalg_full_outer_join'],
24 1 : [Kind.LEFT_SEMI_JOIN, 'relalg_left_semi_join'],
25 1 : [Kind.RIGHT_SEMI_JOIN, 'relalg_right_semi_join'],
26 1 : [Kind.LEFT_ANTI_JOIN, 'relalg_left_anti_join'],
27 1 : [Kind.RIGHT_ANTI_JOIN, 'relalg_right_anti_join'],
28 1 : [Kind.LEFT_MARK_JOIN, 'relalg_left_mark_join'],
29 1 : [Kind.RIGHT_MARK_JOIN, 'relalg_right_mark_join'],
30 1 : [Kind.UNION_ALL, 'relalg_union_all'],
31 1 : [Kind.UNION, 'relalg_union'],
32 1 : [Kind.INTERSECT_ALL, 'relalg_intersect_all'],
33 1 : [Kind.INTERSECT, 'relalg_intersect'],
34 1 : [Kind.EXCEPT_ALL, 'relalg_except_all'],
35 1 : [Kind.EXCEPT, 'relalg_except'],
36 1 : [Kind.ITERATION, 'relalg_iteration'],
37 1 : [Kind.ITERATION_INCREMENT, 'relalg_iteration_increment'],
38 1 : [Kind.INSERT, 'relalg_insert'],
39 1 : [Kind.EXCHANGE, 'relalg_exchange'],
40 1 : [Kind.GATHER_EXCHANGE, 'relalg_gather'],
41 1 : [Kind.REPARTITION_EXCHANGE, 'relalg_exchange'],
42 1 : [Kind.BROADCAST_EXCHANGE, 'relalg_broadcast'],
43 1 : [Kind.REMOTE_EXCHANGE, 'relalg_remote_exchange'],
44 1 : ]);
45 :
46 : export const PROFILE_OPERATOR_SYMBOL_SIZE = 18;
47 :
48 1 : export function getProfileOperatorSymbol(kind: ProfileOperatorKind): string | null {
49 1 : return OPERATOR_SYMBOLS.get(kind) ?? null;
50 1 : }
51 :
52 : /// Render the symbol instead of the label? Only if the label is just the type name.
53 : /// The core sizes these operators for the symbol (`symbolWidth` of the layout config).
54 1 : export function shouldRenderProfileOperatorSymbol(kind: ProfileOperatorKind, typeName: string | null, label: string): boolean {
55 1 : return typeName != null && label === typeName && getProfileOperatorSymbol(kind) != null;
56 1 : }
|