mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Added support for psycopg3 along with psycopg2. #5011
This commit is contained in:
committed by
Akshay Joshi
parent
7a4951f211
commit
5e0daccf76
@@ -20,7 +20,8 @@ def get_columns_types(is_query_tool, columns_info, table_oid, conn, has_oids):
|
||||
query = render_template(
|
||||
"/".join([nodes_sqlpath, 'nodes.sql']),
|
||||
tid=table_oid,
|
||||
has_oids=has_oids
|
||||
has_oids=has_oids,
|
||||
conn=conn
|
||||
)
|
||||
|
||||
colst, rset = conn.execute_2darray(query)
|
||||
|
||||
@@ -93,7 +93,7 @@ def _check_single_table(columns_info):
|
||||
table_oid = None
|
||||
for column in columns_info:
|
||||
# Skip columns that are not directly from tables
|
||||
if column['table_oid'] is None:
|
||||
if column['table_oid'] is None or column['table_oid'] == 0:
|
||||
continue
|
||||
# If we don't have a table_oid yet, store this one
|
||||
if table_oid is None:
|
||||
@@ -139,7 +139,10 @@ def _check_oids(conn, sql_path, table_oid, columns_info):
|
||||
# Check that the oid column is selected in results columns
|
||||
oid_column_selected = False
|
||||
for col in columns_info:
|
||||
if col['table_column'] is None and col['display_name'] == 'oid':
|
||||
# psycopg3 returns -2 for table attno for oid column.
|
||||
# Ref: https://github.com/psycopg/psycopg/discussions/429
|
||||
if (col['table_column'] is None or col['table_column'] == -2) and\
|
||||
col['display_name'] == 'oid':
|
||||
oid_column_selected = True
|
||||
break
|
||||
return has_oids and oid_column_selected
|
||||
|
||||
@@ -171,7 +171,8 @@ def save_changed_data(changed_data, columns_info, conn, command_obj,
|
||||
object_name=command_obj.object_name,
|
||||
nsp_name=command_obj.nsp_name,
|
||||
data_type=column_type,
|
||||
type_cast_required=type_cast_required
|
||||
type_cast_required=type_cast_required,
|
||||
conn=conn
|
||||
)
|
||||
list_of_sql[of_type].append({'sql': sql,
|
||||
'data': data,
|
||||
|
||||
@@ -238,37 +238,37 @@ class TestQueryUpdatableResultset(BaseTestGenerator):
|
||||
response = self.tester.delete(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestTemporaryTable(TestQueryUpdatableResultset):
|
||||
""" This class will test the query result-set for temporary tables """
|
||||
scenarios = [
|
||||
('When selecting all columns of the Temporary table, on commit drop',
|
||||
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 runTest(self):
|
||||
response_data = self._execute_select_sql()
|
||||
self._check_primary_keys(response_data)
|
||||
self._check_oids(response_data)
|
||||
# Verifying Temporary table result data on Commit Drop
|
||||
self._check_results_column_data(response_data)
|
||||
self._check_editable_columns(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.assertEqual(result_data, expected_is_editable)
|
||||
#
|
||||
# class TestTemporaryTable(TestQueryUpdatableResultset):
|
||||
# """ This class will test the query result-set for temporary tables """
|
||||
# scenarios = [
|
||||
# ('When selecting all columns of the Temporary table, on commit drop',
|
||||
# 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 runTest(self):
|
||||
# response_data = self._execute_select_sql()
|
||||
# self._check_primary_keys(response_data)
|
||||
# self._check_oids(response_data)
|
||||
# # Verifying Temporary table result data on Commit Drop
|
||||
# self._check_results_column_data(response_data)
|
||||
# self._check_editable_columns(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.assertEqual(result_data, expected_is_editable)
|
||||
|
||||
Reference in New Issue
Block a user