diff --git a/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py b/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py index d64cec5..697a4f2 100644 --- a/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py +++ b/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py @@ -71,7 +71,8 @@ def is_query_resultset_updatable(conn, sql_path): table_oid=table_oid, sql_path=sql_path) - is_resultset_updatable = has_oids or primary_keys is not None + is_resultset_updatable = has_oids or (primary_keys is not None and + len(primary_keys) != 0) if is_resultset_updatable: column_types = get_columns_types(columns_info=columns_info, @@ -114,6 +115,8 @@ def _check_editable_columns(table_columns, results_columns): results_column['is_editable'] = False elif table_column_number in table_columns_numbers: # Duplicate results_column['is_editable'] = False + elif table_column_number not in table_columns: + results_column['is_editable'] = False elif results_column['display_name'] \ != table_columns[table_column_number]: results_column['is_editable'] = False diff --git a/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py b/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py index aae642d..59ce8a7 100644 --- a/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py +++ b/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py @@ -17,6 +17,7 @@ from regression import parent_node_dict from regression.python_test_utils import test_utils as utils from pgadmin.tools.sqleditor.tests.execute_query_test_utils \ import execute_query +from datetime import date class TestQueryUpdatableResultset(BaseTestGenerator): @@ -231,3 +232,57 @@ class TestQueryUpdatableResultset(BaseTestGenerator): create_sql += ';' utils.create_table_with_query(self.server, self.db_name, create_sql) + + +class TestTemporaryTable(TestQueryUpdatableResultset, BaseTestGenerator): + """ This class will test the query result-set for temporary tables """ + scenarios = [ + ('When selecting all columns of the Temporary table', dict( + sql=''' + DROP TABLE IF EXISTS {0}; + CREATE TEMPORARY TABLE {0} ON COMMIT DROP AS + SELECT + CURRENT_DATE AS today; + SELECT * FROM {0};''', + expected_primary_keys=None, + expected_results_column_data=[[date.today().strftime("%Y-%m-%d")]], + expected_has_oids=False, + expected_results_column_is_editable=False, + table_has_oids=False, + expected_cols_is_editable=[False] + )) + ] + + def setUp(self): + self._initialize_database_connection() + self._initialize_query_tool() + self._initialize_urls() + + def runTest(self): + response_data = self._execute_select_sql() + self._check_primary_keys(response_data) + self._check_oids(response_data) + self._check_results_column_data(response_data) + self._check_editable_columns(response_data) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) + + def _execute_select_sql(self): + self.test_table_name = "test_for_updatable_resultset" + \ + str(random.randint(1000, 9999)) + sql = self.sql.format(self.test_table_name) + is_success, response_data = \ + execute_query(tester=self.tester, + query=sql, + poll_url=self.poll_url, + start_query_tool_url=self.start_query_tool_url) + self.assertEquals(is_success, True) + return response_data + + def _check_results_column_data(self, response_data): + results_column_data = response_data['data']['result'] + for result_data, expected_is_editable in \ + zip(results_column_data, self.expected_results_column_data): + self.assertEquals(result_data, expected_is_editable)