mirror of
				https://github.com/Fabio286/antares.git
				synced 2025-06-05 21:59:22 +02:00 
			
		
		
		
	feat: sql suggestions in query editor
This commit is contained in:
		| @@ -7,20 +7,9 @@ | ||||
| <script> | ||||
|  | ||||
| import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; | ||||
| import { completionItemProvider } from '@/suggestions/sql'; | ||||
|  | ||||
| monaco.languages.registerCompletionItemProvider('sql', { | ||||
|    provideCompletionItems: () => { | ||||
|       const suggestions = [// TODO: complete in a separate file | ||||
|          { | ||||
|             label: 'SELECT', | ||||
|             kind: monaco.languages.CompletionItemKind.Keyword, | ||||
|             insertText: 'SELECT' | ||||
|          } | ||||
|       ]; | ||||
|  | ||||
|       return { suggestions }; | ||||
|    } | ||||
| }); | ||||
| monaco.languages.registerCompletionItemProvider('sql', completionItemProvider(monaco)); | ||||
|  | ||||
| export default { | ||||
|    name: 'QueryEditor', | ||||
| @@ -42,9 +31,9 @@ export default { | ||||
|             enabled: false | ||||
|          }, | ||||
|          contextmenu: false, | ||||
|          wordBasedSuggestions: true, | ||||
|          acceptSuggestionOnEnter: 'smart', | ||||
|          quickSuggestions: true, | ||||
|          wordBasedSuggestions: true | ||||
|          quickSuggestions: true | ||||
|       }); | ||||
|  | ||||
|       this.editor.onDidChangeModelContent(e => { | ||||
|   | ||||
| @@ -33,6 +33,8 @@ | ||||
|     "blob": darkorchid, | ||||
|     "mediumblob": darkorchid, | ||||
|     "longblob": darkorchid, | ||||
|     "enum": gold, | ||||
|     "set": gold, | ||||
|     "unknown": gray, | ||||
|   ) | ||||
| ); | ||||
|   | ||||
| @@ -106,6 +106,13 @@ body { | ||||
|  | ||||
| .tab { | ||||
|   border-color: #272727; | ||||
|  | ||||
|   .tab-item { | ||||
|     .btn-clear { | ||||
|       margin-top: -0.1rem; | ||||
|       font-size: 0.6rem; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| .panel { | ||||
|   | ||||
							
								
								
									
										12
									
								
								src/renderer/suggestions/sql.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/renderer/suggestions/sql.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| import { functions } from '@/suggestions/sql/sql-functions'; | ||||
| import { keywords } from '@/suggestions/sql/sql-keywords'; | ||||
| import { operators } from '@/suggestions/sql/sql-operators'; | ||||
| import { variables } from '@/suggestions/sql/sql-variables'; | ||||
|  | ||||
| export const completionItemProvider = (monaco) => { | ||||
|    return { | ||||
|       provideCompletionItems () { | ||||
|          return { suggestions: [...functions(monaco), ...keywords(monaco), ...operators(monaco), ...variables(monaco)] }; | ||||
|       } | ||||
|    }; | ||||
| }; | ||||
							
								
								
									
										1267
									
								
								src/renderer/suggestions/sql/sql-functions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1267
									
								
								src/renderer/suggestions/sql/sql-functions.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4547
									
								
								src/renderer/suggestions/sql/sql-keywords.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4547
									
								
								src/renderer/suggestions/sql/sql-keywords.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										142
									
								
								src/renderer/suggestions/sql/sql-operators.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								src/renderer/suggestions/sql/sql-operators.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| export const operators = (monaco) => { | ||||
|    return [{ | ||||
|       label: 'ALL', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'ALL' | ||||
|    }, | ||||
|    { | ||||
|       label: 'AND', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'AND' | ||||
|    }, | ||||
|    { | ||||
|       label: 'ANY', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'ANY' | ||||
|    }, | ||||
|    { | ||||
|       label: 'BETWEEN', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'BETWEEN' | ||||
|    }, | ||||
|    { | ||||
|       label: 'EXISTS', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'EXISTS' | ||||
|    }, | ||||
|    { | ||||
|       label: 'IN', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'IN' | ||||
|    }, | ||||
|    { | ||||
|       label: 'LIKE', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'LIKE' | ||||
|    }, | ||||
|    { | ||||
|       label: 'NOT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'NOT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'OR', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'OR' | ||||
|    }, | ||||
|    { | ||||
|       label: 'SOME', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'SOME' | ||||
|    }, | ||||
|    { | ||||
|       label: 'EXCEPT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'EXCEPT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'INTERSECT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'INTERSECT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'UNION', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'UNION' | ||||
|    }, | ||||
|    { | ||||
|       label: 'APPLY', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'APPLY' | ||||
|    }, | ||||
|    { | ||||
|       label: 'CROSS', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'CROSS' | ||||
|    }, | ||||
|    { | ||||
|       label: 'FULL', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'FULL' | ||||
|    }, | ||||
|    { | ||||
|       label: 'INNER', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'INNER' | ||||
|    }, | ||||
|    { | ||||
|       label: 'JOIN', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'JOIN' | ||||
|    }, | ||||
|    { | ||||
|       label: 'LEFT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'LEFT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'OUTER', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'OUTER' | ||||
|    }, | ||||
|    { | ||||
|       label: 'RIGHT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'RIGHT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'CONTAINS', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'CONTAINS' | ||||
|    }, | ||||
|    { | ||||
|       label: 'FREETEXT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'FREETEXT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'IS', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'IS' | ||||
|    }, | ||||
|    { | ||||
|       label: 'NULL', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'NULL' | ||||
|    }, | ||||
|    { | ||||
|       label: 'PIVOT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'PIVOT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'UNPIVOT', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'UNPIVOT' | ||||
|    }, | ||||
|    { | ||||
|       label: 'MATCHED', | ||||
|       kind: monaco.languages.CompletionItemKind.Operator, | ||||
|       insertText: 'MATCHED' | ||||
|    }]; | ||||
| }; | ||||
							
								
								
									
										172
									
								
								src/renderer/suggestions/sql/sql-variables.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								src/renderer/suggestions/sql/sql-variables.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,172 @@ | ||||
| export const variables = (monaco) => { | ||||
|    return [{ | ||||
|       label: '@@DATEFIRST', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@DATEFIRST' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@DBTS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@DBTS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@LANGID', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@LANGID' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@LANGUAGE', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@LANGUAGE' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@LOCK_TIMEOUT', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@LOCK_TIMEOUT' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@MAX_CONNECTIONS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@MAX_CONNECTIONS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@MAX_PRECISION', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@MAX_PRECISION' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@NESTLEVEL', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@NESTLEVEL' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@OPTIONS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@OPTIONS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@REMSERVER', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@REMSERVER' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@SERVERNAME', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@SERVERNAME' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@SERVICENAME', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@SERVICENAME' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@SPID', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@SPID' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TEXTSIZE', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TEXTSIZE' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@VERSION', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@VERSION' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@CURSOR_ROWS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@CURSOR_ROWS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@FETCH_STATUS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@FETCH_STATUS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@DATEFIRST', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@DATEFIRST' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@PROCID', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@PROCID' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@ERROR', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@ERROR' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@IDENTITY', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@IDENTITY' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@ROWCOUNT', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@ROWCOUNT' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TRANCOUNT', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TRANCOUNT' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@CONNECTIONS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@CONNECTIONS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@CPU_BUSY', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@CPU_BUSY' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@IDLE', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@IDLE' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@IO_BUSY', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@IO_BUSY' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@PACKET_ERRORS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@PACKET_ERRORS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@PACK_RECEIVED', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@PACK_RECEIVED' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@PACK_SENT', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@PACK_SENT' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TIMETICKS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TIMETICKS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TOTAL_ERRORS', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TOTAL_ERRORS' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TOTAL_READ', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TOTAL_READ' | ||||
|    }, | ||||
|    { | ||||
|       label: '@@TOTAL_WRITE', | ||||
|       kind: monaco.languages.CompletionItemKind.Variable, | ||||
|       insertText: '@@TOTAL_WRITE' | ||||
|    }]; | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user