private void AddDDL()
        {
            ExplorerItem item = this._node.ExplorerItem;

            if (item.SupportsDDLEditing)
            {
                this._schemaName = "dbo";
                ExplorerItemNode parent = this._node.Parent.Parent as ExplorerItemNode;
                if ((parent != null) && (parent.ExplorerItem.Kind == ExplorerItemKind.Schema))
                {
                    this._schemaName = parent.ExplorerItem.SqlName ?? (parent.ExplorerItem.DragText ?? parent.ExplorerItem.Text);
                }
                this._constructName = (item.Icon == ExplorerIcon.StoredProc) ? "PROCEDURE" : ((item.Icon == ExplorerIcon.View) ? "View" : "FUNCTION");
                string str = (item.Icon == ExplorerIcon.StoredProc) ? "Stored Proc" : "Function";
                if (this.Items.Count > 0)
                {
                    this.Items.Add("-");
                }
                this.Items.Add("Edit " + str + " Definition", null, delegate(object sender, EventArgs e) {
                    NewQueryArgs args = new NewQueryArgs(new Func <string>(this.SpHelpText))
                    {
                        Language  = 8,
                        QueryName = "(" + item.SqlName + ")"
                    };
                    this._tree.OnNewQuery(args);
                });
                this.Items.Add("Drop " + str, null, delegate(object sender, EventArgs e) {
                    if (MessageBox.Show("Drop " + item.SqlName + " - are you sure?", "LINQPad", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        this.DropObject();
                    }
                });
            }
        }
        public ExplorerItemContextMenu(SchemaTree tree, ExplorerItemNode node)
        {
            this._tree = tree;
            this._node = node;
            this._item = node.ExplorerItem;
            string dragText = node.ExplorerItem.DragText;

            if (string.IsNullOrEmpty(dragText))
            {
                dragText = node.Text;
            }
            if (this._item.Children != null)
            {
            }
            bool flag = (CS$ < > 9__CachedAnonymousMethodDelegate5 == null) && this._item.Children.Any <ExplorerItem>(CS$ < > 9__CachedAnonymousMethodDelegate5);

            if (((this._item.Icon == ExplorerIcon.StoredProc) || (this._item.Icon == ExplorerIcon.ScalarFunction)) || (this._item.Icon == ExplorerIcon.TableFunction))
            {
                string        paramQuery   = dragText = dragText + (!flag ? "()" : " (...)");
                QueryLanguage exprLanguage = UserOptions.Instance.IsVBDefault ? QueryLanguage.VBExpression : QueryLanguage.Expression;
                this.Items.Add(paramQuery, null, delegate(object sender, EventArgs e) {
                    NewQueryArgs args = new NewQueryArgs(paramQuery, new QueryLanguage?(exprLanguage))
                    {
                        ShowParams = true
                    };
                    tree.OnNewQuery(args);
                });
                if (this._item.Icon != ExplorerIcon.TableFunction)
                {
                    this.AddDDL();
                    return;
                }
            }
            IEnumerable <string> columnNames = from n in node.Nodes.OfType <ExplorerItemNode>()
                                               where (n.ExplorerItem.Kind == ExplorerItemKind.Property) && !string.IsNullOrEmpty(n.DragText)
                                               select n.DragText;

            QueryableMenuHelper.AddQueryableItems(tree, node, this, dragText, columnNames);
            this.AddDDL();
        }
Exemple #3
0
        public static void AddQueryableItems(SchemaTree tree, BaseNode node, ContextMenuStrip menu, string memberStem, IEnumerable <string> columnNames)
        {
            EventHandler  onClick  = null;
            EventHandler  handler2 = null;
            EventHandler  handler3 = null;
            EventHandler  handler4 = null;
            string        compQueryBase;
            bool          isVBDefault  = UserOptions.Instance.IsVBDefault;
            QueryLanguage exprLanguage = isVBDefault ? QueryLanguage.VBExpression : QueryLanguage.Expression;
            string        take100Query = memberStem + ".Take (100)";

            menu.Items.Add(take100Query, null, (sender, e) => tree.OnNewQuery(new NewQueryArgs(take100Query, new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))));
            string takeQuery = memberStem + ".Take (" + (UserOptions.Instance.ResultsInGrids ? "1000" : "...") + ")";

            menu.Items.Add(takeQuery, null, (sender, e) => tree.OnNewQuery(new NewQueryArgs(takeQuery, new QueryLanguage?(exprLanguage), UserOptions.Instance.ResultsInGrids && !memberStem.Contains("..."))));
            if (UserOptions.Instance.ResultsInGrids)
            {
                string takeBigQuery = memberStem + ".Take (50000)";
                menu.Items.Add(takeBigQuery, null, (sender, e) => tree.OnNewQuery(new NewQueryArgs(takeBigQuery, new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))));
            }
            string countQuery = memberStem + ".Count()";

            menu.Items.Add(countQuery, null, (sender, e) => tree.OnNewQuery(new NewQueryArgs(countQuery, new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))));
            string iterationVar = memberStem.Substring(0, 1).ToLowerInvariant();

            if (!isVBDefault)
            {
                string whereQuery = memberStem + ".Where (" + iterationVar + " => ";
                menu.Items.Add(whereQuery + "...)", null, delegate(object sender, EventArgs e) {
                    NewQueryArgs args = new NewQueryArgs(whereQuery + iterationVar + (memberStem.Contains("...") ? "" : ".…)"), new QueryLanguage?(exprLanguage))
                    {
                        ListMembers = true
                    };
                    tree.OnNewQuery(args);
                });
            }
            if (isVBDefault)
            {
                compQueryBase = "From " + iterationVar + " In " + memberStem + " _\nWhere ... _\nSelect ";
            }
            else
            {
                compQueryBase = "from " + iterationVar + " in " + memberStem + "\nwhere ... \nselect ";
            }
            string simpleCompQuery = compQueryBase + iterationVar;

            menu.Items.Add(simpleCompQuery.Replace("\n", " "), null, delegate(object sender, EventArgs e) {
                NewQueryArgs args = new NewQueryArgs(simpleCompQuery, new QueryLanguage?(exprLanguage))
                {
                    ListMembers = true
                };
                tree.OnNewQuery(args);
            });
            simpleCompQuery = simpleCompQuery.Replace("here ...", "here " + (memberStem.Contains("...") ? "" : (iterationVar + ".…")));
            string str = compQueryBase + "new { <all columns> }";

            if (!(!columnNames.Any <string>() || isVBDefault))
            {
                menu.Items.Add(str.Replace("\n", " "), null, delegate(object sender, EventArgs e) {
                    StringBuilder builder = new StringBuilder(compQueryBase.Replace("here ...", "here " + (memberStem.Contains("...") ? "" : (iterationVar + ".…"))) + "new\n{\n");
                    foreach (string str in columnNames)
                    {
                        if (!string.IsNullOrEmpty(str))
                        {
                            bool flag;
                            string s    = (flag = str.Contains("(")) ? Regex.Match(str, @"^\w+", RegexOptions.CultureInvariant).Value : str;
                            string str3 = (!char.IsLower(s, 0) || !CSharpQueryCompiler.IsKeyword(s)) ? "" : "@";
                            builder.Append("\t");
                            if (flag)
                            {
                                builder.Append(str3 + s + " = " + iterationVar + "." + str + ",\n");
                            }
                            else
                            {
                                builder.Append(iterationVar + "." + str3 + str + ",\n");
                            }
                        }
                    }
                    builder.Remove(builder.Length - 2, 2);
                    builder.Append("\n}");
                    NewQueryArgs args = new NewQueryArgs(builder.ToString(), new QueryLanguage?(exprLanguage))
                    {
                        ListMembers = true
                    };
                    tree.OnNewQuery(args);
                });
            }
            if (!UserOptions.Instance.ResultsInGrids)
            {
                menu.Items.Add("-");
                if (onClick == null)
                {
                    onClick = delegate(object sender, EventArgs e) {
                        NewQueryArgs args = new NewQueryArgs(memberStem + ".Take(100)", new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))
                        {
                            IntoGrids = true
                        };
                        tree.OnNewQuery(args);
                    };
                }
                menu.Items.Add("Explore top 100 rows in grid", null, onClick);
                if (handler2 == null)
                {
                    handler2 = delegate(object sender, EventArgs e) {
                        NewQueryArgs args = new NewQueryArgs(memberStem + ".Take(1000)", new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))
                        {
                            IntoGrids = true
                        };
                        tree.OnNewQuery(args);
                    };
                }
                menu.Items.Add("Explore top 1000 rows in grid", null, handler2);
                if (handler3 == null)
                {
                    handler3 = delegate(object sender, EventArgs e) {
                        NewQueryArgs args = new NewQueryArgs(memberStem + ".Take(50000)", new QueryLanguage?(exprLanguage), !memberStem.Contains("..."))
                        {
                            IntoGrids = true
                        };
                        tree.OnNewQuery(args);
                    };
                }
                menu.Items.Add("Explore top 50,000 rows in grid", null, handler3);
                if (handler4 == null)
                {
                    handler4 = delegate(object sender, EventArgs e) {
                        NewQueryArgs args = new NewQueryArgs(simpleCompQuery, new QueryLanguage?(exprLanguage))
                        {
                            IntoGrids   = true,
                            ListMembers = true
                        };
                        tree.OnNewQuery(args);
                    };
                }
                menu.Items.Add("Execute LINQ query into data grid", null, handler4);
            }
        }