[Libreoffice-commits] .: dbaccess/source

Andras Timar timar at kemper.freedesktop.org
Sun Jul 1 03:52:52 PDT 2012


 dbaccess/source/ui/dlg/directsql.cxx |   55 +++++++++++++++++++++++++++++++++--
 dbaccess/source/ui/dlg/directsql.hrc |    3 +
 dbaccess/source/ui/dlg/directsql.src |   41 +++++++++++++++++++-------
 dbaccess/source/ui/inc/directsql.hxx |    8 +++++
 4 files changed, 95 insertions(+), 12 deletions(-)

New commits:
commit 10a7bcdf97c7634922626a2d858539a2f8bb0f7b
Author: Phil Hart <html.wallah at gmail.com>
Date:   Fri Jun 29 11:00:59 2012 +0800

    fdo#51497 Show output from SELECT statements in Execute SQL dialog.
    
    These changes allow the user to optionally display the output
    from SQL SELECT statements in the "Execute SQL Statement"
    dialog.
    
    Change-Id: I9209a9e3b5ed100a88fa467078deb9f38c571d42

diff --git a/dbaccess/source/ui/dlg/directsql.cxx b/dbaccess/source/ui/dlg/directsql.cxx
index 9fbce80..6fdbc05 100644
--- a/dbaccess/source/ui/dlg/directsql.cxx
+++ b/dbaccess/source/ui/dlg/directsql.cxx
@@ -27,6 +27,7 @@
 #include <osl/mutex.hxx>
 #include <tools/diagnose_ex.h>
 #include <rtl/strbuf.hxx>
+#include <com/sun/star/sdbc/XRow.hpp>
 
 //........................................................................
 namespace dbaui
@@ -82,6 +83,9 @@ DBG_NAME(DirectSQLDialog)
         ,m_pSQLHistory(new LargeEntryListBox(this, ModuleRes(LB_HISTORY)))
         ,m_aStatusFrame         (this, ModuleRes(FL_STATUS))
         ,m_aStatus              (this, ModuleRes(ME_STATUS))
+        ,m_pShowOutput(new CheckBox(this, ModuleRes(CB_SHOWOUTPUT)))
+        ,m_aOutputFrame         (this, ModuleRes(FL_OUTPUT))
+        ,m_aOutput              (this, ModuleRes(ME_OUTPUT))
         ,m_aButtonSeparator     (this, ModuleRes(FL_BUTTONS))
         ,m_aHelp                (this, ModuleRes(PB_HELP))
         ,m_aClose               (this, ModuleRes(PB_CLOSE))
@@ -214,15 +218,51 @@ DBG_NAME(DirectSQLDialog)
         ::osl::MutexGuard aGuard(m_aMutex);
 
         String sStatus;
+        ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > xResultSet;
         try
         {
             // create a statement
             Reference< XStatement > xStatement = m_xConnection->createStatement();
             OSL_ENSURE(xStatement.is(), "DirectSQLDialog::implExecuteStatement: no statement returned by the connection!");
 
-            // execute it
+            // clear the output box
+            m_aOutput.SetText(String::CreateFromAscii(""));
             if (xStatement.is())
-                xStatement->execute(_rStatement);
+            {
+                if (::rtl::OUString(_rStatement).toAsciiUpperCase().compareTo(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SELECT")),6)==0 && m_pShowOutput->IsChecked())
+                {
+                    // execute it as a query
+                    xResultSet = xStatement->executeQuery(_rStatement);
+                    // get a handle for the rows
+                    ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow > xRow( xResultSet, ::com::sun::star::uno::UNO_QUERY );
+                    // work through each of the rows
+                    while (xResultSet->next())
+                    {
+                        // initialise the output line for each row
+                        String out = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(""));
+                        // work along the columns until that are none left
+                        int i = 1;
+                        try
+                        {
+                            for (;;)
+                            {
+                                // be dumb, treat everything as a string
+                                out += xRow->getString(i) + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(","));
+                                i++;
+                            }
+                        }
+                        // trap for when we fall off the end of the row
+                        catch (const SQLException& e)
+                        {
+                        }
+                        // report the output
+                        addOutputText(::rtl::OUString(out));
+                    }
+                } else {
+                    // execute it
+                    xStatement->execute(_rStatement);
+                }
+            }
 
             // successfull
             sStatus = String(ModuleRes(STR_COMMAND_EXECUTED_SUCCESSFULLY));
@@ -259,6 +299,17 @@ DBG_NAME(DirectSQLDialog)
     }
 
     //--------------------------------------------------------------------
+    void DirectSQLDialog::addOutputText(const String& _rMessage)
+    {
+        String sAppendMessage = _rMessage;
+        sAppendMessage += String::CreateFromAscii("\n");
+
+        String sCompleteMessage = m_aOutput.GetText();
+        sCompleteMessage += sAppendMessage;
+        m_aOutput.SetText(sCompleteMessage);
+    }
+
+    //--------------------------------------------------------------------
     void DirectSQLDialog::executeCurrent()
     {
         CHECK_INVARIANTS("DirectSQLDialog::executeCurrent");
diff --git a/dbaccess/source/ui/dlg/directsql.hrc b/dbaccess/source/ui/dlg/directsql.hrc
index f30717e..d590632 100644
--- a/dbaccess/source/ui/dlg/directsql.hrc
+++ b/dbaccess/source/ui/dlg/directsql.hrc
@@ -30,5 +30,8 @@
 #define FL_BUTTONS       9
 #define PB_HELP         10
 #define PB_CLOSE        11
+#define CB_SHOWOUTPUT   12
+#define FL_OUTPUT       13
+#define ME_OUTPUT       14
 
 #endif // _DBACCESS_UI_DIRECTSQL_HRC_
diff --git a/dbaccess/source/ui/dlg/directsql.src b/dbaccess/source/ui/dlg/directsql.src
index 1f200b0..cb7d50f 100644
--- a/dbaccess/source/ui/dlg/directsql.src
+++ b/dbaccess/source/ui/dlg/directsql.src
@@ -27,7 +27,7 @@
 #define BUTTON_SIZE_Y       14
 
 #define WINDOW_SIZE_X       200
-#define WINDOW_SIZE_Y       210 + BUTTON_SIZE_Y + BUTTON_SIZE_Y
+#define WINDOW_SIZE_Y       255 + BUTTON_SIZE_Y + BUTTON_SIZE_Y
 
 ModalDialog DLG_DIRECTSQL
 {
@@ -54,30 +54,36 @@ ModalDialog DLG_DIRECTSQL
     {
         HelpID = "dbaccess:MultiLineEdit:DLG_DIRECTSQL:ME_SQL";
         Pos = MAP_APPFONT( 7, 26 );
-        Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 80 );
+        Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 60 );
         SVLook = TRUE;
         Border = TRUE;
         TabStop = TRUE;
         IgnoreTab = TRUE;
     };
+    CheckBox   CB_SHOWOUTPUT
+    {
+        Pos = MAP_APPFONT( 7, 89 );
+        Size = MAP_APPFONT( 120, 10 );
+        Text [ en-US ] = "Show output of \"select\" statements";
+    };
     PushButton PB_EXECUTE
     {
         HelpID = "dbaccess:PushButton:DLG_DIRECTSQL:PB_EXECUTE";
-        Pos = MAP_APPFONT( WINDOW_SIZE_X - BUTTON_SIZE_X - 7, 109 );
+        Pos = MAP_APPFONT( WINDOW_SIZE_X - BUTTON_SIZE_X - 7, 89 );
         Size = MAP_APPFONT( BUTTON_SIZE_X, BUTTON_SIZE_Y );
         Text [ en-US ] = "Execute";
         DefButton = TRUE;
     };
     FixedText FT_HISTORY
     {
-        Pos = MAP_APPFONT( 7, 110 + BUTTON_SIZE_Y + 3 );
+        Pos = MAP_APPFONT( 7, 85 + BUTTON_SIZE_Y + 3 );
         Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 8 );
         Text [ en-US ] = "Previous commands";
     };
     ListBox LB_HISTORY
     {
         HelpID = "dbaccess:ListBox:DLG_DIRECTSQL:LB_HISTORY";
-        Pos = MAP_APPFONT( 7, 121 + BUTTON_SIZE_Y + 3 );
+        Pos = MAP_APPFONT( 7, 96 + BUTTON_SIZE_Y + 3 );
         Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 14 );
         SvLook = TRUE;
         DropDown = TRUE;
@@ -85,33 +91,48 @@ ModalDialog DLG_DIRECTSQL
     };
     FixedLine FL_STATUS
     {
-        Pos = MAP_APPFONT( 4, 138 + BUTTON_SIZE_Y + 4 );
+        Pos = MAP_APPFONT( 4, 113 + BUTTON_SIZE_Y + 4 );
         Size = MAP_APPFONT( WINDOW_SIZE_X - 8, 8 );
         Text [ en-US ] = "Status";
     };
     MultiLineEdit ME_STATUS
     {
         HelpID = "dbaccess:MultiLineEdit:DLG_DIRECTSQL:ME_STATUS";
-        Pos = MAP_APPFONT( 7, 153 + BUTTON_SIZE_Y );
+        Pos = MAP_APPFONT( 7, 128 + BUTTON_SIZE_Y );
         Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 41 );
         Border = TRUE;
         ReadOnly = TRUE;
         VScroll = TRUE;
     };
+    FixedLine FL_OUTPUT
+    {
+        Pos = MAP_APPFONT( 4, 173 + BUTTON_SIZE_Y + 4 );
+        Size = MAP_APPFONT( WINDOW_SIZE_X - 8, 8 );
+        Text [ en-US ] = "Output";
+    };
+    MultiLineEdit ME_OUTPUT
+    {
+        Pos = MAP_APPFONT( 7, 188 + BUTTON_SIZE_Y );
+        Size = MAP_APPFONT( WINDOW_SIZE_X - 14, 51 );
+        Border = TRUE;
+        ReadOnly = TRUE;
+        VScroll = TRUE;
+        HScroll = TRUE;
+    };
     FixedLine FL_BUTTONS
     {
-        Pos = MAP_APPFONT( 4, 193 + BUTTON_SIZE_Y + 4 );
+        Pos = MAP_APPFONT( 4, 238 + BUTTON_SIZE_Y + 4 );
         Size = MAP_APPFONT( WINDOW_SIZE_X - 8, 8 );
     };
     HelpButton PB_HELP
     {
-        Pos = MAP_APPFONT( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X - 3 - BUTTON_SIZE_X, 207 + BUTTON_SIZE_Y );
+        Pos = MAP_APPFONT( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X - 3 - BUTTON_SIZE_X, 252 + BUTTON_SIZE_Y );
         Size = MAP_APPFONT( BUTTON_SIZE_X, BUTTON_SIZE_Y );
     };
     PushButton PB_CLOSE
     {
         HelpID = "dbaccess:PushButton:DLG_DIRECTSQL:PB_CLOSE";
-        Pos = MAP_APPFONT( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X, 207 + BUTTON_SIZE_Y );
+        Pos = MAP_APPFONT( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X, 252 + BUTTON_SIZE_Y );
         Size = MAP_APPFONT( BUTTON_SIZE_X, BUTTON_SIZE_Y );
         Text [ en-US ] = "Close";
     };
diff --git a/dbaccess/source/ui/inc/directsql.hxx b/dbaccess/source/ui/inc/directsql.hxx
index e37335f..7325841 100644
--- a/dbaccess/source/ui/inc/directsql.hxx
+++ b/dbaccess/source/ui/inc/directsql.hxx
@@ -33,6 +33,8 @@
 #include "moduledbu.hxx"
 #include <osl/mutex.hxx>
 
+#include <svtools/editbrowsebox.hxx>
+
 //........................................................................
 namespace dbaui
 {
@@ -57,6 +59,9 @@ namespace dbaui
         ListBox*        m_pSQLHistory;
         FixedLine       m_aStatusFrame;
         MultiLineEdit   m_aStatus;
+        CheckBox*       m_pShowOutput;
+        FixedLine       m_aOutputFrame;
+        MultiLineEdit   m_aOutput;
         FixedLine       m_aButtonSeparator;
         HelpButton      m_aHelp;
         PushButton      m_aClose;
@@ -106,6 +111,9 @@ namespace dbaui
         /// adds a status text to the status list
         void addStatusText(const String& _rMessage);
 
+        /// adds a status text to the output list
+        void addOutputText(const String& _rMessage);
+
 #ifdef DBG_UTIL
         const sal_Char* impl_CheckInvariants() const;
 #endif


More information about the Libreoffice-commits mailing list