Hi,

Here is patch for RM2274 (patch credits to Wayne Winch Jr)

I tested this patch with below scenarios and all are working fine:

1. Table with 2 columns with 2nd col as primary key.
2. Table with 3 columns with 3rd and 2nd cols as primary key.
3. Table with 4 columns with 3rd and 2nd and 4th cols as primary key.
4. Table with 4 columns with 2nd and 4th cols as primary key.
5. Table with 4 columns with 4th col as primary key.
6. Table with 4 columns with 1st col as primary key.



-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

On Wed, Mar 22, 2017 at 3:27 PM, <redm...@postgresql.org> wrote:

> Issue #2274 has been updated by Dave Page.
>
>    - *Priority* changed from *Normal* to *Urgent*
>    - *Target version* set to *1.4*
>
> ------------------------------
> Bug #2274: Row Deletion Against Tables With PKs Not at Ordinal 0 Position
> Fail <https://redmine.postgresql.org/issues/2274#change-6260>
>
>    - Author: Wayne Winch Jr
>    - Status: New
>    - Priority: Urgent
>    - Assignee:
>    - Category:
>    - Target version: 1.4
>    - Platform:
>    - Area: User Interface
>
> If pgAdmin4 is used to delete one or more rows for tables having primary
> keys that do not occupy the first column(s) of said table, the deletion
> will fail with Python error --
>
> File 
> "/usr/lib/python3.5/site-packages/pgadmin4-web/pgadmin/tools/sqleditor/command.py",
> line 499, in save
> row[keys[int(k)]] = v
> IndexError: list index out of range
>
> SIDE NOTE: A separate problem exists whereby pgAdmin4 does not adequately
> indicate that an internal error (as listed above) has occurred as it merely
> switches from the Data Output tab to the Messages tab whereby an old
> message unrelated to the current or any exception is unhelpfully shown.
>
> The row deletion problem is caused by faulty logic within the command.py
> file, TableCommand class, save() method in the 'deleted' operation branch
> (Line 499) as indicated in the stack trace:
>
> row[keys[int(k)]] = v
>
> By changing this line to the following, the index mapping is performed
> correctly (by bypassing keys list) for tables with non-ordinal, zero-based
> PK column(s):
>
> row[changed_data['columns'][int(k)]['name']] = v
>
> This problem seems to have been introduced in pgAdmin4v1.3.
> ------------------------------
>
> You have received this notification because you have either subscribed to
> it, or are involved in it.
> To change your notification preferences, please click here:
> https://redmine.postgresql.org/my/account
>
diff --git a/web/pgadmin/tools/sqleditor/command.py b/web/pgadmin/tools/sqleditor/command.py
index 9420e08..be7f21f 100644
--- a/web/pgadmin/tools/sqleditor/command.py
+++ b/web/pgadmin/tools/sqleditor/command.py
@@ -496,7 +496,7 @@ class TableCommand(GridCommand):
                         for k, v in row.items():
                             # Set primary key with label & delete index based mapped key
                             try:
-                                row[keys[int(k)]] = v
+                                row[changed_data['columns'][int(k)]['name']] = v
                             except ValueError:
                                 continue
                             del row[k]
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to