示例#1
0
        /// <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
            });
        }
示例#2
0
        /// <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
            });
        }