/// <summary> /// Defined Temptables /// </summary> public void Visit(ParsedTable pars) { string subStr = string.IsNullOrEmpty(pars.StringLikeTable) ? "" : (pars.LikeTable != null ? @"Like " + pars.LikeTable.Name : @"Like ??"); // to auto completion var parsedTable = new TempTableCompletionItem { DisplayText = pars.Name, Flags = pars.Flags, SubText = subStr, ChildSeparator = '.' }; parsedTable.Children = pars.Fields.Select(field => { var curField = CompletionItem.Factory.New(field.Flags.HasFlag(ParseFlag.Primary) ? CompletionType.FieldPk : CompletionType.Field); curField.DisplayText = field.Name.ConvertCase(Config.Instance.AutoCompleteDatabaseWordCaseMode); curField.ParsedBaseItem = field; curField.FromParser = true; curField.SubText = field.Type.ToString(); curField.Ranking = AutoCompletion.FindRankingOfParsedItem(field.Name); curField.Flags = field.Flags & ~ParseFlag.Primary; curField.ParentItem = parsedTable; return(curField); }).ToList(); PushToAutoCompletion(parsedTable, pars); // to code explorer PushToCodeExplorer( GetExplorerListNode("Defined temp-tables", CodeExplorerIconType.DefinedTempTable), new TempTableCodeItem { DisplayText = pars.Name, Flags = pars.Flags, SubText = subStr, DocumentOwner = pars.FilePath, GoToLine = pars.Line, GoToColumn = pars.Column }); }
/// <summary> /// Defined Temptables /// </summary> public void Visit(ParsedTable pars) { if (!string.IsNullOrEmpty(pars.TempLikeTable)) { pars.LikeTable = FindAnyTableByName(pars.TempLikeTable); } foreach (var field in pars.Fields) { field.PrimitiveType = ConvertStringToParsedPrimitiveType(field.TempPrimitiveType, field.AsLike == ParsedAsLike.Like); } // temp table is LIKE another table? copy fields if (pars.LikeTable != null) { // add the fields of the found table (minus the primary information) foreach (var field in pars.LikeTable.Fields) { pars.Fields.Add( new ParsedField(field.Name, field.TempPrimitiveType, field.Format, field.Order, 0, field.InitialValue, field.Description, field.AsLike) { PrimitiveType = field.PrimitiveType }); } // handles the use-index if (!string.IsNullOrEmpty(pars.UseIndex)) { // add only the indexes that are used foreach (var index in pars.UseIndex.Split(',')) { var foundIndex = pars.LikeTable.Indexes.Find(index2 => index2.Name.EqualsCi(index.Replace("!", ""))); if (foundIndex != null) { pars.Indexes.Add(new ParsedIndex(foundIndex.Name, foundIndex.Flag, foundIndex.FieldsList.ToList())); // if one of the index used is marked as primary if (index.ContainsFast("!")) { pars.Indexes.ForEach(parsedIndex => parsedIndex.Flag &= ~ParsedIndexFlag.Primary); pars.Indexes.Last().Flag |= ParsedIndexFlag.Primary; } } } } else { // if there is no "use index" and we didn't define new indexes, the tt uses the same index as the original table if (pars.Indexes == null || pars.Indexes.Count == 0) { pars.Indexes = pars.LikeTable.Indexes.ToList(); } } } // browse all the indexes and set the according flags to each field of the index foreach (var index in pars.Indexes) { foreach (var fieldName in index.FieldsList) { var foundfield = pars.Fields.Find(field => field.Name.EqualsCi(fieldName.Substring(0, fieldName.Length - 1))); if (foundfield != null) { if (index.Flag.HasFlag(ParsedIndexFlag.Primary)) { foundfield.Flags |= ParseFlag.Primary; } foundfield.Flags |= ParseFlag.Index; } } } string subStr = string.IsNullOrEmpty(pars.TempLikeTable) ? "" : (pars.LikeTable != null ? @"Like " + pars.LikeTable.Name : @"Like ??"); // to auto completion var parsedTable = new TempTableCompletionItem { DisplayText = pars.Name, Flags = pars.Flags, SubText = subStr, ChildSeparator = '.' }; parsedTable.Children = pars.Fields.Select(field => { var curField = CompletionItem.Factory.New(field.Flags.HasFlag(ParseFlag.Primary) ? CompletionType.FieldPk : CompletionType.Field); curField.DisplayText = field.Name.ConvertCase(Config.Instance.AutoCompleteDatabaseWordCaseMode); curField.ParsedBaseItem = field; curField.FromParser = true; curField.SubText = field.PrimitiveType.ToString(); curField.Ranking = AutoCompletion.FindRankingOfParsedItem(field.Name); curField.Flags = field.Flags & ~ParseFlag.Primary; curField.ParentItem = parsedTable; return(curField); }).ToList(); PushToAutoCompletion(parsedTable, pars); // to code explorer PushToCodeExplorer( GetExplorerListNode("Defined temp-tables", CodeExplorerIconType.DefinedTempTable), new TempTableCodeItem { DisplayText = pars.Name, Flags = pars.Flags, SubText = subStr, DocumentOwner = pars.FilePath, GoToLine = pars.Line, GoToColumn = pars.Column }); }