Re: PGAdmin 3 Patch // Memory Leaks Fixed // Ignore last patch - Mailing list pgadmin-hackers

From efesar
Subject Re: PGAdmin 3 Patch // Memory Leaks Fixed // Ignore last patch
Date
Msg-id NGBBKFMOILMAGDABPFEGIEPDDMAA.efesar@nmia.com
Whole thread Raw
In response to Re: PGAdmin 3 Patch // Memory Leaks Fixed // Ignore last patch  ("Dave Page" <dpage@vale-housing.co.uk>)
List pgadmin-hackers
> Nice work, thanks. You must have been bored :-). As you can probably
> tell I'm fairly new to C++ and still get a little confused with
> references & pointers from time to time.

Dave,

I've been programming C++ for years and I consistently have memory leaks --
especially in MFC. The really hard part about MFC is that it only takes
ownership of attached items under certain conditions (and of course since
it's Microsoft code, you never really know when that is). The really *great*
thing about wxWindows is that if you attach something to a window, dialog,
frame or control, it's deallocation is *taken care of* all the time.

> Anyway, I've applied this patch to my copy of the tree, and once I found
> the wx2.4 change you commented (downloading it now), it built OK.
> Unfortunately, I still can't get the QueryBuilder to do anything. When I
> try to add a table there are none listed - I've tried a few databases,
> all of which have a number of tables. I haven't had a chance to figure
> out what's wrong. Also, if I click the Data tab I get a parse error,
> even if I manually type in a valid query (which then vanishes).

I'm really confused as to why it's not showing any tables/views ... the
function is below. As for the SQL tab, it's one way (for now ... which
reminds me, do we have a "deconstruct sql" function lying around?) ... the
data tab calls the BuildSQL function before it gets data ... it can't get
any data unless there are some columns, and columns require tables, and as
you know ... the tables are for some strange reason not working on your
configuration.

I'm running PostgreSQL 7.3 on Cygwin so ... Maybe I misjudged the query.
Take a look at it below.

////////////////////////////////////////////////////////////////////////////
////
void dlgAddTableView::InitLists()
{
    // We need system settings
    extern sysSettings *settings;

    // We need to know if we're going to show system objects
    wxString sysobjstr;
    if (!settings->GetShowSystemObjects())
        sysobjstr = " AND relowner > 1 ";

    // Clear the lists
    m_tablelist->Clear();
    m_viewlist->Clear();

    if (m_database->Connect() == PGCONN_OK) {

        // tables
        pgSet *tables = m_database->ExecuteSet(
            wxT("SELECT oid,relname FROM pg_class "
                "WHERE relkind='r' " + sysobjstr +
                "ORDER BY lower(relname)"));

        while (!tables->Eof()) {
            m_tablelist->Append(tables->GetVal(wxT("relname")));
            tables->MoveNext();
        }

        delete tables;

        // views
        pgSet *views = m_database->ExecuteSet(
           wxT("SELECT relname FROM pg_class "
                "WHERE relkind='v' " + sysobjstr +
                "ORDER BY lower(relname)"));

        while (!views->Eof()) {
            m_viewlist->Append(views->GetVal(wxT("relname")));
            views->MoveNext();
        }

        delete views;
    }
}
////////////////////////////////////////////////////////////////////////////
////

> The one from pgServer should *always* be the master connection (ie. The
> database in the login dialogue). Is this not the case?

Yes, that makes sense now. Since pgServer chooses the master connection, I
added the ExecuteSet command to the pgDatabase so that the user can query
the pgConn member of pgDatabase, which already has the correct database
open. That way I won't have to issue a "change database" command to
pgServer. To be honest, I don't even know how to make pgServer switch
databases.

> On another note, how did you generate the patch? I had a heck of a job
> applying it as it found files in /src but not any of the others. It's
> probably me though - I often end up battling with patch....

I'm using this program called TortoiseCVS. I can't get WinCVS to work to
save my life. Tortoise works pretty well, but I have no idea how patches
work for the most part. I just click "Make Patch" ... Since there were 6
files that were not in CVS, I zipped them in with the .patch file ... but
didn't put them into any particular subdirectories. If you have suggestions
on how to make better patches, I'll try em.

I found this document in the wxwindows domain:

http://www.wxwindows.org/technote/patches.htm

I will draw your attention to item #3: cvs diff cannot make a patch which
adds or removes a file, so you must use the standalone diff utility to do
that ...

Huh? It does my brain no justice to be up this late trying to interpret what
that means.

-Keith


pgadmin-hackers by date:

Previous
From: "Dave Page"
Date:
Subject: Re: reindex action
Next
From: "frank_lupo"
Date:
Subject: Re: reindex action