Re: Multiple selections delete bug

Поиск
Список
Период
Сортировка
От Dave Page
Тема Re: Multiple selections delete bug
Дата
Msg-id E7F85A1B5FF8D44C8A1AF6885BC9A0E430697C@ratbert.vale-housing.co.uk
обсуждение исходный текст
Ответ на Multiple selections delete bug  ("Virgil Frum" <virgil@netappi.com>)
Список pgadmin-support

> -----Original Message-----
> From: pgadmin-support-owner@postgresql.org
> [mailto:pgadmin-support-owner@postgresql.org] On Behalf Of Virgil Frum
> Sent: 06 October 2004 14:37
> To: pgadmin-support@postgresql.org
> Subject: Re: [pgadmin-support] Multiple selections delete bug
>
> The problem is just partially resolved. I've made some new
> tests (on oct 05
> release) and looked over changes you've made in
> src/ui/frmEditGrid.cpp.
> Conclusion: deletion is working correctly only if rows are
> selected in ascending or descending order with or without
> gaps. Selecting rows in an arbitrary order (ex. 7, 8, 9, 4,
> 5, 6) won't work.
>
> Method sqlTable::DeleteRows(size_t pos, size_t rows) is
> working correctly only on successively rows. So, I see 2
> possible solutions (with DeleteRows()
> unchanged):
> 1) order ascending 'delrows' array (wxArrayInt from
> frmEditGrid::OnDelete - line 498) and remove lines added in
> version 1.56
> 2) call  sqlGrid->GetSelectedRows() after every
> sqlGrid->DeleteRows(delrows.Item(0), 1);
>
> I'm sorry for insistence, but I want to avoid deletion of wrong lines.

No problem - I committed a fix 5 minutes before your email implementing
your option 1!!

Regards, Dave

Index: frmEditGrid.cpp
===================================================================
RCS file: /projects/pgadmin3/src/ui/frmEditGrid.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -Lsrc/ui/frmEditGrid.cpp -Lsrc/ui/frmEditGrid.cpp -u -w -r1.56
-r1.57
--- src/ui/frmEditGrid.cpp
+++ src/ui/frmEditGrid.cpp
@@ -488,6 +488,18 @@    if (optionsChanged) Go();}
+template < class T >
+int ArrayCmp(T *a, T *b)
+{
+    if (*a == *b)
+        return 0;
+
+    if (*a > *b)
+        return 1;
+    else
+        return -1;
+}
+void frmEditGrid::OnDelete(wxCommandEvent& event){    wxMessageDialog msg(this, _("Are you sure you wish to delete the
selected row(s)?"), _("Delete rows?"), wxYES_NO | wxICON_QUESTION);
@@ -498,22 +510,17 @@    wxArrayInt delrows=sqlGrid->GetSelectedRows();    int i=delrows.GetCount();
+    // Sort the grid so we always delete last->first, otherwise we
+    // could end up deleting anything because the array returned by
+    // GetSelectedRows is in the order that rows were selected by
+    // the user.
+    delrows.Sort(ArrayCmp);
+    // don't care a lot about optimizing here; doing it line by line    // just as sqlTable::DeleteRows does
-    if (delrows.Item(i-1) > delrows.Item(0))
-    {        while (i--)            sqlGrid->DeleteRows(delrows.Item(i), 1);
-    }
-    else
-    {
-        int j = 0;
-        while (j < i)
-        {
-            sqlGrid->DeleteRows(delrows.Item(j), 1);
-            ++j;
-        }
-    }
+    sqlGrid->EndBatch();



В списке pgadmin-support по дате отправления:

Предыдущее
От: "Virgil Frum"
Дата:
Сообщение: Re: Multiple selections delete bug
Следующее
От: Eder I. Côrtes
Дата:
Сообщение: BUG WHEN ADDING FIELD VARCHAR WITH FIXED SIZE