/// <summary> /// Create a new parsed define item according to its type /// </summary> private ParsedDefine NewParsedDefined(string name, ParseFlag flags, Token token, ParsedAsLike asLike, string left, ParseDefineType type, string tempPrimitiveType, string viewAs, string bufferFor) { // set flags flags |= _context.Scope is ParsedFile ? ParseFlag.FileScope : ParseFlag.LocalScope; switch (type) { case ParseDefineType.Parameter: flags |= ParseFlag.Parameter; break; case ParseDefineType.Buffer: flags |= ParseFlag.Buffer; var newBuffer = new ParsedBuffer(name, token, asLike, left, type, tempPrimitiveType, viewAs, bufferFor, ConvertStringToParsedPrimitiveType(tempPrimitiveType, asLike == ParsedAsLike.Like)) { TargetTable = FindAnyTableByName(bufferFor) }; flags |= !bufferFor.Contains(".") && newBuffer.TargetTable != null && !newBuffer.TargetTable.IsTempTable ? ParseFlag.MissingDbName : 0; newBuffer.Flags = flags; return(newBuffer); } var newDefine = new ParsedDefine(name, token, asLike, left, type, tempPrimitiveType, viewAs, ConvertStringToParsedPrimitiveType(tempPrimitiveType, asLike == ParsedAsLike.Like)) { Flags = flags }; return(newDefine); }
/// <summary> /// Buffers /// </summary> public void Visit(ParsedBuffer pars) { var subString = "?"; var type = CompletionType.TempTable; if (pars.TargetTable != null) { subString = pars.TargetTable.Name; type = pars.TargetTable.IsTempTable ? CompletionType.TempTable : CompletionType.Table; // To code explorer, list buffers and associated tables var parentNode = pars.TargetTable.IsTempTable ? GetExplorerListNode("Temp-tables used", CodeExplorerIconType.TempTableUsed) : GetExplorerListNode("Tables used", CodeExplorerIconType.TableUsed); var newNode = CodeItem.Factory.New(pars.TargetTable.IsTempTable ? CodeExplorerIconType.TempTable : CodeExplorerIconType.Table); newNode.DisplayText = pars.Name; newNode.Flags = pars.Flags; newNode.SubText = null; newNode.DocumentOwner = pars.FilePath; newNode.GoToLine = pars.Line; newNode.GoToColumn = pars.Column; PushToCodeExplorer(parentNode, newNode); } // to completion data var curItem = CompletionItem.Factory.New(type) as TableCompletionItem; if (curItem != null) { if (pars.TargetTable != null) { curItem.ChildSeparator = '.'; curItem.Children = GetTableCompletionItemChildren(curItem, pars.TargetTable.Fields); } curItem.DisplayText = pars.Name; curItem.Flags = pars.Flags; curItem.SubText = subString; PushToAutoCompletion(curItem, pars); } }