Add 'SELECT Script' for functions and 'EXEC Script' for procedures per suggestion...
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Thu, 8 Oct 2009 18:21:07 +0000 (18:21 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Thu, 8 Oct 2009 18:21:07 +0000 (18:21 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@8067 a7884b65-44f6-0310-8a51-81a127f17b15

CHANGELOG
pgadmin/frm/frmMain.cpp
pgadmin/frm/frmQuery.cpp
pgadmin/include/frm/frmQuery.h
pgadmin/include/schema/pgFunction.h
pgadmin/schema/pgFunction.cpp

index 1087be300606dbd8527c9bd5665b90926d3c263c..8f373da88857a59e7ca84098b29efc0f59e90dda 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,8 @@ Changes
 
 Date       Dev Ver     Change details
 ---------- --- ------  --------------
+2009-10-08 DP  1.12.0  Add 'SELECT Script' for functions and 'EXEC Script' for
+                       procedures.
 2009-10-08 DP  1.10.1  Fix Greenplum support for column oriented partitions
                        [Chuck McDevitt]
 2009-10-05 DP  1.10.1  Ensure function variables get reset if the function is
index 15120e6483427d56f8129a429e989b6cddf6f439..369417e682929d5c2b35d94a1b07afda9493491e 100644 (file)
@@ -365,6 +365,7 @@ void frmMain::CreateMenus()
     toolsMenu->Append(scriptingMenuFactory->GetId(), _("Scripts"), scriptingMenu, _("Start Query Tool with scripted query."));
     new queryToolSqlFactory(menuFactories, scriptingMenu, 0);
     new queryToolSelectFactory(menuFactories, scriptingMenu, 0);
+    new queryToolExecFactory(menuFactories, scriptingMenu, 0);
     new queryToolInsertFactory(menuFactories, scriptingMenu, 0);
     new queryToolUpdateFactory(menuFactories, scriptingMenu, 0);
     new queryToolDeleteFactory(menuFactories, scriptingMenu, 0);
index 875ad848d4ecf0035201827d168c179758424e08..a97f7cb9c2473450f0e1902fa1a9d36fe90eaa05 100644 (file)
@@ -41,6 +41,7 @@
 #include "gqb/gqbViewPanels.h"
 #include "gqb/gqbEvents.h"
 #include "schema/pgDatabase.h"
+#include "schema/pgFunction.h"
 #include "schema/pgTable.h"
 #include "schema/pgView.h"
 #include "schema/gpExtTable.h"
@@ -2578,6 +2579,11 @@ queryToolSelectFactory::queryToolSelectFactory(menuFactoryList *list, wxMenu *mn
     mnu->Append(id, _("SELECT script"), _("Start query tool with SELECT script."));
 }
 
+bool queryToolSelectFactory::CheckEnable(pgObject *obj)
+{
+    return queryToolBaseFactory::CheckEnable(obj) && !obj->IsCollection() &&
+        (obj->IsCreatedBy(tableFactory) || obj->IsCreatedBy(viewFactory) || obj->IsCreatedBy(functionFactory));
+}
 
 wxWindow *queryToolSelectFactory::StartDialog(frmMain *form, pgObject *obj)
 {
@@ -2596,9 +2602,33 @@ wxWindow *queryToolSelectFactory::StartDialog(frmMain *form, pgObject *obj)
         gpExtTable *exttable = (gpExtTable*)obj;
         return StartDialogSql(form, obj, exttable->GetSelectSql(form->GetBrowser()));
     }
+    else if (obj->IsCreatedBy(functionFactory))
+    {
+        pgFunction *function = (pgFunction*)obj;
+        return StartDialogSql(form, obj, function->GetSelectSql(form->GetBrowser()));
+    }
     return 0;
 }
 
+queryToolExecFactory::queryToolExecFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : queryToolDataFactory(list)
+{
+    mnu->Append(id, _("EXEC script"), _("Start query tool with EXEC script."));
+}
+
+bool queryToolExecFactory::CheckEnable(pgObject *obj)
+{
+    return queryToolBaseFactory::CheckEnable(obj) && !obj->IsCollection() && obj->IsCreatedBy(procedureFactory);
+}
+
+wxWindow *queryToolExecFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+    if (obj->IsCreatedBy(procedureFactory))
+    {
+        pgProcedure *procedure = (pgProcedure*)obj;
+        return StartDialogSql(form, obj, procedure->GetExecSql(form->GetBrowser()));
+    }
+    return 0;
+}
 
 queryToolDeleteFactory::queryToolDeleteFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : queryToolDataFactory(list)
 {
index 470a9d9dfdd72a9ef20c15ea5a333c5cdde71cf1..c66321ae64282f5ba967cfc517a28a2f165ec090 100644 (file)
@@ -267,6 +267,15 @@ class queryToolSelectFactory : public queryToolDataFactory
 public:
     queryToolSelectFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar);
     wxWindow *StartDialog(frmMain *form, pgObject *obj);
+    bool CheckEnable(pgObject *obj);
+};
+
+class queryToolExecFactory : public queryToolDataFactory
+{
+public:
+    queryToolExecFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar);
+    wxWindow *StartDialog(frmMain *form, pgObject *obj);
+    bool CheckEnable(pgObject *obj);
 };
 
 class queryToolDeleteFactory : public queryToolDataFactory
index c1d2dfd36dd3228552a7553f788d98079af31bd3..50efda8d9fad823b58b3fb1f66f30b5b86188029 100644 (file)
@@ -45,7 +45,7 @@ public:
 
     wxString GetFullName();
     wxString GetArgListWithNames();
-    wxString GetArgSigList();
+    wxString GetArgSigList(const bool forScript = false);
 
     wxArrayString &GetArgNamesArray() { return argNamesArray; }
     void iAddArgName(const wxString &s) { argNamesArray.Add(s); }
@@ -91,6 +91,7 @@ public:
     wxString GetSql(ctlTree *browser);
     wxString GetHelpPage(bool forCreate) const { return wxT("pg/sql-createfunction"); }
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
+    wxString GetSelectSql(ctlTree *browser);
 
        void ShowHint(frmMain *form, bool force);
        bool GetCanHint() { return true; };
@@ -159,6 +160,7 @@ public:
 
     wxString GetSql(ctlTree *browser);
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
+    wxString GetExecSql(ctlTree *browser);
 
     wxString GetHelpPage(bool forCreate) const { return wxT("pg/sql-createprocedure"); }
 };
index c644c9e8597c04559c9356992c7f74c0200deb7f..dc2f566c7e578dcf9980c2aeb9bd9b2a6ca19e3d 100644 (file)
@@ -350,7 +350,9 @@ wxString pgFunction::GetArgListWithNames()
     return args;
 }
 
-wxString pgFunction::GetArgSigList()
+// Return the signature arguments list. If forScript = true, we format the list
+// appropriately for use in a SELECT script.
+wxString pgFunction::GetArgSigList(const bool forScript)
 {
     wxString args;
 
@@ -360,18 +362,34 @@ wxString pgFunction::GetArgSigList()
         if (argModesArray.Item(i) != wxT("OUT") && argModesArray.Item(i) != wxT("TABLE"))
         {
             if (args.Length() > 0)
-                args += wxT(", ");
+            {
+                if (forScript)
+                    args += wxT(",\n");
+                else
+                    args += wxT(", ");
+            }
 
-            args += argTypesArray.Item(i);
+            if (forScript)
+                args += wxT("    <") + argTypesArray.Item(i) + wxT(">");
+            else
+                args += argTypesArray.Item(i);
         }
         else
         {
             if (GetLanguage() == wxT("edbspl") && argModesArray.Item(i) != wxT("TABLE"))
             {
                 if (args.Length() > 0)
-                    args += wxT(", ");
+                {
+                    if (forScript)
+                        args += wxT(",\n");
+                    else
+                        args += wxT(", ");
+                }
 
-                args += argTypesArray.Item(i);
+                if (forScript)
+                    args += wxT("    <") + argTypesArray.Item(i) + wxT(">");
+                else
+                    args += argTypesArray.Item(i);
             }
         }
     }
@@ -689,7 +707,35 @@ pgObject *pgFunction::Refresh(ctlTree *browser, const wxTreeItemId item)
     return function;
 }
 
+// Generate the SELECT Script SQL
+wxString pgFunction::GetSelectSql(ctlTree *browser)
+{
+    wxString args = GetArgSigList(true);
+
+    wxString sql = wxT("SELECT ") + GetQuotedFullIdentifier();
+
+    if (args.Length())
+        sql += wxT("(\n") + args + wxT("\n);\n");
+    else
+        sql += wxT(");\n");
+
+    return sql;
+}
+
+// Generate the EXEC Script SQL
+wxString pgProcedure::GetExecSql(ctlTree *browser)
+{
+    wxString args = GetArgSigList(true);
+
+    wxString sql = wxT("EXEC ") + GetQuotedFullIdentifier();
+
+    if (args.Length())
+        sql += wxT("(\n") + args + wxT("\n);\n");
+    else
+        sql += wxT(";\n");
 
+    return sql;
+}
 
 pgObject *pgFunctionFactory::CreateObjects(pgCollection *collection, ctlTree *browser, const wxString &restr)
 {