Hi,

PFA updated patch, which includes feature test to test the scenario going
forward.

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


On Thu, Feb 15, 2018 at 7:53 PM, Murtuza Zabuawala <
murtuza.zabuaw...@enterprisedb.com> wrote:

> ​Sure, will do that.​
>
> --
> Regards,
> Murtuza Zabuawala
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
>
> On Thu, Feb 15, 2018 at 7:34 PM, Joao De Almeida Pereira <
> jdealmeidapere...@pivotal.io> wrote:
>
>> Hello Murtuza,
>> Just reviewed your patch, and it looks good.
>> Do you think you can wrap some tests around this behavior to ensure it
>> doesn't happen again in the future?
>>
>> Thanks
>> Joao
>>
>> On Thu, Feb 15, 2018 at 8:34 AM Murtuza Zabuawala <
>> murtuza.zabuaw...@enterprisedb.com> wrote:
>>
>>> Hi,
>>>
>>> PFA patch to fix the issue user was not able to insert new row in the
>>> table via 'view data' if the PK is in capital letters.
>>>
>>> --
>>> Regards,
>>> Murtuza Zabuawala
>>> EnterpriseDB: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>>
>>>
>
diff --git a/web/pgadmin/feature_tests/view_data_dml_queries.py 
b/web/pgadmin/feature_tests/view_data_dml_queries.py
index 0423ec1..aa75b6e 100644
--- a/web/pgadmin/feature_tests/view_data_dml_queries.py
+++ b/web/pgadmin/feature_tests/view_data_dml_queries.py
@@ -54,9 +54,9 @@ class CheckForViewDataTest(BaseFeatureTest):
 
     # query for creating 'defaults_text' table
     defaults_query = """
-CREATE TABLE public.defaults
+CREATE TABLE public.defaults_{0}
 (
-    id serial NOT NULL,
+    {1} serial NOT NULL,
     number_defaults numeric(100) DEFAULT 1,
     number_null numeric(100),
     text_defaults text COLLATE pg_catalog."default"
@@ -77,7 +77,7 @@ CREATE TABLE public.defaults
     int_arr_empty integer[],
     boolean_arr boolean[],
     boolean_arr_null boolean[],
-    CONSTRAINT defaults_pkey PRIMARY KEY (id)
+    CONSTRAINT defaults_pkey_{0} PRIMARY KEY ({1})
 )
 """
 
@@ -100,10 +100,12 @@ CREATE TABLE public.defaults
         test_utils.create_database(self.server, "acceptance_test_db")
 
         # Create pre-requisite table
-        test_utils.create_table_with_query(
-            self.server,
-            "acceptance_test_db",
-            CheckForViewDataTest.defaults_query)
+        for k, v in { 1: 'id', 2:'"ID"' }.items():
+            test_utils.create_table_with_query(
+                self.server,
+                "acceptance_test_db",
+                CheckForViewDataTest.defaults_query.format(k, v))
+
         # Initialize an instance of WebDriverWait with timeout of 3 seconds
         self.wait = WebDriverWait(self.driver, 3)
 
@@ -111,18 +113,20 @@ CREATE TABLE public.defaults
         self.page.wait_for_spinner_to_disappear()
         self.page.add_server(self.server)
         self._tables_node_expandable()
-        self.page.select_tree_item('defaults')
-        # Open Object -> View/Edit data
-        self._view_data_grid()
+        # iterate on both tables
+        for cnt in (1,2):
+            self.page.select_tree_item('defaults_{0}'.format(str(cnt)))
+            # Open Object -> View/Edit data
+            self._view_data_grid()
 
-        self.page.wait_for_query_tool_loading_indicator_to_disappear()
-        # Run test to insert a new row in table with default values
-        self._add_row()
-        self._verify_row_data(True)
+            self.page.wait_for_query_tool_loading_indicator_to_disappear()
+            # Run test to insert a new row in table with default values
+            self._add_row()
+            self._verify_row_data(True)
 
-        # Run test to copy/paste a row
-        self._copy_paste_row()
-        self.page.close_data_grid()
+            # Run test to copy/paste a row
+            self._copy_paste_row()
+            self.page.close_data_grid()
 
     def after(self):
         self.page.remove_server(self.server)
@@ -235,7 +239,7 @@ CREATE TABLE public.defaults
             self.page.driver.find_element_by_link_text("View/Edit Data")
         ).perform()
         self.page.find_by_partial_link_text("All Rows").click()
-
+        time.sleep(1)
         # wait until datagrid frame is loaded.
         self.page.click_tab('Edit Data -')
 
diff --git a/web/pgadmin/tools/sqleditor/__init__.py 
b/web/pgadmin/tools/sqleditor/__init__.py
index 74bc4d1..6db814c 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -529,12 +529,17 @@ def start_query_tool(trans_id):
         trans_id: unique transaction id
     """
 
-    sql = extract_sql_from_network_parameters(request.data, request.args, 
request.form)
+    sql = extract_sql_from_network_parameters(
+        request.data, request.args, request.form
+    )
 
-    return StartRunningQuery(blueprint, current_app).execute(sql, trans_id, 
session)
+    return StartRunningQuery(blueprint, current_app).execute(
+        sql, trans_id, session
+    )
 
 
-def extract_sql_from_network_parameters(request_data, request_arguments, 
request_form_data):
+def extract_sql_from_network_parameters(request_data, request_arguments,
+                                        request_form_data):
     if request_data:
         sql_parameters = json.loads(request_data, encoding='utf-8')
         if type(sql_parameters) is str:
@@ -741,15 +746,17 @@ def poll(trans_id):
                                         typname == 'character varying'
                                     ):
                                         typname = typname + '(' + \
-                                                  
str(col_info['internal_size']) + \
-                                                  ')'
+                                                  str(
+                                                      col_info['internal_size']
+                                                  ) + ')'
                                     elif (
                                         typname == 'character[]' or
                                         typname == 'character varying[]'
                                     ):
                                         typname = typname[:-2] + '(' + \
-                                                  
str(col_info['internal_size']) + \
-                                                  ')[]'
+                                                  str(
+                                                      col_info['internal_size']
+                                                  ) + ')[]'
 
                                 col_info['type_name'] = typname
 
diff --git a/web/pgadmin/tools/sqleditor/command.py 
b/web/pgadmin/tools/sqleditor/command.py
index dff8b92..8cc96e0 100644
--- a/web/pgadmin/tools/sqleditor/command.py
+++ b/web/pgadmin/tools/sqleditor/command.py
@@ -533,8 +533,7 @@ class TableCommand(GridCommand):
                 for each_col in columns_info:
                     if (
                         columns_info[each_col]['not_null'] and
-                        not columns_info[each_col][
-                            'has_default_val']
+                        not columns_info[each_col]['has_default_val']
                     ):
                         column_data[each_col] = None
                         column_type[each_col] =\
@@ -595,8 +594,7 @@ class TableCommand(GridCommand):
                             "/".join([self.sql_path, 'select.sql']),
                             object_name=self.object_name,
                             nsp_name=self.nsp_name,
-                            pk_names=pk_names.split(",") if pk_names
-                            else None,
+                            primary_keys=primary_keys,
                             has_oids=has_oids
                         )
 
diff --git 
a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/select.sql 
b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/select.sql
index 45f364a..97329cd 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/select.sql
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/select.sql
@@ -3,7 +3,7 @@ SELECT {% if has_oids %}oid, {% endif %}* FROM {{ 
conn|qtIdent(nsp_name, object_
 WHERE
 {% if has_oids %}
   oid = %(oid)s
-{% elif pk_names %}
-  {% for pk in pk_names %}
+{% elif primary_keys|length > 0 %}
+  {% for pk in primary_keys %}
     {% if not loop.first %} AND {% endif %}{{ conn|qtIdent(pk) }} = %({{ pk 
}})s{% endfor %}
 {% endif %};

Reply via email to