@@ -11,17 +11,47 @@ let intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
1111 } ,
1212} ) ;
1313
14+ /** 根据不同的数据库,插入不同的表名 */
15+ const handleInsertText = ( text , databaseCode : DatabaseTypeCode = DatabaseTypeCode . MYSQL ) => {
16+ if (
17+ [
18+ DatabaseTypeCode . POSTGRESQL ,
19+ DatabaseTypeCode . ORACLE ,
20+ DatabaseTypeCode . DB2 ,
21+ DatabaseTypeCode . SQLITE ,
22+ ] . includes ( databaseCode )
23+ ) {
24+ return `\"${ text } \"` ;
25+ } else if ( [ DatabaseTypeCode . SQLSERVER ] . includes ( databaseCode ) ) {
26+ return `[${ text } ]` ;
27+ } else if ( [ DatabaseTypeCode . MYSQL ] . includes ( databaseCode ) ) {
28+ return `\`${ text } \`` ;
29+ } else {
30+ return `${ text } ` ;
31+ }
32+ } ;
33+
34+ function checkTableContext ( text ) {
35+ const normalizedText = text . trim ( ) . toUpperCase ( ) ;
36+ const tableKeywords = [ 'FROM' , 'JOIN' , 'INNER JOIN' , 'LEFT JOIN' , 'RIGHT JOIN' , 'UPDATE' ] ;
37+
38+ for ( const keyword of tableKeywords ) {
39+ if ( normalizedText . endsWith ( keyword ) ) {
40+ return true ;
41+ }
42+ }
43+
44+ return false ;
45+ }
46+
1447const registerIntelliSenseTable = (
1548 tableList : Array < { name : string ; comment : string } > ,
1649 databaseCode ?: DatabaseTypeCode ,
1750 dataSourceId ?: number ,
1851 databaseName ?: string ,
1952 schemaName ?: string ,
2053) => {
21- monaco . editor . registerCommand ( 'myCustomCommand' , ( _ : any , ...args : any [ ] ) => {
22- // access the arguments here
23- console . log ( 'trigger suggest' , args [ 0 ] ) ;
24- // addIntelliSenseField(tableName)
54+ monaco . editor . registerCommand ( 'addFieldList' , ( _ : any , ...args : any [ ] ) => {
2555 addIntelliSenseField ( args [ 0 ] ) ;
2656 return ;
2757 } ) ;
@@ -30,13 +60,15 @@ const registerIntelliSenseTable = (
3060 intelliSenseTable = monaco . languages . registerCompletionItemProvider ( 'sql' , {
3161 triggerCharacters : [ ' ' ] ,
3262 provideCompletionItems : ( model , position ) => {
33- const handleInsertText = ( text ) => {
34- if ( databaseCode === DatabaseTypeCode . POSTGRESQL ) {
35- return `${ text } ` ;
36- } else {
37- return `${ text } ` ;
38- }
39- } ;
63+ const lineContentUntilPosition = model . getValueInRange ( {
64+ startLineNumber : position . lineNumber ,
65+ startColumn : 1 ,
66+ endLineNumber : position . lineNumber ,
67+ endColumn : position . column ,
68+ } ) ;
69+
70+ const isTableContext = checkTableContext ( lineContentUntilPosition ) ;
71+
4072 return {
4173 suggestions : ( tableList || [ ] ) . map ( ( tableName ) => {
4274 return {
@@ -46,12 +78,13 @@ const registerIntelliSenseTable = (
4678 description : '表名' ,
4779 } ,
4880 kind : monaco . languages . CompletionItemKind . Variable ,
49- insertText : handleInsertText ( tableName . name ) ,
81+ insertText : handleInsertText ( tableName . name , databaseCode ) ,
5082 // range: monaco.Range.fromPositions(position),
51- documentation : tableName . comment ,
83+ // documentation: tableName.comment,
84+ sortText : ( isTableContext ? '01' : '02' ) + tableName . name ,
5285 command : {
53- id : 'myCustomCommand ' ,
54- title : 'operator_additional_suggestions ' ,
86+ id : 'addFieldList ' ,
87+ title : 'addFieldList ' ,
5588 arguments : [
5689 {
5790 tableName : tableName . name ,
0 commit comments