Skip to content

Commit 48ea47a

Browse files
committed
fix: improve dml items
1 parent 587261d commit 48ea47a

File tree

5 files changed

+22
-195
lines changed

5 files changed

+22
-195
lines changed

packages/monaco-plugin-ob/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oceanbase-odc/monaco-plugin-ob",
3-
"version": "1.5.1",
3+
"version": "1.5.2",
44
"description": "",
55
"main": "dist/index.js",
66
"scripts": {

packages/monaco-plugin-ob/src/autoComplete/completionItem.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ export function tableItem(tableName: string, schemaName: string = '', insertSche
3434
}
3535
}
3636

37-
export function tableColumnItem(columnName: string, tableName: string, schemaName: string = '', range: monaco.languages.CompletionItemRanges | monaco.IRange): monaco.languages.CompletionItem {
37+
export function tableColumnItem(columnName: string, tableName: string, schemaName: string = '', range: monaco.languages.CompletionItemRanges | monaco.IRange, autoNext: boolean = true): monaco.languages.CompletionItem {
3838
const tableFullName = [schemaName, tableName].filter(Boolean).join('.');
3939
return {
4040
label: { label: columnName, description: 'Column', detail: ' ' + tableFullName },
4141
range,
4242
insertText: columnName + ' ',
4343
kind: monaco.languages.CompletionItemKind.Field,
44-
command: {id: 'editor.action.triggerSuggest', title: "" },
44+
command: autoNext ? {id: 'editor.action.triggerSuggest', title: "" } : undefined,
4545
sortText: CompletionItemSort.Column
4646
}
4747
}

packages/monaco-plugin-ob/src/oboracle/autoComplete/index.ts

Lines changed: 4 additions & 185 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@ import _package from '../package';
88
import worker from '../worker/workerInstance';
99
import { getCompletionArgs } from '../../autoComplete';
1010

11-
const plsqlDataTypes = [
12-
'PLS_INTEGER', 'BINARY_INTEGER', 'BINARY_FLOAT', 'BINARY_DOUBLE', 'NUMBER', 'DEC', 'DECIMAL', 'NUMERIC', 'DOUBLE PRECISION', 'FLOAT', 'INT', 'INTEGER', 'SMALLINT', 'REAL',
13-
'CHAR', 'VARCHAR2', 'RAW', 'NCHAR', 'NVARCHAR2', 'LONG', 'LONG RAW', 'ROWID', 'UROWID',
14-
'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TIMEZONE_REGION', 'TIMEZONE_ABBR',
15-
'BFILE', 'BLOB', 'CLOB', 'NCLOB'
16-
]
1711

1812
class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
1913
triggerCharacters?: string[] | undefined = ['.'];
@@ -35,7 +29,7 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
3529
return this.getCompleteWordFromOffset(offset, value, delimiter, range, model, triggerCharacter)
3630
}
3731

38-
async getColumnList(model, item, range) {
32+
async getColumnList(model, item, range, autoNext: boolean = true) {
3933
let modelOptions = this.getModelOptions(model.id);
4034
const suggestions: monaco.languages.CompletionItem[] = [];
4135
let columns = await modelOptions?.getTableColumns?.(item.tableName, item.schemaName);
@@ -44,7 +38,7 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
4438
}
4539
if (columns) {
4640
columns.forEach(column => {
47-
suggestions.push(tableColumnItem(column.columnName, item.tableName, item.schemaName, range))
41+
suggestions.push(tableColumnItem(column.columnName, item.tableName, item.schemaName, range, autoNext))
4842
})
4943
}
5044
return suggestions;
@@ -105,14 +99,14 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
10599
suggestions.push(keywordItem(item, range))
106100
} else if (item.type === 'allTables') {
107101
suggestions = suggestions.concat(await this.getTableList(model, item.schema, range));
108-
if (!item.schema) {
102+
if (!item.schema && !item.disableSys) {
109103
/**
110104
* add oracle sys public views
111105
*/
112106
suggestions = suggestions.concat(await this.getTableList(model, 'sys', range));
113107
}
114108
} else if (item.type === 'tableColumns') {
115-
suggestions = suggestions.concat(await this.getColumnList(model, item, range));
109+
suggestions = suggestions.concat(await this.getColumnList(model, item, range, item.autoNext !== false));
116110
} else if (item.type === 'withTable') {
117111
suggestions.push(tableItem(item.tableName, 'CTE', false, range))
118112
} else if (item.type === 'allSchemas') {
@@ -152,181 +146,6 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
152146
suggestions: [],
153147
incomplete: false
154148
}
155-
// console.time('getToken')
156-
// const tokens = await parser.getOffsetLeftTokens(input, delimiter, offset);
157-
// console.timeEnd('getToken')
158-
// const autoComplte = new AutoComplete(getContext(), input, offset, tokens)
159-
// const matchContext = autoComplte.match();
160-
// if (!matchContext) {
161-
// return {
162-
// suggestions: [],
163-
// incomplete: false
164-
// }
165-
// }
166-
// let suggestions: monaco.languages.CompletionItem[] = [];
167-
// let modelOptions = this.getModelOptions(model.id);
168-
// for (let word of matchContext.completeWords) {
169-
// switch (word) {
170-
// case completeToken.COMPLETE_TOKEN_TABLES: {
171-
// let tables = await modelOptions?.getTableList?.();
172-
// if (tables) {
173-
// suggestions = suggestions.concat(
174-
// tables.map(table => ({
175-
// label: table,
176-
// kind: monaco.languages.CompletionItemKind.Struct,
177-
// detail: 'TABLE',
178-
// insertText: table,
179-
// range
180-
// }))
181-
// )
182-
// }
183-
// break;
184-
// }
185-
// case completeToken.COMPLETE_TOKEN_VIEWS: {
186-
// let views = await modelOptions?.getViewList?.();
187-
// if (views) {
188-
// suggestions = suggestions.concat(
189-
// views.map(view => ({
190-
// label: view,
191-
// kind: monaco.languages.CompletionItemKind.Variable,
192-
// detail: 'VIEW',
193-
// insertText: view,
194-
// range
195-
// }))
196-
// )
197-
// }
198-
// break;
199-
// }
200-
// case completeToken.COMPLETE_TOKEN_FUNCTIONS: {
201-
// if (functions) {
202-
// suggestions = suggestions.concat(
203-
// functions.map(func => {
204-
// const params = func.params?.map((param, index) => `${'$'}{${index + 1}:${typeof param === 'string' ? param : param.name}}`).join(', ') || ''
205-
// const paramsDocument = func.params?.map((param, index) => `${typeof param === 'string' ? param : param.name}`).join(', ') || ''
206-
// return {
207-
// label: func.name,
208-
// kind: monaco.languages.CompletionItemKind.Function,
209-
// detail: func.desc,
210-
// documentation: `${func.name}(${paramsDocument})`,
211-
// insertText: `${func.name}(${params})`,
212-
// insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
213-
// range
214-
// }
215-
// })
216-
// )
217-
// }
218-
// break;
219-
// }
220-
// case completeToken.COMPLETE_TOKEN_PROCEDURES: {
221-
// let procedures = await modelOptions?.getProcedure?.();
222-
// if (procedures) {
223-
// suggestions = suggestions.concat(
224-
// procedures.map(pro => ({
225-
// label: pro,
226-
// kind: monaco.languages.CompletionItemKind.Variable,
227-
// detail: 'PROCEDURE',
228-
// insertText: pro,
229-
// range
230-
// }))
231-
// )
232-
// }
233-
// break;
234-
// }
235-
// case completeToken.COMPLETE_TOKEN_PKG: {
236-
// let userPkgs = await modelOptions?.getPkgs?.() || [];
237-
// const systemPkgs = _package;
238-
// let pkgs = systemPkgs.concat(userPkgs);
239-
// if (pkgs) {
240-
// suggestions = suggestions.concat(
241-
// pkgs.map(pkg => ({
242-
// label: pkg,
243-
// kind: monaco.languages.CompletionItemKind.Variable,
244-
// detail: 'PACKAGE',
245-
// insertText: pkg,
246-
// range
247-
// }))
248-
// )
249-
// }
250-
// break;
251-
// }
252-
// case completeToken.COMPLETE_TOKEN_DATATYPES: {
253-
// let types = await modelOptions?.getDataTypes?.();
254-
// if (types) {
255-
// suggestions = suggestions.concat(
256-
// types.map(type => ({
257-
// label: type,
258-
// kind: monaco.languages.CompletionItemKind.Enum,
259-
// insertText: type,
260-
// range
261-
// }))
262-
// )
263-
// }
264-
// break;
265-
// }
266-
// case completeToken.COMPLETE_TOKEN_FROM_TABLES: {
267-
// /**
268-
// * 需要依靠解析
269-
// */
270-
// const parser = worker.parser;
271-
// const { tables } = await parser.getAllFromTable(input, delimiter, offset);
272-
// const names = new Set<string>(tables?.map(t => {
273-
// if (t.alias) {
274-
// return t.alias;
275-
// }
276-
// return [t.schema, t.name].filter(Boolean).join('.')
277-
// }));
278-
// if (names?.size) {
279-
// suggestions = suggestions.concat(
280-
// Array.from(names).map(name => ({
281-
// label: name,
282-
// kind: monaco.languages.CompletionItemKind.Field,
283-
// insertText: name,
284-
// range
285-
// }))
286-
// )
287-
// }
288-
// break;
289-
// }
290-
// case completeToken.COMPLETE_TOKEN_PLDATATYPES: {
291-
// suggestions = suggestions.concat(
292-
// plsqlDataTypes.map(type => ({
293-
// label: type,
294-
// kind: monaco.languages.CompletionItemKind.Enum,
295-
// insertText: type,
296-
// range
297-
// }))
298-
// )
299-
// break;
300-
// }
301-
// case completeToken.COMPLETE_TOKEN_TABLE_COLUMNS: {
302-
// const columns = await modelOptions?.getTableColumns?.('table1');
303-
// if (columns) {
304-
// suggestions = suggestions.concat(
305-
// columns.map(column => ({
306-
// label: column.columnName,
307-
// kind: monaco.languages.CompletionItemKind.Field,
308-
// detail: column.columnType,
309-
// insertText: column.columnName,
310-
// range
311-
// }))
312-
// )
313-
// }
314-
// break;
315-
// }
316-
// default: {
317-
// suggestions.push({
318-
// label: word,
319-
// kind: monaco.languages.CompletionItemKind.Keyword,
320-
// insertText: word + ' ',
321-
// range
322-
// })
323-
// }
324-
// }
325-
// }
326-
// return {
327-
// suggestions,
328-
// incomplete: true
329-
// }
330149
}
331150
}
332151

packages/monaco-plugin-ob/src/oboracle/worker/parser.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,13 @@ export default {
219219
type: 'allSchemas'
220220
})
221221
completions.push({
222-
type: 'allTables'
222+
type: 'allTables',
223+
disableSys: true
223224
})
224225
} else {
225226
completions.push({
226227
type: 'tableColumns',
228+
autoNext: false,
227229
tableName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).tableName,
228230
schemaName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).schema
229231
})
@@ -236,13 +238,15 @@ export default {
236238
type: 'allSchemas'
237239
})
238240
completions.push({
239-
type: 'allTables'
241+
type: 'allTables',
242+
disableSys: true
240243
})
241244
} else {
242245
completions.push({
243246
type: 'tableColumns',
244-
tableName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).tableName,
245-
schemaName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).schema
247+
autoNext: false,
248+
tableName: getSchemaAndTableNameFromText(result.updateStmt.table.getText()).tableName,
249+
schemaName: getSchemaAndTableNameFromText(result.updateStmt.table.getText()).schema
246250
})
247251
}
248252
return completions;
@@ -253,13 +257,15 @@ export default {
253257
type: 'allSchemas'
254258
})
255259
completions.push({
256-
type: 'allTables'
260+
type: 'allTables',
261+
disableSys: true
257262
})
258263
} else {
259264
completions.push({
260265
type: 'tableColumns',
261-
tableName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).tableName,
262-
schemaName: getSchemaAndTableNameFromText(result.insertStmt.table.getText()).schema
266+
autoNext: false,
267+
tableName: getSchemaAndTableNameFromText(result.deleteStmt.table.getText()).tableName,
268+
schemaName: getSchemaAndTableNameFromText(result.deleteStmt.table.getText()).schema
263269
})
264270
}
265271
return completions;

packages/monaco-plugin-ob/src/types/autoCompletion.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface CompletionAllTables {
22
type: 'allTables';
33
schema?: string;
4+
disableSys?: boolean;
45
}
56

67
export interface CompletionAllSchemas {
@@ -20,6 +21,7 @@ export interface CompletionTableColumns {
2021
type: 'tableColumns';
2122
schemaName?: string;
2223
tableName: string;
24+
autoNext?: boolean;
2325
}
2426

2527
export interface CompletionObjectAccess {

0 commit comments

Comments
 (0)