Skip to content

Commit 496514b

Browse files
RaubzeugElena Makarova
andauthored
feat: suggest views and table settings (#864)
Co-authored-by: Elena Makarova <[email protected]>
1 parent a15e87c commit 496514b

File tree

5 files changed

+81
-15
lines changed

5 files changed

+81
-15
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@gravity-ui/paranoid": "^2.0.1",
2222
"@gravity-ui/react-data-table": "^2.1.1",
2323
"@gravity-ui/uikit": "^6.15.0",
24-
"@gravity-ui/websql-autocomplete": "^8.1.0",
24+
"@gravity-ui/websql-autocomplete": "^9.0.0",
2525
"@reduxjs/toolkit": "^2.2.3",
2626
"axios": "^1.6.8",
2727
"colord": "^2.9.3",

src/utils/monaco/yql/constants.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type {YQLEntity} from '@gravity-ui/websql-autocomplete';
2+
13
export const LANGUAGE_YQL_ID = 'yql';
24

35
export const SimpleTypes = [
@@ -714,3 +716,37 @@ export const WindowFunctions = [
714716
export const TableFunction = [];
715717

716718
export const Pragmas = ['TablePathPrefix', 'Warning'];
719+
720+
export const EntitySettings: Record<YQLEntity, string[]> = {
721+
table: [
722+
'AUTO_PARTITIONING_BY_SIZE',
723+
'AUTO_PARTITIONING_PARTITION_SIZE_MB',
724+
'AUTO_PARTITIONING_BY_LOAD',
725+
'AUTO_PARTITIONING_MIN_PARTITIONS_COUNT',
726+
'AUTO_PARTITIONING_MAX_PARTITIONS_COUNT',
727+
'UNIFORM_PARTITIONS',
728+
'READ_REPLICAS_SETTINGS',
729+
'TTL',
730+
'KEY_BLOOM_FILTER',
731+
'STORE',
732+
],
733+
view: ['security_invoker'],
734+
topic: [
735+
'min_active_partitions',
736+
'partition_count_limit',
737+
'retention_period',
738+
'retention_storage_mb',
739+
'partition_write_speed_bytes_per_second',
740+
'partition_write_burst_bytes',
741+
'metering_mode',
742+
],
743+
object: [],
744+
user: [],
745+
group: [],
746+
externalDataSource: [],
747+
externalTable: [],
748+
tableStore: [],
749+
replication: ['ENDPOINT', 'DATABASE', 'USER', 'PASSWORD'],
750+
tableIndex: [],
751+
topicConsumer: ['important', 'read_from'],
752+
};

src/utils/monaco/yql/generateSuggestions.ts

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {AutocompleteEntityType, TAutocompleteEntity} from '../../../types/a
1010

1111
import {
1212
AggregateFunctions,
13+
EntitySettings,
1314
Pragmas,
1415
SimpleFunctions,
1516
SimpleTypes,
@@ -55,13 +56,13 @@ const re = /[\s'"-/@]/;
5556

5657
const suggestionEntityToAutocomplete: Partial<Record<YQLEntity, AutocompleteEntityType[]>> = {
5758
externalDataSource: ['external_data_source'],
59+
externalTable: ['external_table'],
5860
replication: ['replication'],
59-
table: ['table'],
61+
table: ['table', 'column_table'],
6062
tableStore: ['column_store'],
6163
topic: ['pers_queue_group'],
6264
view: ['view'],
63-
//TODO: add after websql-autocomplete support indexex
64-
// index: ['table_index', 'index'],
65+
tableIndex: ['table_index', 'index'],
6566
};
6667

6768
const commonSuggestionEntities: AutocompleteEntityType[] = ['dir', 'unknown'];
@@ -124,13 +125,16 @@ const SuggestionsWeight: Record<SuggestionType, number> = {
124125
suggestEntity: 2,
125126
suggestColumns: 3,
126127
suggestColumnAliases: 4,
127-
suggestKeywords: 5,
128-
suggestAggregateFunctions: 6,
129-
suggestTableFunctions: 7,
130-
suggestWindowFunctions: 8,
131-
suggestFunctions: 9,
132-
suggestUdfs: 10,
133-
suggestSimpleTypes: 11,
128+
suggestTableIndexes: 5,
129+
suggestTableHints: 6,
130+
suggestEntitySettings: 7,
131+
suggestSimpleTypes: 8,
132+
suggestKeywords: 9,
133+
suggestAggregateFunctions: 10,
134+
suggestTableFunctions: 11,
135+
suggestWindowFunctions: 12,
136+
suggestFunctions: 13,
137+
suggestUdfs: 14,
134138
};
135139

136140
function getSuggestionIndex(suggestionType: SuggestionType) {
@@ -152,6 +156,9 @@ async function getAggregateFunctions() {
152156
async function getPragmas() {
153157
return Pragmas;
154158
}
159+
async function getEntitySettings(entityType: YQLEntity) {
160+
return EntitySettings[entityType];
161+
}
155162
async function getUdfs() {
156163
return Udfs;
157164
}
@@ -406,6 +413,20 @@ export async function generatePragmasSuggestion(
406413
sortText: suggestionIndexToWeight(getSuggestionIndex('suggestPragmas')),
407414
}));
408415
}
416+
export async function generateEntitySettingsSuggestion(
417+
rangeToInsertSuggestion: monaco.IRange,
418+
entityType: YQLEntity,
419+
): Promise<monaco.languages.CompletionItem[]> {
420+
const entitySettings = await getEntitySettings(entityType);
421+
return entitySettings.map((el) => ({
422+
label: el,
423+
insertText: el,
424+
kind: CompletionItemKind.Property,
425+
detail: 'Setting',
426+
range: rangeToInsertSuggestion,
427+
sortText: suggestionIndexToWeight(getSuggestionIndex('suggestEntitySettings')),
428+
}));
429+
}
409430

410431
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
411432

src/utils/monaco/yql/yqlSuggestions.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
generateColumnAliasesSuggestion,
77
generateColumnsSuggestion,
88
generateEntitiesSuggestion,
9+
generateEntitySettingsSuggestion,
910
generateKeywordsSuggestion,
1011
generatePragmasSuggestion,
1112
generateSimpleFunctionsSuggestion,
@@ -69,6 +70,7 @@ async function getSuggestions(
6970
let udfsSuggestions: Monaco.languages.CompletionItem[] = [];
7071
let simpleTypesSuggestions: Monaco.languages.CompletionItem[] = [];
7172
let pragmasSuggestions: Monaco.languages.CompletionItem[] = [];
73+
let entitySettingsSuggestions: Monaco.languages.CompletionItem[] = [];
7274

7375
if (parseResult.suggestEntity) {
7476
const entityNamePrefix = getEntityNameAtCursor(model, cursorPosition);
@@ -103,6 +105,12 @@ async function getSuggestions(
103105
if (parseResult.suggestPragmas) {
104106
pragmasSuggestions = await generatePragmasSuggestion(rangeToInsertSuggestion);
105107
}
108+
if (parseResult.suggestEntitySettings) {
109+
entitySettingsSuggestions = await generateEntitySettingsSuggestion(
110+
rangeToInsertSuggestion,
111+
parseResult.suggestEntitySettings,
112+
);
113+
}
106114

107115
const columnAliasSuggestion = await generateColumnAliasesSuggestion(
108116
rangeToInsertSuggestion,
@@ -132,6 +140,7 @@ async function getSuggestions(
132140
...columnsSuggestions,
133141
...keywordsSuggestions,
134142
...aggregateFunctionsSuggestions,
143+
...entitySettingsSuggestions,
135144
];
136145

137146
return suggestions;

0 commit comments

Comments
 (0)