Sure.
I'll work on it...
On 11 Apr 2013 21:00, "Dave Page" <dp...@pgadmin.org> wrote:

> Hi
>
> First impressions - it already seems more stable than the old code,
> and I only played with it for an hour or so on Mac so far. Nice work
> :-)
>
> I did find a few things in my initial testing that need some
> attention. I didn't get the impression anything was particularly
> serious or would be troublesome to fix though:
>
> - The layout of the parameters dialogue needs work - the grid needs to
> size to the dialogue.
>
> - The checkboxes in the grid are jumbo sized. We have them in the Edit
> Grid already - can the code be reused?
>
> - The popup activity dialog is kinda annoying. Perhaps we could put a
> progress indicator in the status bar? Low priority.
>
> - When injecting new values into variables, if the value can't be
> accepted (wrong datatype etc), then the grid should be reset to the
> original value when the error message box is accepted.
>
> - If a function is re-executed in the same session, the return value
> isn't cleared from the Results grid.
>
> - If a function is re-executed in the same session, the breakpoints
> are cleared. This doesn't seem to happen with in-process debugging,
> only direct.
>
> - Aborting a direct debug session mid-function caused an indefinite(?)
> hang with a busy cursor.
>
> - The status messages in the status bar are a little confusing. I
> think you need to add "Done." to the end of the string when an action
> completes, otherwise it looks like things never complete until you
> step or run.
>
> If you can fix those issues (with the possible exception of the
> progress indicator), I'll dive in a bit deeper. I don't want to go too
> deep just yet in case you have to change more than I expect.
>
> Thanks.
>
> On Wed, Apr 10, 2013 at 12:10 PM, Ashesh Vashi
> <ashesh.va...@enterprisedb.com> wrote:
> > Hi All,
> >
> >     We always wanted to redesign the plpgsql debugger in pgAdmin III from
> > very long time due to very long list of bug
> > Reports of the debugger. We were not able crack down variety of cases
> across
> > the platforms.  For many cases - resolving
> > On one platform, we ended up introducing other issues on another
> platforms.
> > This inability of handling variety of cases
> > Across platforms made us to redesign the debugger from the scratch.
> >
> > Let me list down few the limitations/flaws with the current
> implementation
> > of the debugger:
> > - Uses its own mechanism for making connection, querying (async/sync) &
> > handing results instead of using the common
> >   available classes, which are used by all other components in pgAdmin
> III.
> >   i.e.
> >     dbgConn, dbgResult, dbgPgThread, etc.
> >
> >   Because of this, the improvements in the existing infrastructure were
> > never reflected in the debugger.
> >   i.e.
> >     The connection with debugger were never be created with the SSL
> support.
> >     Because - dbgConn never supported the SSL.
> >   This is also results for the many bugs.
> >   i.e.
> >     The dbgPgThread has its own mechanism to run queries asynchronously
> and
> > resulted into many bugs. It generates few
> >   events, which shouldn't be done after the completion of the debugger
> > operations. And, that leads to crash.  Using
> >   TestDestroy() function for JOINABLE threads were unnecessary and never
> > required. But - it is using it.
> >
> > - A hidden windows is taking care of the events generated during the
> > debugging the actual window. It could have been
> >   Good, if all the tasks having intialited and handled from by this
> central
> > mechanism, instead we do have different
> >   places for handling both the direct/indirect debugging. And, that
> > introduced a lot of issues. And, that made the
> >   things very confusing even to understand the existing mechanism.
> >
> > And, many more.
> >
> > We had to made changes in the existing infrastructure/classes to use it
> with
> > the debugger.
> > * pgConn:
> >   + Report error quietly (if told) while error found in execution, this
> > allows these functions to be used from any
> >     Thread. Otherwise, it used to throw an error.
> >   + Set/Reset the PGcancel object before and after the query execution,
> > which will be useful for us to use the new
> >     Mechanism of libpq (of course, not very new) to cancel any query
> > execution from in between.
> >   + Allow new application name, while duplicating the connection
> >   + Save the version and the features list, while duplicating the
> > connection, this will avoid/reduce the duplicate calls
> >     To the database server.
> > * pgQueryThread:
> >   + Allow to specify the custom notice processor and handler
> >   + Allow to run multiple queries by creating queue
> >   + Allow to use the EnterpriseDB's callable statement from the
> > pgQueryThread (if available)
> >   + Proper cancellation mechanism implementation
> >   + Send a custom event to the caller (instead of standard event) for
> > successful execution or on different errors
> >     (but - not if it is explicitly cancelled by the user.) This allows
> us to
> > send more information to the developer.
> >   + Allows the developer to add a batch queries (which should run
> > asynchronously) even after starting of the thread.
> >   + Allow to use the PGparam now, to avoid generating the queries
> > dynamically
> >
> > The new design is based on the MVC (Model-View-Controller) architecture.
> > * Controller (dbgController)
> >   - A central mechanism to handle all the operations.
> > * View (frmDebugger - mostly reused)
> >   - Responsible for presentation and interaction with the end-user
> >   i.e.
> >     code viewer, different variable windows, stack window, etc.
> >   - It also controls other part of view.
> > * Model (dbgModel)
> >  - Handles/Contains all the data
> >  - It contains the information about the target function/procedure.
> >
> > For any operation, View and Model will ask the Controller to handle it.
> >
> > Summary of the changes:
> >
> >  INSERTED|   DELETED| FILENAME                                    |
> SUMMARY
> >
> ---------+----------+---------------------------------------------|----------------------------
> >         3|         1| pgadmin/ctl/ctlSQLResult.cpp                | -
> Call
> > cancel thread execution on exit, if already
> >                                                                   |
> running
> > for nice exit handling
> >       196|        18| pgadmin/db/pgConn.cpp                       | -
> > Set/Reset the PGcancel object
> >                                                                   | -
> Saving
> > settings and new application name, while
> >                                                                   |
> cloning
> >        31|        24| pgadmin/include/db/pgConn.h                 |
> >       245|        33| pgadmin/include/db/pgQueryThread.h          |
> >       647|       111| pgadmin/db/pgQueryThread.cpp                | -
> > Multiple queries execution support (one-by-one)
> >         8|         0| pgadmin/include/db/pgSet.h                  | -
> > Introduce a new function GetCommandStatus for the
> >                                                                   |
> result
> >         0|         1| pgadmin/db/pgSet.cpp                        | -
> > Removed unnecessary header inclusion
> >         0|      1563| pgadmin/debugger/ctlCodeWindow.cpp          | -
> > Omitted/Removed it completely
> >         0|       250| pgadmin/include/debugger/ctlCodeWindow.h    |
> >         9|         9| pgadmin/debugger/ctlMessageWindow.cpp       | -
> > Standardize the function naming conversion with the
> >                                                                   | other
> > components
> >         5|        12| pgadmin/include/debugger/ctlMessageWindow.h |
> >        28|        27| pgadmin/debugger/ctlResultGrid.cpp          | -
> Using
> > the standard querying mechanism (pgSet)
> >                                                                   |
> instead
> > of libpq's PGresult directly
> >         4|         3| pgadmin/include/debugger/ctlResultGrid.h    |
> >         4|         7| pgadmin/debugger/ctlStackWindow.cpp         | -
> > Standardize the function naming conversion with the
> >                                                                   | other
> > components
> >         2|         2| pgadmin/include/debugger/ctlStackWindow.h   |
> >        50|        56| pgadmin/debugger/ctlTabWindow.cpp           | -
> > Standardize the function naming conversion with the
> >                                                                   | other
> > components
> >        20|        17| pgadmin/include/debugger/ctlTabWindow.h     |
> >        60|        55| pgadmin/debugger/ctlVarWindow.cpp           | -
> > Standardize the function naming conversion with the
> >                                                                   | other
> > components
> >        17|        15| pgadmin/include/debugger/ctlVarWindow.h     |
> >       819|         0| pgadmin/debugger/dbgController.cpp          | -
> > Central of the debugger (it takes care of all the
> >                                                                   |
> > operations, the frmDebugger (view) and dbgModel
> >                                                                   |
> (model)
> > interact with it.
> >       173|         0| pgadmin/include/debugger/dbgController.h    |
> >         0|        21| pgadmin/debugger/dbgDbResult.cpp            | -
> > Omitted/Removed it completely
> >       703|         0| pgadmin/debugger/dbgEvents.cpp              | -
> Added
> > new file, which contains all the event
> >                                                                   |
> handling
> > functions of the dbgController to reduce
> >                                                                   | the
> size
> > of dbgController and separating them from
> >                                                                   | the
> > direct operations
> >        63|         0| pgadmin/debugger/dbgModel.cpp               | -
> > Contains all the information regarding the
> >                                                                   |
> target.
> >       143|         0| pgadmin/include/debugger/dbgModel.h         |
> >         0|       544| pgadmin/debugger/dbgPgConn.cpp              | -
> > Omitted/Removed it completely
> >         0|       363| pgadmin/debugger/dbgPgThread.cpp            | -
> > Omitted/Removed it completely
> >         0|       157| pgadmin/debugger/dbgResultset.cpp           | -
> > Omitted/Removed it completely
> >       536|       194| pgadmin/debugger/dbgTargetInfo.cpp          | - It
> > fetches and saves the target information from
> >                                                                   | the
> > database server (it is no more using the
> >                                                                   |
> > deprecated pldbg_target_info function).
> >       146|        75| pgadmin/include/debugger/dbgTargetInfo.h    |
> >        44|       101| pgadmin/debugger/debugger.cpp               | -
> > Debugger menu factory, modified accordingly new
> >                                                                   |
> design
> >       770|       682| pgadmin/debugger/dlgDirectDbg.cpp           | -
> > Handles now only taking input from the end-user
> >                                                                   | - It
> > also takes care of converting an expression
> >                                                                   |
> input to
> > a proper value
> >                                                                   | - It
> > also allows the end-user to use the default
> >                                                                   |
> value of
> > an argument through UI.
> >                                                                   | - It
> > does not control the debugger execution any
> >                                                                   | more
> >        74|        48| pgadmin/include/debugger/dlgDirectDbg.h     |
> >       734|       165| pgadmin/debugger/frmDebugger.cpp            | -
> Mostly
> > reused
> >                                                                   | -
> Works
> > as presentation layer and takes input from
> >                                                                   | from
> the
> > end-user
> >                                                                   | i.e.
> > set/reset break-points, changing parameter
> >                                                                   |
> > values, showing the target code, showing
> >                                                                   |
> > current parameter values, etc.
> >       114|        92| pgadmin/include/debugger/frmDebugger.h      |
> >         3|         5| pgadmin/debugger/module.mk                  |
> >         5|         1| pgadmin/dlg/dlgClasses.cpp                  | -
> Call
> > cancel thread execution on exit, if already
> >                                                                   |
> running
> > for nice exit handling (ExecutionDialog)
> >         4|         1| pgadmin/frm/frmEditGrid.cpp                 | -
> Call
> > cancel thread execution on abort
> >         2|         2| pgadmin/frm/frmQuery.cpp                    | -
> > Modified to use new custom event on query
> >                                                                   |
> > execution completion
> >         2|         1| pgadmin/include/frm/frmQuery.h              |
> >         1|         1| pgadmin/include/db/module.mk                |
> >        79|         0| pgadmin/include/db/pgQueryResultEvent.h     | -
> > Introduced a new custom event for handling the
> >                                                                   | query
> > execution error/success (pgQueryThread)
> >        14|        21| pgadmin/include/debugger/dbgBreakPoint.h    | -
> > Reformatted the break-point according to new design
> >         0|        38| pgadmin/include/debugger/dbgConnProp.h      | -
> > Omitted/Removed it completely
> >        57|        10| pgadmin/include/debugger/dbgConst.h         |
> >         0|        53| pgadmin/include/debugger/dbgDbResult.h      | -
> > Omitted/Removed it completely
> >         0|        99| pgadmin/include/debugger/dbgPgConn.h        | -
> > Omitted/Removed it completely
> >         0|        95| pgadmin/include/debugger/dbgPgThread.h      | -
> > Omitted/Removed it completely
> >         0|        52| pgadmin/include/debugger/dbgResultset.h     | -
> > Omitted/Removed it completely
> >         2|         6| pgadmin/include/debugger/module.mk          |
> >         3|         6| pgadmin/include/precomp.h                   |
> >         7|        12| pgadmin/pgAdmin3.vcxproj                    | -
> Window
> > build script changes
> >        10|        28| pgadmin/pgAdmin3.vcxproj.filters            |
> >         3|         3| pgadmin/ii/dlgDirectDbg.xrc                 | -
> Input
> > Arguments dialog change (changed the
> >                                                                   |
> > dimensions.)
> >        44|        44| pgadmin/ii/xrcDialogs.cpp                   |
> >
> >
> > --
> >
> > Thanks & Regards,
> >
> > Ashesh Vashi
> > EnterpriseDB INDIA: Enterprise PostgreSQL Company
> >
> >
> > http://www.linkedin.com/in/asheshvashi
> >
> >
> >
> > --
> > Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgadmin-hackers
> >
>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

Reply via email to