diff --git a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/AutoCompleteHelper.cs b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/AutoCompleteHelper.cs index c5dcda22..1dda2929 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/AutoCompleteHelper.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/AutoCompleteHelper.cs @@ -754,6 +754,15 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices starObjectIdentifier = (SqlObjectIdentifier)selectStarExpression.Children.ElementAt(0); } + /* + Returning no suggestions when the bound tables are null. + This happens when there are no existing connections for the script. + */ + if (selectStarExpression.BoundTables == null) + { + return null; + } + List boundedTableList = selectStarExpression.BoundTables.ToList(); IList columnNames = new List(); @@ -829,11 +838,11 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices public static SqlSelectStarExpression TryGetSelectStarStatement(SqlCodeObject currentNode, ScriptDocumentInfo scriptDocumentInfo) { - if(currentNode == null || scriptDocumentInfo == null) + if (currentNode == null || scriptDocumentInfo == null) { return null; } - + // Checking if the current node is a sql select star expression. if (currentNode is SqlSelectStarExpression) { diff --git a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs index 60d02042..9b2dbc21 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/LanguageServices/LanguageService.cs @@ -947,18 +947,18 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices { try { - // parse current SQL file contents to retrieve a list of errors - ParseResult parseResult = Parser.IncrementalParse( - scriptFile.Contents, - parseInfo.ParseResult, - this.DefaultParseOptions); + // parse current SQL file contents to retrieve a list of errors + ParseResult parseResult = Parser.IncrementalParse( + scriptFile.Contents, + parseInfo.ParseResult, + this.DefaultParseOptions); parseInfo.ParseResult = parseResult; } catch (Exception e) { - // Log the exception but don't rethrow it to prevent parsing errors from crashing SQL Tools Service - Logger.Write(TraceEventType.Error, string.Format("An unexpected error occured while parsing: {0}", e.ToString())); + // Log the exception but don't rethrow it to prevent parsing errors from crashing SQL Tools Service + Logger.Write(TraceEventType.Error, string.Format("An unexpected error occured while parsing: {0}", e.ToString())); } }, ConnectedBindingQueue.QueueThreadStackSize); parseThread.Start(); @@ -1658,12 +1658,18 @@ namespace Microsoft.SqlTools.ServiceLayer.LanguageServices // cache the current script parse info object to resolve completions later this.currentCompletionParseInfo = scriptParseInfo; resultCompletionItems = result.CompletionItems; - - // Expanding star expressions in query - CompletionItem[] starExpansionSuggestion = AutoCompleteHelper.ExpandSqlStarExpression(scriptDocumentInfo); - if (starExpansionSuggestion != null) + + /* + Expanding star expressions in query only when the script is connected to a database + as the parser requires a connection to determine column names + */ + if (connInfo != null) { - return starExpansionSuggestion; + CompletionItem[] starExpansionSuggestion = AutoCompleteHelper.ExpandSqlStarExpression(scriptDocumentInfo); + if (starExpansionSuggestion != null) + { + return starExpansionSuggestion; + } } // if there are no completions then provide the default list