diff --git a/pkg/win32/installer.iss.in b/pkg/win32/installer.iss.in
index a06ef21ee..a0decbf88 100644
--- a/pkg/win32/installer.iss.in
+++ b/pkg/win32/installer.iss.in
@@ -199,7 +199,7 @@ begin
else
begin
// Suppose system is running a 32-bit version of Windows then no need to check HKLM64 in RegQueryStringValue
- // So IsWin64 - will make sure its should only execute on 64-bit veersion of windows.
+ // So IsWin64 - will make sure its should only execute on 64-bit version of windows.
if IsWin64 then
begin
// Check if pgAdmin 64 bit is already installed
diff --git a/requirements.txt b/requirements.txt
index c42270821..1623c0a5a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -56,3 +56,4 @@ azure-mgmt-rdbms==10.1.0
azure-mgmt-resource==21.0.0
azure-mgmt-subscription==3.0.0
azure-identity==1.9.0
+psycopg==3.1.0
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
index 3eb369f49..675927036 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
@@ -473,7 +473,7 @@ class DatabaseView(PGChildNodeView):
SQL = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
did=did, conn=self.conn, last_system_oid=0,
- show_system_objects=self.blueprint.show_system_objects,
+ show_system_objects=self.blueprint.show_system_objects
)
status, res = self.conn.execute_dict(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py
index 8d9fa3686..7e7a46f8a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/__init__.py
@@ -348,7 +348,8 @@ class CastView(PGChildNodeView, SchemaDiffObjectCompare):
"/".join([self.template_path, self._PROPERTIES_SQL]),
cid=cid,
datlastsysoid=last_system_oid,
- showsysobj=self.blueprint.show_system_objects
+ showsysobj=self.blueprint.show_system_objects,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -408,7 +409,8 @@ class CastView(PGChildNodeView, SchemaDiffObjectCompare):
srctyp=data['srctyp'],
trgtyp=data['trgtyp'],
datlastsysoid=last_system_oid,
- showsysobj=self.blueprint.show_system_objects
+ showsysobj=self.blueprint.show_system_objects,
+ conn=self.conn
)
status, cid = self.conn.execute_scalar(sql)
if not status:
@@ -584,7 +586,8 @@ class CastView(PGChildNodeView, SchemaDiffObjectCompare):
"/".join([self.template_path, self._PROPERTIES_SQL]),
cid=cid,
datlastsysoid=last_system_oid,
- showsysobj=self.blueprint.show_system_objects
+ showsysobj=self.blueprint.show_system_objects,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -599,7 +602,7 @@ class CastView(PGChildNodeView, SchemaDiffObjectCompare):
old_data = res['rows'][0]
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=self.conn
)
return sql, data['name'] if 'name' in data else old_data['name']
else:
@@ -630,7 +633,8 @@ class CastView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template("/".join([self.template_path,
self._FUNCTIONS_SQL]),
srctyp=data['srctyp'],
- trgtyp=data['trgtyp'])
+ trgtyp=data['trgtyp'],
+ conn=self.conn)
status, rset = self.conn.execute_dict(sql)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/create.sql
index 25f12945e..38fb177f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/create.sql
@@ -11,5 +11,5 @@ CREATE CAST ({{ conn|qtTypeIdent(data.srctyp) }} AS {{ conn|qtTypeIdent(data.trg
{# Description for CAST #}
{% if data.description %}
COMMENT ON CAST ({{ conn|qtTypeIdent(data.srctyp) }} AS {{ conn|qtTypeIdent(data.trgtyp) }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/functions.sql b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/functions.sql
index 60e6e3568..8ab6f00ea 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/functions.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/functions.sql
@@ -6,8 +6,8 @@ SELECT
FROM
pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid=p.pronamespace
WHERE
- proargtypes[0] = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{srctyp|qtLiteral}})
- AND prorettype = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{trgtyp|qtLiteral}})
+ proargtypes[0] = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{srctyp|qtLiteral(conn)}})
+ AND prorettype = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{trgtyp|qtLiteral(conn)}})
AND CASE
WHEN pg_catalog.array_length(proargtypes,1) = 2 THEN
proargtypes[1] = 23
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/properties.sql
index db1b8d5be..1d949e1be 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/properties.sql
@@ -3,8 +3,8 @@
SELECT
ca.oid
FROM pg_catalog.pg_cast ca
- WHERE ca.castsource = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{srctyp|qtLiteral}})
- AND ca.casttarget = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{trgtyp|qtLiteral}})
+ WHERE ca.castsource = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{srctyp|qtLiteral(conn)}})
+ AND ca.casttarget = (SELECT t.oid FROM pg_catalog.pg_type t WHERE pg_catalog.format_type(t.oid, NULL) = {{trgtyp|qtLiteral(conn)}})
{% if datlastsysoid %}
AND ca.oid > {{datlastsysoid}}::OID
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/update.sql
index e0bd4e82d..ae3418f53 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/templates/casts/sql/default/update.sql
@@ -2,5 +2,5 @@
{% if data and 'description' in data and data.description != o_data.description %}
COMMENT ON CAST ({{ conn|qtTypeIdent(o_data.srctyp) }} AS {{ conn|qtTypeIdent(o_data.trgtyp) }})
- IS {{ data.description|qtLiteral }};
-{% endif %}
\ No newline at end of file
+ IS {{ data.description|qtLiteral(conn) }};
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/cast_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/cast_test_data.json
index 8bba162c0..4fcf78c8e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/cast_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/cast_test_data.json
@@ -88,7 +88,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -110,7 +110,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "Exception('Mocked Exception Message')"
},
"expected_data": {
@@ -153,7 +153,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -186,7 +186,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -249,7 +249,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -292,7 +292,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -315,7 +315,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "Exception('Mocked Exception Message')"
},
"expected_data": {
@@ -402,7 +402,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -425,7 +425,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -552,7 +552,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -575,7 +575,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -639,7 +639,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -661,7 +661,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "Exception('Mocked Exception Message')"
},
"expected_data": {
@@ -727,7 +727,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -749,7 +749,7 @@
"test_data": {},
"mocking_required": false,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/utils.py
index 8fbd0ac8d..2ef30dd2a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/utils.py
@@ -158,11 +158,11 @@ def create_cast(server, source_type, target_type):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute("CREATE CAST (%s AS %s) WITHOUT"
" FUNCTION AS IMPLICIT" % (source_type, target_type))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created cast
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/get_oid.sql
index fac696092..8f5c225cb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/get_oid.sql
@@ -1,5 +1,5 @@
{# The Sql below will provide oid for newly created event_trigger #}
{% if data %}
SELECT e.oid from pg_catalog.pg_event_trigger e
-WHERE e.evtname = {{ data.name|qtLiteral }}
+WHERE e.evtname = {{ data.name|qtLiteral(conn) }}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/grant.sql b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/grant.sql
index b8f47b882..7dedb64fc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/grant.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/templates/event_triggers/sql/default/grant.sql
@@ -13,7 +13,7 @@ ALTER EVENT TRIGGER {{ conn|qtIdent(data.name) }}
{% if data.comment %}
COMMENT ON EVENT TRIGGER {{ conn|qtIdent(data.name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% if data.seclabels and data.seclabels|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/event_triggers_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/event_triggers_test_data.json
index c067a572f..2fedc979b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/event_triggers_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/event_triggers_test_data.json
@@ -86,7 +86,7 @@
],
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while creating a event trigger')"
},
"expected_data": {
@@ -114,7 +114,7 @@
],
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True), (False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -138,7 +138,7 @@
],
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True), (True, True), (False, 'Mocked Internal Server Error while getting oid of created event trigger')"
},
"expected_data": {
@@ -188,7 +188,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger')"
},
"expected_data": {
@@ -226,7 +226,7 @@
"event_trigger_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger')"
},
"expected_data": {
@@ -252,7 +252,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a event trigger')"
},
"expected_data": {
@@ -278,7 +278,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error while deleting a event trigger')"
},
"expected_data": {
@@ -312,7 +312,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger')"
},
"expected_data": {
@@ -394,7 +394,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger nodes')"
},
"expected_data": {
@@ -420,7 +420,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger nodes')"
},
"expected_data": {
@@ -446,7 +446,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger sql')"
},
"expected_data": {
@@ -460,7 +460,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while fetching a DB created Event Trigger sql')"
},
"expected_data": {
@@ -509,7 +509,7 @@
"event_trigger_functions": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a event trigger functions')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/utils.py
index ce225106b..5f1302932 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/utils.py
@@ -13,7 +13,8 @@ import traceback
import os
import json
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
from regression.python_test_utils import test_utils as utils
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
@@ -46,12 +47,12 @@ def create_event_trigger(server, db_name, schema_name, func_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute('''CREATE EVENT TRIGGER "%s" ON DDL_COMMAND_END
EXECUTE PROCEDURE "%s"."%s"()''' % (trigger_name, schema_name,
func_name))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created event trigger
pg_cursor.execute(
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/__init__.py
index f198b6b86..79ea56fc2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/extensions/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/__init__.py
@@ -158,7 +158,8 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
Fetches all extensions properties and render into properties tab
"""
SQL = render_template("/".join([self.template_path,
- self._PROPERTIES_SQL]))
+ self._PROPERTIES_SQL]),
+ conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
@@ -175,7 +176,8 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
"""
res = []
SQL = render_template("/".join([self.template_path,
- self._PROPERTIES_SQL]))
+ self._PROPERTIES_SQL]),
+ conn=self.conn)
status, rset = self.conn.execute_2darray(SQL)
if not status:
return internal_server_error(errormsg=rset)
@@ -201,7 +203,7 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
"""
SQL = render_template("/".join([self.template_path,
self._PROPERTIES_SQL]),
- eid=eid)
+ eid=eid, conn=self.conn)
status, rset = self.conn.execute_2darray(SQL)
if not status:
return internal_server_error(errormsg=rset)
@@ -241,7 +243,8 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
:return:
"""
SQL = render_template("/".join(
- [self.template_path, self._PROPERTIES_SQL]), eid=eid)
+ [self.template_path, self._PROPERTIES_SQL]), eid=eid,
+ conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
return False, internal_server_error(errormsg=res)
@@ -424,7 +427,7 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
if eid is not None:
SQL = render_template("/".join(
[self.template_path, self._PROPERTIES_SQL]
- ), eid=eid)
+ ), eid=eid, conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -483,7 +486,7 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
"""
SQL = render_template("/".join(
[self.template_path, self._PROPERTIES_SQL]
- ), eid=eid)
+ ), eid=eid, conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -557,7 +560,8 @@ class ExtensionView(PGChildNodeView, SchemaDiffObjectCompare):
res = dict()
sql = render_template("/".join([self.template_path,
- self._PROPERTIES_SQL]))
+ self._PROPERTIES_SQL]),
+ conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=rset)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/templates/extensions/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/extensions/templates/extensions/sql/properties.sql
index 62f0ea838..02466b8e7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/extensions/templates/extensions/sql/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/templates/extensions/sql/properties.sql
@@ -11,7 +11,7 @@ FROM
{%- if eid %}
WHERE x.oid = {{eid}}::oid
{% elif ename %}
- WHERE x.extname = {{ename|qtLiteral}}::text
+ WHERE x.extname = {{ename|qtLiteral(conn)}}::text
{% else %}
ORDER BY x.extname
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/utils.py
index f8ae91ede..f62df5bef 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/utils.py
@@ -11,7 +11,8 @@
import sys
import traceback
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
def get_extension_data(schema_name):
@@ -45,12 +46,12 @@ def create_extension(server, db_name, extension_name, schema_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
'''CREATE EXTENSION "%s" SCHEMA "%s"''' % (extension_name,
schema_name))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created extension
pg_cursor.execute("SELECT oid FROM pg_catalog.pg_extension "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/utils.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/utils.py
index 4a1758bef..e8c3118f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/extensions/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/utils.py
@@ -28,7 +28,7 @@ def get_extension_details(conn, ename, properties_sql=None):
[ExtensionView.EXT_TEMPLATE_PATH, 'properties.sql'])
status, rset = conn.execute_dict(
- render_template(properties_sql, ename=ename)
+ render_template(properties_sql, ename=ename, conn=conn)
)
if status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py
index 8db8f2ecb..a09c89639 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py
@@ -394,7 +394,7 @@ class ForeignDataWrapperView(PGChildNodeView, SchemaDiffObjectCompare):
)
sql = render_template("/".join([self.template_path, self._ACL_SQL]),
- fid=fid
+ fid=fid, conn=self.conn
)
status, fdw_acl_res = self.conn.execute_dict(sql)
@@ -815,7 +815,7 @@ class ForeignDataWrapperView(PGChildNodeView, SchemaDiffObjectCompare):
is_valid_options = True
sql = render_template("/".join([self.template_path, self._ACL_SQL]),
- fid=fid)
+ fid=fid, conn=self.conn)
status, fdw_acl_res = self.conn.execute_dict(sql)
if not status:
return internal_server_error(errormsg=fdw_acl_res)
@@ -969,7 +969,7 @@ class ForeignDataWrapperView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template("/".join([self.template_path,
self._PROPERTIES_SQL]),
- schema_diff=True)
+ schema_diff=True, conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=rset)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py
index 2c776fb85..285bc9974 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py
@@ -382,7 +382,7 @@ class ForeignServerView(PGChildNodeView, SchemaDiffObjectCompare):
)
sql = render_template("/".join([self.template_path, self._ACL_SQL]),
- fsid=fsid
+ fsid=fsid, conn=self.conn
)
status, fs_rv_acl_res = self.conn.execute_dict(sql)
if not status:
@@ -930,7 +930,7 @@ class ForeignServerView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template("/".join([self.template_path,
self._PROPERTIES_SQL]),
- schema_diff=True)
+ schema_diff=True, conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=rset)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/acl.sql
index 71735320c..e3660a6d4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/acl.sql
@@ -11,7 +11,7 @@ FROM
LEFT OUTER JOIN pg_catalog.pg_shdescription descr ON (
fsrv.oid=descr.objoid AND descr.classoid='pg_foreign_server'::regclass)
{% if fsid %}
- WHERE fsrv.oid = {{ fsid|qtLiteral }}::OID
+ WHERE fsrv.oid = {{ fsid|qtLiteral(conn) }}::OID
{% endif %}
) acl,
pg_catalog.aclexplode(srvacl) d
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/create.sql
index d2e63d83d..a8ae9020a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/create.sql
@@ -3,15 +3,15 @@
{% if data.name %}
CREATE SERVER {{ conn|qtIdent(data.name) }}{% if data.fsrvtype %}
- TYPE {{ data.fsrvtype|qtLiteral }}{% endif %}{% if data.fsrvversion %}
+ TYPE {{ data.fsrvtype|qtLiteral(conn) }}{% endif %}{% if data.fsrvversion %}
- VERSION {{ data.fsrvversion|qtLiteral }}{%-endif %}{% if fdwdata %}
+ VERSION {{ data.fsrvversion|qtLiteral(conn) }}{%-endif %}{% if fdwdata %}
FOREIGN DATA WRAPPER {{ conn|qtIdent(fdwdata.name) }}{% endif %}{% if data.fsrvoptions %}
{% if is_valid_options %}
OPTIONS ({% for variable in data.fsrvoptions %}{% if loop.index != 1 %}, {% endif %}
-{{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral }}{% endfor %}){% endif %}{% endif %};
+{{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral(conn) }}{% endfor %}){% endif %}{% endif %};
{# ============= Set the owner for foreign server ============= #}
{% if data.fsrvowner %}
@@ -22,7 +22,7 @@ ALTER SERVER {{ conn|qtIdent(data.name) }}
{% if data.description %}
COMMENT ON SERVER {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= Set the ACL for foreign server ============= #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/properties.sql
index 3fd87ac1e..8208bebac 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/properties.sql
@@ -12,9 +12,9 @@ FROM pg_catalog.pg_foreign_server srv
LEFT OUTER JOIN pg_catalog.pg_foreign_data_wrapper fdw on fdw.oid=srvfdw
LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=srv.oid AND des.objsubid=0 AND des.classoid='pg_foreign_server'::regclass)
{% if data and fdwdata %}
-WHERE fdw.fdwname = {{ fdwdata.name|qtLiteral }}::text and srvname = {{ data.name|qtLiteral }}::text
+WHERE fdw.fdwname = {{ fdwdata.name|qtLiteral(conn) }}::text and srvname = {{ data.name|qtLiteral(conn) }}::text
{% elif fdwdata %}
-WHERE fdw.fdwname = {{fdwdata.name|qtLiteral}}::text
+WHERE fdw.fdwname = {{fdwdata.name|qtLiteral(conn)}}::text
{% endif %}
{% if fid %}
WHERE srvfdw={{fid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/update.sql
index 1ac494aaa..d3cb005fa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/templates/foreign_servers/sql/default/update.sql
@@ -20,14 +20,14 @@ DROP SERVER {{ conn|qtIdent(o_data.name) }};
CREATE SERVER {{ conn|qtIdent(o_data.name) }}{% if fsrvtype %}
- TYPE {{ fsrvtype|qtLiteral }}{% endif %}{% if fsrvversion %}
+ TYPE {{ fsrvtype|qtLiteral(conn) }}{% endif %}{% if fsrvversion %}
- VERSION {{ fsrvversion|qtLiteral }}{%-endif %}{% if fdwname %}
+ VERSION {{ fsrvversion|qtLiteral(conn) }}{%-endif %}{% if fdwname %}
FOREIGN DATA WRAPPER {{ conn|qtIdent(fdwname) }}{% endif %}{% if o_data.fsrvoptions %}
OPTIONS ({% for variable in o_data.fsrvoptions %}{% if loop.index != 1 %}, {% endif %}
-{{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral }}{% endfor %}){% endif %};
+{{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral(conn) }}{% endfor %}){% endif %};
ALTER SERVER {{ conn|qtIdent(o_data.name) }}
OWNER TO {{ conn|qtIdent(o_data.fsrvowner) }};
@@ -49,13 +49,13 @@ ALTER SERVER {{ conn|qtIdent(data.name) }}
{# ============= Update foreign server version ============= #}
{% if data.fsrvversion is defined and data.fsrvversion is not none and data.fsrvversion != o_data.fsrvversion %}
ALTER SERVER {{ conn|qtIdent(data.name) }}
- VERSION {{ data.fsrvversion|qtLiteral }};
+ VERSION {{ data.fsrvversion|qtLiteral(conn) }};
{% endif %}
{# ============= Update foreign server comments ============= #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON SERVER {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= Update foreign server options and values ============= #}
@@ -70,7 +70,7 @@ DROP {{ conn|qtIdent(variable.fsrvoption) }}{% endfor %}
{% if is_valid_added_options %}
ALTER SERVER {{ conn|qtIdent(data.name) }}
OPTIONS ({% for variable in data.fsrvoptions.added %}{% if loop.index != 1 %}, {% endif %}
-ADD {{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral }}{% endfor %}
+ADD {{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
@@ -79,7 +79,7 @@ ADD {{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral }}{%
{% if is_valid_changed_options %}
ALTER SERVER {{ conn|qtIdent(data.name) }}
OPTIONS ({% for variable in data.fsrvoptions.changed %}{% if loop.index != 1 %}, {% endif %}
-SET {{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral }}{% endfor %}
+SET {{ conn|qtIdent(variable.fsrvoption) }} {{ variable.fsrvvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/foreign_servers_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/foreign_servers_test_data.json
index fd2eea9a3..a6dfb7f4a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/foreign_servers_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/foreign_servers_test_data.json
@@ -43,7 +43,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -58,7 +58,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while creating a foreign server')"
},
"expected_data": {
@@ -84,7 +84,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -156,7 +156,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching foreign server nodes')"
},
"expected_data": {
@@ -182,7 +182,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching foreign server nodes')"
},
"expected_data": {
@@ -216,7 +216,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error while fetching a foreign server')]"
},
"expected_data": {
@@ -242,7 +242,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a foreign server')"
},
"expected_data": {
@@ -279,7 +279,7 @@
"foreign_server_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a foreign server')"
},
"expected_data": {
@@ -305,7 +305,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a foreign server')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/utils.py
index 68351a4c1..5a7321174 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/tests/utils.py
@@ -13,7 +13,8 @@ import sys
import uuid
import json
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
file_name = os.path.basename(__file__)
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
@@ -74,14 +75,14 @@ def create_fsrv(server, db_name, fsrv_name, fdw_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute("CREATE SERVER {0} FOREIGN DATA WRAPPER {1} OPTIONS "
"(host '{2}', dbname '{3}', port '{4}')".format
(fsrv_name, fdw_name, server['host'], db_name,
server['port']))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created foreign server
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/create.sql
index 3df2d146a..6a72133e1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/create.sql
@@ -3,4 +3,4 @@
CREATE USER MAPPING FOR {% if data.name == "CURRENT_USER" or data.name == "PUBLIC" %}{{ data.name }}{% else %}{{ conn|qtIdent(data.name) }}{% endif %} SERVER {{ conn|qtIdent(fdwdata.name) }}{%endif%}{% if data.umoptions %}{% if is_valid_options %}
OPTIONS ({% for variable in data.umoptions %}{% if loop.index != 1 %}, {% endif %}
-{{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral }}{% endfor %}){% endif %}{% endif %};
+{{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral(conn) }}{% endfor %}){% endif %}{% endif %};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/update.sql
index 416c29d96..fe6eaadf2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/templates/user_mappings/sql/default/update.sql
@@ -10,7 +10,7 @@ DROP {{ conn|qtIdent(variable.umoption) }}{% endfor %}
{% if is_valid_added_options %}
ALTER USER MAPPING FOR {{ conn|qtIdent(o_data.name) }} SERVER {{ conn|qtIdent(fdwdata.name) }}
OPTIONS ({% for variable in data.umoptions.added %}{% if loop.index != 1 %}, {% endif %}
-ADD {{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral }}{% endfor %}
+ADD {{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
@@ -19,8 +19,8 @@ ADD {{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral }}{% end
{% if is_valid_changed_options %}
ALTER USER MAPPING FOR {{ conn|qtIdent(o_data.name) }} SERVER {{ conn|qtIdent(fdwdata.name) }}
OPTIONS ({% for variable in data.umoptions.changed %}{% if loop.index != 1 %}, {% endif %}
-SET {{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral }}{% endfor %}
+SET {{ conn|qtIdent(variable.umoption) }} {{ variable.umvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/user_mapping_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/user_mapping_test_data.json
index b90ac63c3..87e2076a4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/user_mapping_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/user_mapping_test_data.json
@@ -19,7 +19,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while creating a user mapping')"
},
"expected_data": {
@@ -59,7 +59,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -85,7 +85,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -124,7 +124,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while deleting a user mapping')"
},
"expected_data": {
@@ -184,7 +184,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching user mapping nodes')"
},
"expected_data": {
@@ -210,7 +210,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching user mapping nodes')"
},
"expected_data": {
@@ -260,7 +260,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error while fetching a user mapping')]"
},
"expected_data": {
@@ -286,7 +286,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a user mapping')"
},
"expected_data": {
@@ -323,7 +323,7 @@
"um_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a user mapping')"
},
"expected_data": {
@@ -349,7 +349,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a user mapping')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/utils.py
index 2942a68e4..fd516de35 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/tests/utils.py
@@ -13,7 +13,8 @@ import sys
import traceback
import json
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
with open(CURRENT_PATH + "/user_mapping_test_data.json") as data_file:
@@ -58,7 +59,7 @@ def create_user_mapping(server, db_name, fsrv_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE USER MAPPING FOR %s SERVER %s OPTIONS" \
" (user '%s', password '%s')" % (server['username'],
@@ -67,7 +68,7 @@ def create_user_mapping(server, db_name, fsrv_name):
server['db_password']
)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created user mapping
pg_cursor.execute(
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/acl.sql
index c4fc13910..3bd1d0129 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/acl.sql
@@ -11,7 +11,7 @@ FROM
LEFT OUTER JOIN pg_catalog.pg_shdescription descr ON (
fdw.oid=descr.objoid AND descr.classoid='pg_foreign_data_wrapper'::regclass)
{% if fid %}
- WHERE fdw.oid = {{ fid|qtLiteral }}::OID
+ WHERE fdw.oid = {{ fid|qtLiteral(conn) }}::OID
{% endif %}
) acl,
pg_catalog.aclexplode(fdwacl) d
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/create.sql
index a29fd75b1..8285ecab2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/create.sql
@@ -9,7 +9,7 @@ CREATE FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}{% if data.fdwvalue %}
{% if is_valid_options %}
OPTIONS ({% for variable in data.fdwoptions %}{% if loop.index != 1 %}, {% endif %}
-{{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral }}{% endfor %}){% endif %}{% endif %};
+{{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral(conn) }}{% endfor %}){% endif %}{% endif %};
{# ============= Set the owner for foreign data wrapper ============= #}
{% if data.fdwowner %}
@@ -20,7 +20,7 @@ ALTER FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
{# ============= Comment on of foreign data wrapper object ============= #}
{% if data.description %}
COMMENT ON FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= Create ACL for foreign data wrapper ============= #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/properties.sql
index 1c21a5583..0a7881f65 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/properties.sql
@@ -21,7 +21,7 @@ FROM pg_catalog.pg_foreign_data_wrapper fdw
WHERE fdw.oid={{fid}}::oid
{% endif %}
{% if fname %}
-WHERE fdw.fdwname={{ fname|qtLiteral }}::text
+WHERE fdw.fdwname={{ fname|qtLiteral(conn) }}::text
{% endif %}
{% if schema_diff %}
WHERE CASE WHEN (SELECT COUNT(*) FROM pg_catalog.pg_depend
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/update.sql
index aeae3f79d..297fdc558 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/templates/foreign_data_wrappers/sql/default/update.sql
@@ -37,7 +37,7 @@ ALTER FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
{# ============= Update foreign data wrapper comments ============= #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= Update foreign data wrapper options and values ============= #}
@@ -52,7 +52,7 @@ DROP {{ conn|qtIdent(variable.fdwoption) }}{% endfor %}
{% if is_valid_added_options %}
ALTER FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
OPTIONS ({% for variable in data.fdwoptions.added %}{% if loop.index != 1 %}, {% endif %}
-ADD {{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral }}{% endfor %}
+ADD {{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
@@ -61,7 +61,7 @@ ADD {{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral }}{% e
{% if is_valid_changed_options %}
ALTER FOREIGN DATA WRAPPER {{ conn|qtIdent(data.name) }}
OPTIONS ({% for variable in data.fdwoptions.changed %}{% if loop.index != 1 %}, {% endif %}
-SET {{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral }}{% endfor %}
+SET {{ conn|qtIdent(variable.fdwoption) }} {{ variable.fdwvalue|qtLiteral(conn) }}{% endfor %}
);
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/fdw_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/fdw_test_data.json
index 6137b5762..8151d4129 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/fdw_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/fdw_test_data.json
@@ -19,7 +19,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while creating a foreign data wrapper')"
},
"expected_data": {
@@ -34,7 +34,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, True), (False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -94,7 +94,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a fdw')"
},
"expected_data": {
@@ -108,7 +108,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True), (False, 'Mocked Internal Server Error while deleting a fdw')"
},
"expected_data": {
@@ -158,7 +158,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fdw nodes')"
},
"expected_data": {
@@ -184,7 +184,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fdw nodes')"
},
"expected_data": {
@@ -222,7 +222,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching handlers')"
},
"expected_data": {
@@ -248,7 +248,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching handlers')"
},
"expected_data": {
@@ -282,7 +282,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while updating fdw')"
},
"expected_data": {
@@ -308,7 +308,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fdw')"
},
"expected_data": {
@@ -346,7 +346,7 @@
"fdw_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fdw')"
},
"expected_data": {
@@ -372,7 +372,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/utils.py
index b58ce65d0..24e69af0d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/tests/utils.py
@@ -14,7 +14,8 @@ import uuid
import json
import os
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
with open(CURRENT_PATH + "/fdw_test_data.json") as data_file:
@@ -66,11 +67,11 @@ def create_fdw(server, db_name, fdw_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute('''CREATE FOREIGN DATA WRAPPER "%s"
OPTIONS (op1 '5')''' % fdw_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created foreign data wrapper
pg_cursor.execute(
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
index 71746a57c..67bdf36eb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
@@ -260,7 +260,8 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
did: Database ID
"""
sql = render_template("/".join([self.template_path,
- self._PROPERTIES_SQL]))
+ self._PROPERTIES_SQL]),
+ conn=self.conn)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -283,7 +284,8 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
"""
res = []
sql = render_template("/".join([self.template_path,
- self._PROPERTIES_SQL]))
+ self._PROPERTIES_SQL]),
+ conn=self.conn)
status, result = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=result)
@@ -315,7 +317,8 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
"""
sql = render_template("/".join([self.template_path,
self._PROPERTIES_SQL]),
- lid=lid)
+ lid=lid,
+ conn=self.conn)
status, result = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=result)
@@ -362,7 +365,7 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
"""
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- lid=lid
+ lid=lid, conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -378,7 +381,7 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._ACL_SQL]),
- lid=lid
+ lid=lid, conn=self.conn
)
status, result = self.conn.execute_dict(sql)
if not status:
@@ -631,7 +634,8 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
if lid is not None:
sql = render_template(
- "/".join([self.template_path, self._PROPERTIES_SQL]), lid=lid
+ "/".join([self.template_path, self._PROPERTIES_SQL]), lid=lid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -722,7 +726,7 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
"""
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- lid=lid
+ lid=lid, conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -736,7 +740,7 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._ACL_SQL]),
- lid=lid
+ lid=lid, conn=self.conn
)
status, result = self.conn.execute_dict(sql)
if not status:
@@ -826,7 +830,8 @@ class LanguageView(PGChildNodeView, SchemaDiffObjectCompare):
res = dict()
sql = render_template("/".join([self.template_path,
self._PROPERTIES_SQL]),
- schema_diff=True)
+ schema_diff=True,
+ conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=rset)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
index 219165e06..a4d2acb1d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
@@ -10,7 +10,7 @@ FROM
FROM
(SELECT lanacl FROM pg_catalog.pg_language lan
LEFT OUTER JOIN pg_catalog.pg_shdescription descr ON (lan.oid=descr.objoid AND descr.classoid='pg_language'::regclass)
- WHERE lan.oid = {{ lid|qtLiteral }}::OID
+ WHERE lan.oid = {{ lid|qtLiteral(conn) }}::OID
) acl,
pg_catalog.aclexplode(lanacl) d
) d
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/create.sql
index c353fdea0..ab2e7abf7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/create.sql
@@ -23,7 +23,7 @@ ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
{# ============= Comment on of language object ============= #}
{% if data.description %}
COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= Create ACL for language ============= #}
{% if data.lanacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/properties.sql
index 664e2734a..423b5ebe4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/properties.sql
@@ -18,7 +18,7 @@ WHERE lanispl IS TRUE
lan.oid={{lid}}::oid
{% endif %}
{% if lanname %} AND
- lanname={{ lanname|qtLiteral }}::text
+ lanname={{ lanname|qtLiteral(conn) }}::text
{% endif %}
{% if schema_diff %}
AND CASE WHEN (SELECT COUNT(*) FROM pg_catalog.pg_depend
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
index 363578974..f85b858b2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
@@ -24,7 +24,7 @@ ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
{% if data.description %}
COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ============= PRIVILEGES on LANGUAGE ============= #}
{% if data.lanacl and data.lanacl|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/language_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/language_test_data.json
index 3e928dec1..28f3c96c9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/language_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/language_test_data.json
@@ -65,7 +65,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -88,7 +88,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, True), (False, 'Mocked Internal Server Error')"
}
}
@@ -127,7 +127,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -142,7 +142,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PLACE_HOLDER"
}
},
@@ -156,7 +156,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -171,7 +171,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
}
@@ -197,7 +197,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -223,7 +223,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
}
}
@@ -270,7 +270,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PLACE_HOLDER"
},
"expected_data": {
@@ -312,7 +312,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
}
@@ -346,7 +346,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -362,7 +362,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
}
}
@@ -409,7 +409,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
}
},
@@ -424,7 +424,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True), (False, 'Mocked Internal Server Error')"
}
}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_delete.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_delete.py
index f785df836..ff819a013 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_delete.py
@@ -53,7 +53,7 @@ class LanguagesDeleteTestCase(BaseTestGenerator):
expected_status_code = self.expected_data['status_code']
elif self.error_in_deleting_language:
- # with patch('pgadmin.utils.driver.psycopg2.connection.Connection'
+ # with patch('pgadmin.utils.driver.psycopg3.connection.Connection'
# '.execute_scalar',
# side_effect=[(True, True), (
# False, self.expected_data["message"])]):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/publications/tests/publication_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/publications/tests/publication_test_data.json
index ba3473eb4..1b91e7c44 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/publications/tests/publication_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/publications/tests/publication_test_data.json
@@ -81,7 +81,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -104,7 +104,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, True)(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -129,7 +129,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -154,7 +154,7 @@
"database_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -197,7 +197,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -234,7 +234,7 @@
"database_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -259,7 +259,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -323,7 +323,7 @@
"id": "PLACE_HOLDER"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -375,7 +375,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -388,7 +388,7 @@
"is_positive_test": true,
"mocking_required": false,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/publications/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/publications/tests/utils.py
index 6812f9782..0a3160403 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/publications/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/publications/tests/utils.py
@@ -59,12 +59,12 @@ def create_publication(server, db_name, publication_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE publication %s FOR ALL TABLES" % \
(publication_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get role oid of newly added publication
pg_cursor.execute("select oid from pg_catalog.pg_publication pub "
@@ -139,11 +139,11 @@ def delete_publication(server, db_name, publication_name):
publication_count = pg_cursor.fetchone()
if publication_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "DROP publication %s" % publication_name
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
index 09a82b398..df9982b53 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
@@ -412,7 +412,8 @@ class SchemaView(PGChildNodeView):
SQL = render_template(
"/".join([self.template_path, 'sql/acl.sql']),
_=gettext,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, acl = self.conn.execute_dict(SQL)
if not status:
@@ -518,7 +519,8 @@ class SchemaView(PGChildNodeView):
show_sysobj=show_system_objects,
_=gettext,
scid=scid,
- schema_restrictions=param
+ schema_restrictions=param,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(SQL)
@@ -578,7 +580,8 @@ class SchemaView(PGChildNodeView):
"/".join([self.template_path, self._SQL_PREFIX + self._NODES_SQL]),
show_sysobj=self.blueprint.show_system_objects,
_=gettext,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(SQL)
@@ -663,6 +666,17 @@ It may have been removed by another user.
request.data, encoding='utf-8'
)
+ for k, v in data.items():
+ try:
+ # comments should be taken as is because if user enters a
+ # json comment it is parsed by loads which should not happen
+ if k in ('comment',):
+ data[k] = v
+ else:
+ data[k] = json.loads(v, encoding='utf-8')
+ except (ValueError, TypeError, KeyError):
+ data[k] = v
+
required_args = {
'name': 'Name'
}
@@ -695,7 +709,7 @@ It may have been removed by another user.
# below sql will gives the same
SQL = render_template(
"/".join([self.template_path, 'sql/oid.sql']),
- schema=data['name'], _=gettext
+ schema=data['name'], _=gettext, conn=self.conn
)
status, scid = self.conn.execute_scalar(SQL)
@@ -991,7 +1005,7 @@ It may have been removed by another user.
SQL = render_template(
"/".join([self.template_path, 'sql/is_catalog.sql']),
- scid=kwargs['scid'], _=gettext
+ scid=kwargs['scid'], _=gettext, conn=self.conn
)
status, res = self.conn.execute_dict(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
index 0a4cbcb0d..6c5a80981 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
@@ -487,7 +487,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
# We need oid to add object in tree at browser
SQL = render_template(
- "/".join([self.template_path, self._OID_SQL]), data=data
+ "/".join([self.template_path, self._OID_SQL]), data=data,
+ conn=self.conn
)
status, coid = self.conn.execute_scalar(SQL)
if not status:
@@ -495,7 +496,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare):
# Get updated schema oid
SQL = render_template(
- "/".join([self.template_path, self._OID_SQL]), coid=coid
+ "/".join([self.template_path, self._OID_SQL]), coid=coid,
+ conn=self.conn
)
status, new_scid = self.conn.execute_scalar(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/create.sql
index 8d29fcb67..7e23cc1c5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/create.sql
@@ -2,11 +2,11 @@
CREATE COLLATION{% if add_not_exists_clause %} IF NOT EXISTS{% endif %} {{ conn|qtIdent(data.schema, data.name) }}
{# if user has provided lc_collate & lc_type #}
{% if data.lc_collate and data.lc_type %}
- (LC_COLLATE = {{ data.lc_collate|qtLiteral }}, LC_CTYPE = {{ data.lc_type|qtLiteral }});
+ (LC_COLLATE = {{ data.lc_collate|qtLiteral(conn) }}, LC_CTYPE = {{ data.lc_type|qtLiteral(conn) }});
{% endif %}
{# if user has provided locale only #}
{% if data.locale %}
- (LOCALE = {{ data.locale|qtLiteral }});
+ (LOCALE = {{ data.locale|qtLiteral(conn) }});
{% endif %}
{# if user has choosed to copy from existing collation #}
{% if data.copy_collation %}
@@ -20,6 +20,6 @@ ALTER COLLATION {{ conn|qtIdent(data.schema, data.name) }}
{% if data.description %}
COMMENT ON COLLATION {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/get_oid.sql
index 9ea30952d..6a1f140bb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/get_oid.sql
@@ -3,8 +3,8 @@
SELECT c.oid
FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n
WHERE c.collnamespace=n.oid AND
- n.nspname = {{ data.schema|qtLiteral }} AND
- c.collname = {{ data.name|qtLiteral }}
+ n.nspname = {{ data.schema|qtLiteral(conn) }} AND
+ c.collname = {{ data.name|qtLiteral(conn) }}
{% elif coid %}
SELECT
c.collnamespace as scid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
index e84f28f27..174d3327d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql
@@ -8,10 +8,10 @@ DROP COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }};
CREATE COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}
{% if data.lc_collate and data.lc_type %}
- (LC_COLLATE = {{ data.lc_collate|qtLiteral }}, LC_CTYPE = {{ data.lc_type|qtLiteral }});
+ (LC_COLLATE = {{ data.lc_collate|qtLiteral(conn) }}, LC_CTYPE = {{ data.lc_type|qtLiteral(conn) }});
{% endif %}
{% if data.locale %}
- (LOCALE = {{ data.locale|qtLiteral }});
+ (LOCALE = {{ data.locale|qtLiteral(conn) }});
{% endif %}
{% if data.copy_collation %}
FROM {{ data.copy_collation }};
@@ -28,7 +28,7 @@ ALTER COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}
{# Change object's comment #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# Change object name #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/collations_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/collations_test_data.json
index 187d72e7e..0d66fae14 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/collations_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/collations_test_data.json
@@ -65,7 +65,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True), (False, 'Mocked Internal Server Error while getting oid of created collation')"
},
"expected_data": {
@@ -85,7 +85,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -111,7 +111,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a collation')"
},
"expected_data": {
@@ -149,7 +149,7 @@
"collation_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a collation')"
},
"expected_data": {
@@ -175,7 +175,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while deleting a collation')"
},
"expected_data": {
@@ -201,7 +201,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a collation')"
},
"expected_data": {
@@ -235,7 +235,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while fetching a collation')"
},
"expected_data": {
@@ -253,7 +253,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a collation')"
},
"expected_data": {
@@ -301,7 +301,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching collation nodes')"
},
"expected_data": {
@@ -327,7 +327,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching collation nodes')"
},
"expected_data": {
@@ -352,7 +352,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching collations')"
},
"expected_data": {
@@ -390,7 +390,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a collation sql')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
index 8011eda39..4019a99c9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
@@ -598,7 +598,8 @@ AND relkind != 'c'))"""
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
basensp=data['basensp'],
- name=data['name'])
+ name=data['name'],
+ conn=self.conn)
status, doid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=doid)
@@ -606,7 +607,8 @@ AND relkind != 'c'))"""
# Get updated schema oid
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- doid=doid)
+ doid=doid,
+ conn=self.conn)
status, scid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=scid)
@@ -706,7 +708,8 @@ AND relkind != 'c'))"""
# Get Schema Id
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- doid=doid)
+ doid=doid,
+ conn=self.conn)
status, scid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=scid)
@@ -836,7 +839,7 @@ AND relkind != 'c'))"""
SQL = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data)
+ data=data, o_data=old_data, conn=self.conn)
return SQL, data
def get_sql(self, gid, sid, data, scid, doid=None, is_schema_diff=False):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/__init__.py
index de705b9f8..14689d93d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/__init__.py
@@ -445,7 +445,8 @@ class DomainConstraintView(PGChildNodeView):
# Get the recently added constraints oid
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- doid=doid, name=data['name'])
+ doid=doid, name=data['name'],
+ conn=self.conn)
status, coid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=coid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/9.2_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/9.2_plus/update.sql
index 5ea6a0c62..bb8bf47c2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/9.2_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/9.2_plus/update.sql
@@ -10,4 +10,4 @@ ALTER DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
COMMENT ON CONSTRAINT {{ conn|qtIdent(name) }} ON DOMAIN {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{ data.description|qtLiteral }};{% endif %}
+ IS {{ data.description|qtLiteral(conn) }};{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/default/get_oid.sql
index 2f1446987..2739ae8ac 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/templates/domain_constraints/sql/default/get_oid.sql
@@ -4,4 +4,4 @@ FROM
pg_catalog.pg_constraint
WHERE
contypid = {{doid}}::oid
- AND conname={{ name|qtLiteral }};
+ AND conname={{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json
index 43313dc11..d0b0f6d62 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/tests/domain_constraints_test_data.json
@@ -46,7 +46,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -86,7 +86,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, 'Mocking the scalar output'), (False, 'Mocked Internal Server Error while creating domain')"
},
"expected_data": {
@@ -131,7 +131,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while deleting a domain')"
},
"expected_data": {
@@ -145,7 +145,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a domain')"
},
"expected_data": {
@@ -230,7 +230,7 @@
"invalid": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain constraints nodes')"
},
"expected_data": {
@@ -270,7 +270,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain nodes')"
},
"expected_data": {
@@ -347,7 +347,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error while fetching a domain')]"
},
"expected_data": {
@@ -409,7 +409,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain')"
},
"expected_data": {
@@ -499,7 +499,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain')"
},
"expected_data": {
@@ -536,7 +536,7 @@
"domain_constraint_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain constraint')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/get_oid.sql
index 2c342e8c6..d43d04c96 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/get_oid.sql
@@ -13,6 +13,6 @@ FROM
JOIN
pg_catalog.pg_namespace bn ON bn.oid=d.typnamespace
WHERE
- bn.nspname = {{ basensp|qtLiteral }}
- AND d.typname={{ name|qtLiteral }};
+ bn.nspname = {{ basensp|qtLiteral(conn) }}
+ AND d.typname={{ name|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/update.sql
index acd093da7..67130a1ef 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/sql/default/update.sql
@@ -92,7 +92,7 @@ COMMENT ON CONSTRAINT {{ conn|qtIdent(c.conname) }} ON DOMAIN {{ conn|qtIdent(o_
{% endif -%}{% if data.description is defined and data.description != o_data.description %}
COMMENT ON DOMAIN {{ conn|qtIdent(o_data.basensp, name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}{% if data.basensp %}
ALTER DOMAIN {{ conn|qtIdent(o_data.basensp, name) }}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/domain_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/domain_test_data.json
index 1451ab66e..5952a11e1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/domain_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/domain_test_data.json
@@ -52,7 +52,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -86,7 +86,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, 'Mocking the scalar output'), (False, 'Mocked Internal Server Error while creating domain')"
},
"expected_data": {
@@ -120,7 +120,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(True, True), (False, 'Mocked Internal Server Error while creating domain')"
},
"expected_data": {
@@ -148,7 +148,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while deleting a domain')"
},
"expected_data": {
@@ -162,7 +162,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a domain')"
},
"expected_data": {
@@ -208,7 +208,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain')"
},
"expected_data": {
@@ -226,7 +226,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(True, True),(False, 'Mocked Internal Server Error while fetching a domain')]"
},
"expected_data": {
@@ -288,7 +288,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -319,7 +319,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain nodes')"
},
"expected_data": {
@@ -345,7 +345,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain nodes')"
},
"expected_data": {
@@ -383,7 +383,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain')"
},
"expected_data": {
@@ -409,7 +409,7 @@
"domain_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a domain')"
},
"expected_data": {
@@ -518,7 +518,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
index 5f9eb81a0..cd00ea739 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py
@@ -727,7 +727,8 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
basensp=basensp,
- name=self.request['name'])
+ name=self.request['name'],
+ conn=self.conn)
status, res = self.conn.execute_2darray(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -839,7 +840,8 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- foid=foid)
+ foid=foid,
+ conn=self.conn)
status, res = self.conn.execute_2darray(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -897,7 +899,8 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
SQL = render_template("/".join([self.template_path,
self._CREATE_SQL]),
data=data, is_sql=True,
- add_not_exists_clause=True
+ add_not_exists_clause=True,
+ conn=self.conn
)
if not json_resp:
@@ -1084,11 +1087,11 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
sql = render_template(
"/".join([self.template_path,
'foreign_table_schema_diff.sql']),
- data=data, o_data=old_data)
+ data=data, o_data=old_data, conn=self.conn)
else:
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=self.conn
)
return sql, data['name'] if 'name' in data else old_data['name']
else:
@@ -1100,7 +1103,8 @@ class ForeignTableView(PGChildNodeView, DataTypeReader,
["a", "r", "w", "x"])
sql = render_template("/".join([self.template_path,
- self._CREATE_SQL]), data=data)
+ self._CREATE_SQL]), data=data,
+ conn=self.conn)
return sql, data['name']
@check_precondition
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/create.sql
index 6cbaafb5b..ce235454f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/create.sql
@@ -28,8 +28,8 @@ CREATE FOREIGN TABLE{% if add_not_exists_clause %} IF NOT EXISTS{% endif %} {{ c
{% for o in data.ftoptions %}
{% if o.option is defined and o.value is defined %}
-{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral}}{% if loop.last %}){% endif %}{% endif %}
-{% endfor %}{% endif %};
+{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral(conn)}}{% if loop.last %}){% endif %}{% endif %}
+{% endfor %}{% endif -%};
{% if data.owner %}
ALTER FOREIGN TABLE {{ conn|qtIdent(data.basensp, data.name) }}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/foreign_table_schema_diff.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/foreign_table_schema_diff.sql
index 29596970d..4ba5fcf46 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/foreign_table_schema_diff.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/foreign_table_schema_diff.sql
@@ -18,7 +18,7 @@ CREATE FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, o_data.name) }}(
{% if is_columns.append('1') %}{% endif %}
{{conn|qtIdent(c.attname)}} {% if is_sql %}{{ c.fulltype }}{% else %}{{c.datatype }}{% if c.typlen %}({{c.typlen}}{% if c.precision %}, {{c.precision}}{% endif %}){% endif %}{% if c.isArrayType %}[]{% endif %}{% endif %}{% if c.coloptions %}
{% for o in c.coloptions %}{% if o.option is defined and o.value is defined %}
-{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral}}{% if loop.last %}){% endif %}{% endif %}
+{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral(conn)}}{% if loop.last %}){% endif %}{% endif %}
{% endfor %}{% endif %}
{% if c.attnotnull %} NOT NULL{% else %} NULL{% endif %}
{% if c.typdefault is defined and c.typdefault is not none %} DEFAULT {{c.typdefault}}{% endif %}
@@ -37,7 +37,7 @@ CREATE FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, o_data.name) }}(
{% for o in ftoptions %}
{% if o.option is defined and o.value is defined %}
-{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral}}{% if loop.last %}){% endif %}{% endif %}
+{% if loop.first %} OPTIONS ({% endif %}{% if not loop.first %}, {% endif %}{{o.option}} {{o.value|qtLiteral(conn)}}{% if loop.last %}){% endif %}{% endif %}
{% endfor %}{% endif %};
{% if data.owner or o_data.owner%}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/get_oid.sql
index 38c01d2ce..187537975 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/get_oid.sql
@@ -6,8 +6,8 @@ FROM
JOIN
pg_catalog.pg_namespace bn ON bn.oid=c.relnamespace
WHERE
- bn.nspname = {{ basensp|qtLiteral }}
- AND c.relname={{ name|qtLiteral }};
+ bn.nspname = {{ basensp|qtLiteral(conn) }}
+ AND c.relname={{ name|qtLiteral(conn) }};
{% elif foid %}
SELECT
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/update.sql
index e78766d20..b637c7ace 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/sql/default/update.sql
@@ -151,15 +151,13 @@ ALTER FOREIGN TABLE IF EXISTS {{ conn|qtIdent(o_data.basensp, name) }}
{% for o in data.ftoptions.added %}
{% if o.option is defined and o.value is defined %}
ALTER FOREIGN TABLE IF EXISTS {{ conn|qtIdent(o_data.basensp, name) }}
- OPTIONS (ADD {{o.option}} {{o.value|qtLiteral}});
-
+ OPTIONS (ADD {{o.option}} {{o.value|qtLiteral(conn)}});
{% endif %}
{% endfor %}
{% for o in data.ftoptions.changed %}
{% if o.option is defined and o.value is defined %}
ALTER FOREIGN TABLE IF EXISTS {{ conn|qtIdent(o_data.basensp, name) }}
- OPTIONS (SET {{o.option}} {{o.value|qtLiteral}});
-
+ OPTIONS (SET {{o.option}} {{o.value|qtLiteral(conn)}});
{% endif %}
{% endfor %}
{% endif -%}
@@ -184,7 +182,7 @@ ALTER FOREIGN TABLE IF EXISTS {{ conn|qtIdent(o_data.basensp, name) }}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.acl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/foreign_tables_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/foreign_tables_test_data.json
index e9160e372..e4833564a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/foreign_tables_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/foreign_tables_test_data.json
@@ -89,7 +89,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -153,7 +153,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -170,7 +170,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -217,7 +217,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -305,7 +305,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -359,7 +359,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/utils.py
index cbb5d649e..a53a65930 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/tests/utils.py
@@ -12,7 +12,8 @@ import sys
import traceback
from urllib.parse import urlencode
-from regression.python_test_utils.test_utils import get_db_connection
+from regression.python_test_utils.test_utils import get_db_connection,\
+ set_isolation_level
from regression.python_test_utils import test_utils as utils
# Load test data from json file.
@@ -88,10 +89,10 @@ def create_foreign_table(server, db_name, schema_name, fsrv_name,
server['host'],
server['port'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created foreign table
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
index e14ca9857..4236ec03d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
@@ -257,7 +257,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- scid=scid
+ scid=scid, conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -373,7 +373,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
scid=scid,
- cfgid=cfgid
+ cfgid=cfgid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -475,7 +476,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
name=data['name'],
- scid=data['schema']
+ scid=data['schema'],
+ conn=self.conn
)
status, res = self.conn.execute_2darray(sql)
if not status:
@@ -505,6 +507,12 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
+
+ if cfgid == 0 or cfgid is None:
+ return gone(
+ _("Could not find the FTS Configuration node to update.")
+ )
+
# Fetch sql query to update fts Configuration
sql, name = self.get_sql(gid, sid, did, scid, data, cfgid)
# Most probably this is due to error
@@ -571,8 +579,9 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
status, res = self.conn.execute_dict(sql)
if not status:
return internal_server_error(errormsg=res)
- elif not res['rows']:
+ elif not res['rows'] or len(res['rows']) == 0:
return make_json_response(
+ status=410,
success=0,
errormsg=_(
'Error: Object not found.'
@@ -694,7 +703,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
cfgid=cfgid,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -737,7 +747,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=new_data, o_data=old_data
+ data=new_data, o_data=old_data, conn=self.conn
)
# Fetch sql query for modified data
if 'name' in data:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/create.sql
index 8964d1e8b..547b8fda1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/create.sql
@@ -15,5 +15,5 @@ ALTER TEXT SEARCH CONFIGURATION {{ conn|qtIdent(data.schema, data.name) }} OWNER
{# Description for FTS_CONFIGURATION #}
{% if data.description %}
COMMENT ON TEXT SEARCH CONFIGURATION {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.description|qtLiteral }};
-{% endif %}{% endif %}
\ No newline at end of file
+ IS {{ data.description|qtLiteral(conn) }};
+{% endif %}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/properties.sql
index 54ed1117e..a7a55846f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/properties.sql
@@ -22,7 +22,7 @@ WHERE
cfg.cfgnamespace = {{scid}}::OID
{% endif %}
{% if name %}
- {% if scid %}AND {% endif %}cfg.cfgname = {{name|qtLiteral}}
+ {% if scid %}AND {% endif %}cfg.cfgname = {{name|qtLiteral(conn)}}
{% endif %}
{% if cfgid %}
{% if scid %}AND {% else %}{% if name %}AND {% endif %}{% endif %}cfg.oid = {{cfgid}}::OID
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/update.sql
index 2bc068ee7..933271536 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configurations/sql/default/update.sql
@@ -46,6 +46,6 @@ ALTER TEXT SEARCH CONFIGURATION {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(n
{% endif %}
{% if 'description' in data and data.description != o_data.description %}
COMMENT ON TEXT SEARCH CONFIGURATION {{conn|qtIdent(schema)}}.{{conn|qtIdent(name)}}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/fts_configurations_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/fts_configurations_test_data.json
index 9aac0a9bb..8dd4eb076 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/fts_configurations_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/fts_configurations_test_data.json
@@ -39,7 +39,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts configuration nodes')"
},
"expected_data": {
@@ -65,7 +65,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts configuration nodes')"
},
"expected_data": {
@@ -81,7 +81,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -107,7 +107,7 @@
"node": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts configuration nodes list')"
},
"expected_data": {
@@ -133,7 +133,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fts configuration sql')"
},
"expected_data": {
@@ -148,7 +148,7 @@
"msql": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, None)"
},
"expected_data": {
@@ -177,7 +177,7 @@
"msql": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fts configuration sql')"
},
"expected_data": {
@@ -203,7 +203,7 @@
"error_fetching_fts_configuration": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fts configuration dictionaries')"
},
"expected_data": {
@@ -228,7 +228,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 0)"
},
"expected_data": {
@@ -253,7 +253,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fts configuration dictionaries')"
},
"expected_data": {
@@ -278,7 +278,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a fts configuration dictionaries')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_delete.py
index 62bf4c7a8..8fefe0e5a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_delete.py
@@ -84,7 +84,7 @@ class FTSConfDeleteTestCase(BaseTestGenerator):
str(self.schema_id) + '/' +
str(0),
follow_redirects=True)
- self.assertEqual(negative_delete_response.status_code, 500)
+ self.assertEqual(negative_delete_response.status_code, 410)
def tearDown(self):
"""This function disconnect the test database."""
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_put.py
index 2392f6c69..abf5f27be 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_put.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/tests/test_fts_configuration_put.py
@@ -97,7 +97,7 @@ class FTSConfPutTestCase(BaseTestGenerator):
str(0),
data=json.dumps(data),
follow_redirects=True)
- self.assertEqual(negative_put_response.status_code, 500)
+ self.assertEqual(negative_put_response.status_code, 410)
def tearDown(self):
"""This function delete the fts_config and disconnect the test
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
index c948a4877..ad330adb6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py
@@ -265,7 +265,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- scid=scid
+ scid=scid, conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -383,7 +383,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
scid=scid,
- dcid=dcid
+ dcid=dcid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -472,7 +473,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
name=data['name'],
- scid=data['schema']
+ scid=data['schema'],
+ conn=self.conn
)
status, dcid = self.conn.execute_scalar(sql)
if not status:
@@ -515,7 +517,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
if dcid is not None:
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- dcid=dcid
+ dcid=dcid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -569,6 +572,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
return internal_server_error(errormsg=res)
elif not res['rows']:
return make_json_response(
+ status=410,
success=0,
errormsg=_(
'Error: Object not found.'
@@ -699,7 +703,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
dcid=dcid,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -740,7 +745,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=new_data, o_data=old_data
+ data=new_data, o_data=old_data, conn=self.conn
)
# Fetch sql query for modified data
if 'name' in data:
@@ -807,7 +812,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
scid=scid,
- dcid=dcid
+ dcid=dcid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/create.sql
index 759eeffc3..8418a3dbe 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/create.sql
@@ -2,12 +2,12 @@
{% if data and data.schema and data.name and data.template %}
CREATE TEXT SEARCH DICTIONARY {{ conn|qtIdent(data.schema, data.name) }} (
TEMPLATE = {{ data.template }}{% for variable in data.options %}{% if "option" in variable and variable.option != '' %},
- {{ conn|qtIdent(variable.option) }} = {% if is_displaying %}{{ variable.value }}{% else %}{{ variable.value|qtLiteral }}{% endif %}{% endif %}{% endfor %}
+ {{ conn|qtIdent(variable.option) }} = {% if is_displaying %}{{ variable.value }}{% else %}{{ variable.value|qtLiteral(conn) }}{% endif %}{% endif %}{% endfor %}
);
{# Description for FTS_DICTIONARY #}
{% if data.description %}
COMMENT ON TEXT SEARCH DICTIONARY {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.description|qtLiteral }};
-{% endif %}{% endif %}
\ No newline at end of file
+ IS {{ data.description|qtLiteral(conn) }};
+{% endif %}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/properties.sql
index 66f119bc6..65646b11f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/properties.sql
@@ -17,7 +17,7 @@ WHERE
dict.dictnamespace = {{scid}}::OID
{% endif %}
{% if name %}
- {% if scid %}AND {% endif %}dict.dictname = {{name|qtLiteral}}
+ {% if scid %}AND {% endif %}dict.dictname = {{name|qtLiteral(conn)}}
{% endif %}
{% if dcid %}
{% if scid %}AND {% else %}{% if name %}AND {% endif %}{% endif %}dict.oid = {{dcid}}::OID
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/update.sql
index 8b17c68a8..ff846cb01 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionaries/sql/default/update.sql
@@ -44,6 +44,6 @@ ALTER TEXT SEARCH DICTIONARY {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name
{% endif %}
{% if 'description' in data and data.description != o_data.description %}
COMMENT ON TEXT SEARCH DICTIONARY {{conn|qtIdent(schema)}}.{{conn|qtIdent(name)}}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/fts_dictionaries_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/fts_dictionaries_test_data.json
index 672524a4c..d513e09ed 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/fts_dictionaries_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/fts_dictionaries_test_data.json
@@ -17,7 +17,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts dictionary nodes')"
},
"expected_data": {
@@ -43,7 +43,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts dictionary nodes')"
},
"expected_data": {
@@ -59,7 +59,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -85,7 +85,7 @@
"node": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts dictionary nodes list')"
},
"expected_data": {
@@ -132,7 +132,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts dictionary template')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/test_fts_dictionaries_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/test_fts_dictionaries_delete.py
index ff6613c41..147b0fdd8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/test_fts_dictionaries_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/tests/test_fts_dictionaries_delete.py
@@ -88,7 +88,7 @@ class FtsDictionaryDeleteTestCase(BaseTestGenerator):
str(0),
follow_redirects=True)
- self.assertEqual(negative_delete_response.status_code, 500)
+ self.assertEqual(negative_delete_response.status_code, 410)
def tearDown(self):
"""This function disconnect the test database."""
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
index f20be4ebe..b11abf3e5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py
@@ -249,7 +249,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
def list(self, gid, sid, did, scid):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -341,7 +342,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
scid=scid,
- pid=pid
+ pid=pid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -418,7 +420,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
name=data['name'],
- scid=data['schema'] if 'schema' in data else scid
+ scid=data['schema'] if 'schema' in data else scid,
+ conn=self.conn
)
status, pid = self.conn.execute_scalar(sql)
if not status:
@@ -461,7 +464,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
pid=pid,
- scid=data['schema'] if 'schema' in data else scid
+ scid=data['schema'] if 'schema' in data else scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -515,6 +519,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
return internal_server_error(errormsg=res)
elif not res['rows']:
return make_json_response(
+ status=410,
success=0,
errormsg=_(
'Error: Object not found.'
@@ -638,7 +643,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
pid=pid,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -681,7 +687,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
data=new_data,
- o_data=old_data
+ o_data=old_data,
+ conn=self.conn
)
# Fetch sql query for modified data
if 'name' in data:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/create.sql
index 625856595..c38088ba2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/create.sql
@@ -11,5 +11,5 @@ CREATE TEXT SEARCH PARSER {{ conn|qtIdent(data.schema, data.name) }} (
{# Description for FTS_PARSER #}
{% if data.description %}
COMMENT ON TEXT SEARCH PARSER {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.description|qtLiteral }};
-{% endif %}{% endif %}
\ No newline at end of file
+ IS {{ data.description|qtLiteral(conn) }};
+{% endif %}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/properties.sql
index 82cd22570..918324800 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/properties.sql
@@ -22,7 +22,7 @@ WHERE
prs.prsnamespace = {{scid}}::OID
{% endif %}
{% if name %}
- {% if scid %}AND {% endif %}prs.prsname = {{name|qtLiteral}}
+ {% if scid %}AND {% endif %}prs.prsname = {{name|qtLiteral(conn)}}
{% endif %}
{% if pid %}
{% if name %}AND {% else %}{% if scid %}AND {% endif %}{% endif %}prs.oid = {{pid}}::OID
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
index 48e335b1d..fbb108518 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql
@@ -34,6 +34,6 @@ CREATE TEXT SEARCH PARSER {{ conn|qtIdent(o_data.schema, name) }} (
{% endif %}
{% if "description" in data and data.description != o_data.description %}
COMMENT ON TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/fts_parsers_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/fts_parsers_test_data.json
index c4493384d..133693c12 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/fts_parsers_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/fts_parsers_test_data.json
@@ -17,7 +17,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts Parsers nodes')"
},
"expected_data": {
@@ -43,7 +43,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts Parsers nodes')"
},
"expected_data": {
@@ -59,7 +59,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -85,7 +85,7 @@
"node": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts Parsers nodes list')"
},
"expected_data": {
@@ -133,7 +133,7 @@
"error_fetching_fts_parser": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts parser headline functions')"
},
"expected_data": {
@@ -159,7 +159,7 @@
"error_fetching_fts_parser": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts parser lextype functions')"
},
"expected_data": {
@@ -185,7 +185,7 @@
"error_fetching_fts_parser": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts parser end functions')"
},
"expected_data": {
@@ -211,7 +211,7 @@
"error_fetching_fts_parser": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts parser token functions')"
},
"expected_data": {
@@ -237,7 +237,7 @@
"error_fetching_fts_parser": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts parser start functions')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/test_fts_parser_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/test_fts_parser_delete.py
index 78a180960..b9215a257 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/test_fts_parser_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/tests/test_fts_parser_delete.py
@@ -86,7 +86,7 @@ class FtsParserDeleteTestCase(BaseTestGenerator):
str(0),
follow_redirects=True)
- self.assertEqual(negative_delete_response.status_code, 500)
+ self.assertEqual(negative_delete_response.status_code, 410)
def tearDown(self):
"""This function disconnect the test database."""
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
index f8256456d..c5eda826a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py
@@ -228,7 +228,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
def list(self, gid, sid, did, scid):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
- scid=scid
+ scid=scid, conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -318,7 +318,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
scid=scid,
- tid=tid
+ tid=tid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -389,7 +390,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
name=data['name'],
- scid=data['schema'] if 'schema' in data else scid
+ scid=data['schema'] if 'schema' in data else scid,
+ conn=self.conn
)
status, tid = self.conn.execute_scalar(sql)
if not status:
@@ -479,6 +481,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
if not res['rows']:
return make_json_response(
+ status=410,
success=0,
errormsg=gettext(
'Error: Object not found.'
@@ -609,7 +612,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._PROPERTIES_SQL]),
tid=tid,
- scid=scid
+ scid=scid,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
@@ -644,7 +648,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=new_data, o_data=old_data
+ data=new_data, o_data=old_data, conn=self.conn
)
# Fetch sql query for modified data
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/create.sql
index 3a290b382..17b357297 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/create.sql
@@ -7,5 +7,5 @@ CREATE TEXT SEARCH TEMPLATE {{ conn|qtIdent(data.schema, data.name) }} (
{# Description for TEXT SEARCH TEMPLATE #}
{% if data.description %}
COMMENT ON TEXT SEARCH TEMPLATE {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.description|qtLiteral }};
-{% endif %}{% endif %}
\ No newline at end of file
+ IS {{ data.description|qtLiteral(conn) }};
+{% endif %}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/properties.sql
index 0e9cd7bb2..5a3c5aa69 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/properties.sql
@@ -19,7 +19,7 @@ WHERE
tmpl.tmplnamespace = {{scid}}::OID
{% endif %}
{% if name %}
- {% if scid %}AND {% endif %}tmpl.tmplname = {{name|qtLiteral}}
+ {% if scid %}AND {% endif %}tmpl.tmplname = {{name|qtLiteral(conn)}}
{% endif %}
{% if tid %}
{% if name %}AND {% else %}{% if scid %}AND {% endif %}{% endif %}tmpl.oid = {{tid}}::OID
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
index d76f12115..ff8c52c50 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql
@@ -32,6 +32,6 @@ CREATE TEXT SEARCH TEMPLATE {{ conn|qtIdent(o_data.schema, name) }} (
{% endif %}
{% if 'description' in data and data.description != o_data.description %}
COMMENT ON TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/fts_templates_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/fts_templates_test_data.json
index 2ee0b36a8..8fb038cfc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/fts_templates_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/fts_templates_test_data.json
@@ -17,7 +17,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts templates nodes')"
},
"expected_data": {
@@ -43,7 +43,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts templates nodes')"
},
"expected_data": {
@@ -59,7 +59,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -85,7 +85,7 @@
"node": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts templates nodes list')"
},
"expected_data": {
@@ -133,7 +133,7 @@
"error_fetching_fts_template": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts template init functions')"
},
"expected_data": {
@@ -159,7 +159,7 @@
"error_fetching_fts_template": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching fts template lexize functions')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/test_fts_templates_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/test_fts_templates_delete.py
index 6546a8301..d1a324d23 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/test_fts_templates_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/tests/test_fts_templates_delete.py
@@ -85,7 +85,7 @@ class FtsTemplateDeleteTestCase(BaseTestGenerator):
str(0),
follow_redirects=True)
- self.assertEqual(negative_delete_response.status_code, 500)
+ self.assertEqual(negative_delete_response.status_code, 410)
def tearDown(self):
"""This function disconnect the test database."""
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
index 88b39cb60..112ce066d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
@@ -385,7 +385,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
sql = render_template("/".join([self.sql_template_path,
self._NODE_SQL]),
- scid=scid)
+ scid=scid, conn=self.conn)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -411,7 +411,8 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.sql_template_path, self._NODE_SQL]),
scid=scid,
- fnid=fnid
+ fnid=fnid,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(sql)
@@ -857,7 +858,8 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
[self.sql_template_path, self._OID_SQL]
),
nspname=self.request['pronamespace'],
- name=self.request['name']
+ name=self.request['name'],
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -1102,7 +1104,8 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
data=resp_data, query_type="create",
func_def=name_with_default_args,
query_for="sql_panel",
- add_replace_clause=True
+ add_replace_clause=True,
+ conn=self.conn
)
return func_def
@@ -1135,7 +1138,8 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
self._CREATE_SQL]),
data=resp_data, query_type="create",
func_def=name_with_default_args,
- query_for="sql_panel")
+ query_for="sql_panel",
+ conn=self.conn)
return func_def
@@ -1462,7 +1466,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.sql_template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=self.conn
)
return True, '', sql
@@ -1561,7 +1565,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
# Create mode
sql = render_template("/".join([self.sql_template_path,
self._CREATE_SQL]),
- data=data, is_sql=is_sql)
+ data=data, is_sql=is_sql, conn=self.conn)
return True, sql.strip('\n')
def _fetch_properties(self, gid, sid, did, scid, fnid=None):
@@ -1961,7 +1965,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
if not oid:
sql = render_template("/".join([self.sql_template_path,
self._NODE_SQL]), scid=scid,
- schema_diff=True)
+ schema_diff=True, conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=res)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/coll_stats.sql
index c8c07e127..b9599093a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/get_oid.sql
index 3d26cb9e8..cb2eb80f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind IN ('f', 'w')
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/node.sql
index 91d857f38..dfc141f4f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
pr.prokind IN ('f', 'w')
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/update.sql
index 6bc64af3c..5daef3a8b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/11_plus/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -36,13 +36,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -110,7 +110,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/create.sql
index 7fc9fee57..1daa2e1bd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -35,11 +35,11 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif -%}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -59,7 +59,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/update.sql
index 01c749ceb..5e41fdaf0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/12_plus/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -38,13 +38,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
{% if data.prosupportfunc %}SUPPORT {{ data.prosupportfunc }}{% elif data.prosupportfunc is not defined and o_data.prosupportfunc %}SUPPORT {{ o_data.prosupportfunc }}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -112,7 +112,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/create.sql
index 4f4dbc76b..429c82d45 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -35,13 +35,13 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif -%}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% endif -%}
@@ -62,7 +62,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/update.sql
index 433fc6577..24d65f066 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/14_plus/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -38,15 +38,15 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
{% if data.prosupportfunc %}SUPPORT {{ data.prosupportfunc }}{% elif data.prosupportfunc is not defined and o_data.prosupportfunc %}SUPPORT {{ o_data.prosupportfunc }}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% endif -%}
@@ -115,7 +115,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/coll_stats.sql
index 5dc51c08a..effaeeee3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/create.sql
index f9cbda510..c58142347 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -32,11 +32,11 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -56,7 +56,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/get_oid.sql
index 336195aeb..fe091cc9c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/node.sql
index dbcb6b356..eecbdcfdd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
proisagg = FALSE
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/update.sql
index 916347e13..ccd5ffa8a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/pg/sql/default/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -36,13 +36,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -110,7 +110,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/coll_stats.sql
index c8c07e127..b9599093a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/get_oid.sql
index 3d26cb9e8..cb2eb80f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind IN ('f', 'w')
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/node.sql
index 06d701d5c..2b2dd8107 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/11_plus/node.sql
@@ -13,7 +13,7 @@ WHERE
pr.prokind IN ('f', 'w')
AND pr.protype = '0'::char
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/create.sql
index b4f164f9b..45728f8fc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -36,11 +36,11 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif -%}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -60,7 +60,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/update.sql
index 01c749ceb..5e41fdaf0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/12_plus/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -38,13 +38,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
{% if data.prosupportfunc %}SUPPORT {{ data.prosupportfunc }}{% elif data.prosupportfunc is not defined and o_data.prosupportfunc %}SUPPORT {{ o_data.prosupportfunc }}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -112,7 +112,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/create.sql
index 4f4dbc76b..429c82d45 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -35,13 +35,13 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif -%}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% endif -%}
@@ -62,7 +62,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/update.sql
index 433fc6577..24d65f066 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/14_plus/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -38,15 +38,15 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
{% if data.prosupportfunc %}SUPPORT {{ data.prosupportfunc }}{% elif data.prosupportfunc is not defined and o_data.prosupportfunc %}SUPPORT {{ o_data.prosupportfunc }}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% endif -%}
@@ -115,7 +115,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/coll_stats.sql
index 5dc51c08a..effaeeee3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/create.sql
index f9cbda510..c58142347 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/create.sql
@@ -16,7 +16,7 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
RETURNS{% if data.proretset and (data.prorettypename.startswith('SETOF ') or data.prorettypename.startswith('TABLE')) %} {{ data.prorettypename }} {% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -32,11 +32,11 @@ CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ con
{% endif %}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -56,7 +56,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/get_oid.sql
index 336195aeb..fe091cc9c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/node.sql
index 40c4ce4ff..27e212782 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/node.sql
@@ -13,7 +13,7 @@ WHERE
proisagg = FALSE
AND pr.protype = '0'::char
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/update.sql
index 916347e13..ccd5ffa8a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/functions/ppas/sql/default/update.sql
@@ -22,8 +22,8 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
RETURNS {% if 'prorettypename' in data %}{{ data.prorettypename }}{% else %}{{ o_data.prorettypename }}{% endif %}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -36,13 +36,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if d
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -110,7 +110,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/coll_stats.sql
index 7963b50fa..3a3bf5698 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/create.sql
index 7b377ae55..807268a61 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/create.sql
@@ -14,16 +14,16 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} PROCEDURE {{ conn|qtIden
{% endif %}
)
{% endif %}
-LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
+LANGUAGE {{ data.lanname|qtLiteral(conn) }}{% if data.prosecdef %}
SECURITY DEFINER {% endif %}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
@@ -44,7 +44,7 @@ ALTER PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_arg
{% if data.description %}
COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/get_oid.sql
index 6490082b7..89a61772e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind = 'p'::char
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/node.sql
index 7e263c3bd..24f25c75d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/node.sql
@@ -19,7 +19,7 @@ LEFT OUTER JOIN
WHERE
pr.prokind = 'p'::char
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/update.sql
index c2f160e22..f5aee3efe 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/11_plus/update.sql
@@ -19,19 +19,19 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
{% endif %}
)
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}
{% if ('prosecdef' in data and data.prosecdef) or ('prosecdef' not in data and o_data.prosecdef) %}SECURITY DEFINER{% endif %}
{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -101,7 +101,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/create.sql
index e6eba1b24..2be6c82b1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/create.sql
@@ -14,18 +14,18 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} PROCEDURE {{ conn|qtIden
{% endif %}
)
{% endif %}
-LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
+LANGUAGE {{ data.lanname|qtLiteral(conn) }}{% if data.prosecdef %}
SECURITY DEFINER {% endif %}
{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% endif -%}
@@ -47,7 +47,7 @@ ALTER PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_arg
{% if data.description %}
COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/update.sql
index a5f907dc8..d5701a023 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/pg/sql/14_plus/update.sql
@@ -19,20 +19,20 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
{% endif %}
)
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}
{% if ('prosecdef' in data and data.prosecdef) or ('prosecdef' not in data and o_data.prosecdef) %}SECURITY DEFINER{% endif %}
{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}{% else %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% endif -%}
@@ -103,7 +103,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/coll_stats.sql
index 7963b50fa..3a3bf5698 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/create.sql
index fdfca7483..cd8c92151 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/create.sql
@@ -14,7 +14,7 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} PROCEDURE {{ conn|qtIden
{% endif %}
)
{% endif %}
-LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
+LANGUAGE {{ data.lanname|qtLiteral(conn) }}{% if data.prosecdef %}
SECURITY DEFINER {% endif %}
{% if data.lanname == 'edbspl' %}
@@ -27,11 +27,11 @@ LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
ROWS {{data.prorows}}{% endif -%}{% endif %}{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
@@ -52,7 +52,7 @@ ALTER PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_arg
{% if data.description %}
COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/get_oid.sql
index 6490082b7..89a61772e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind = 'p'::char
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/node.sql
index 7e263c3bd..24f25c75d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/node.sql
@@ -19,7 +19,7 @@ LEFT OUTER JOIN
WHERE
pr.prokind = 'p'::char
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/update.sql
index d175db1c4..497d53822 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/11_plus/update.sql
@@ -19,8 +19,8 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
{% endif %}
)
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}
{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }} {% endif %}
{% if ('prosecdef' in data and data.prosecdef) or ('prosecdef' not in data and o_data.prosecdef) %}SECURITY DEFINER{% endif %}
@@ -34,14 +34,14 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -110,7 +110,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/create.sql
index 3dc29bb42..f0f23945b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/create.sql
@@ -14,7 +14,7 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} PROCEDURE {{ conn|qtIden
{% endif %}
)
{% endif %}
-LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
+LANGUAGE {{ data.lanname|qtLiteral(conn) }}{% if data.prosecdef %}
SECURITY DEFINER {% endif %}
{% if data.lanname == 'edbspl' %}
@@ -27,13 +27,13 @@ LANGUAGE {{ data.lanname|qtLiteral }}{% if data.prosecdef %}
ROWS {{data.prorows}}{% endif -%}{% endif %}{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% endif -%}
@@ -55,7 +55,7 @@ ALTER PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_arg
{% if data.description %}
COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args_without}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/update.sql
index 6b2f589a6..8de573c55 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/14_plus/update.sql
@@ -19,8 +19,8 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
{% endif %}
)
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}
{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }} {% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }} {% endif %}
{% if ('prosecdef' in data and data.prosecdef) or ('prosecdef' not in data and o_data.prosecdef) %}SECURITY DEFINER{% endif %}
@@ -34,16 +34,16 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({% if
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}}{% endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
{% endif %}
{% if data.is_pure_sql %}{{ data.prosrc }}
{% else %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% endif -%}
@@ -113,7 +113,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/coll_stats.sql
index 5dc51c08a..effaeeee3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/create.sql
index 32ab6d1f8..69babc0ea 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/create.sql
@@ -46,7 +46,7 @@ ALTER PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}
{% if data.description %}
COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/get_oid.sql
index 39c785f39..5b05f7933 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/node.sql
index 55dec123b..dde3fbeb7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/node.sql
@@ -20,7 +20,7 @@ WHERE
proisagg = FALSE
AND pr.protype = '1'::char
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/update.sql
index 2030c917c..69c98daf7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedures/ppas/sql/default/update.sql
@@ -98,7 +98,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/coll_stats.sql
index b030c8115..ae9079b90 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/create.sql
index 903050d3e..9377e6a46 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/create.sql
@@ -7,7 +7,7 @@
CREATE{% if add_replace_clause %} OR REPLACE{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.proargnames %}{{data.proargnames}}{% endif %})
RETURNS{% if data.proretset and data.prorettypename.startswith('SETOF ') %} {{ data.prorettypename }}{% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -19,11 +19,11 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} FUNCTION {{ conn|qtIdent
ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -43,7 +43,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/get_oid.sql
index 53bc02b24..1da0793f9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/get_oid.sql
@@ -10,9 +10,9 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind IN ('f', 'w')
AND typname IN ('trigger', 'event_trigger')
AND lanname NOT IN ('edbspl', 'sql', 'internal')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/node.sql
index 23c307dd8..4619bcfcf 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
pr.prokind IN ('f', 'w')
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/update.sql
index 0f936f3ca..f9a2b1c0f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/11_plus/update.sql
@@ -16,8 +16,8 @@ o_data.proargtypenames }})
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
RETURNS {{ o_data.prorettypename }}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }}{% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -28,13 +28,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -102,7 +102,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/coll_stats.sql
index 8141d8c1c..a927a5633 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/create.sql
index 903050d3e..9377e6a46 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/create.sql
@@ -7,7 +7,7 @@
CREATE{% if add_replace_clause %} OR REPLACE{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.proargnames %}{{data.proargnames}}{% endif %})
RETURNS{% if data.proretset and data.prorettypename.startswith('SETOF ') %} {{ data.prorettypename }}{% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -19,11 +19,11 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} FUNCTION {{ conn|qtIdent
ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -43,7 +43,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/get_oid.sql
index 86a720aac..e828491db 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/get_oid.sql
@@ -10,9 +10,14 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
+<<<<<<< Updated upstream
AND typname IN ('trigger', 'event_trigger')
AND lanname NOT IN ('edbspl', 'sql', 'internal')
AND pr.proname = {{ name|qtLiteral }};
+=======
+ AND typname = 'trigger' AND lanname != 'edbspl'
+ AND pr.proname = {{ name|qtLiteral(conn) }};
+>>>>>>> Stashed changes
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/node.sql
index 9d4dbdfac..322fdb76e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
proisagg = FALSE
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/update.sql
index 0f936f3ca..f9a2b1c0f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/pg/sql/default/update.sql
@@ -16,8 +16,8 @@ o_data.proargtypenames }})
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
RETURNS {{ o_data.prorettypename }}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }}{% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -28,13 +28,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
ROWS {{data.prorows}}{% elif data.prorows is not defined and o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -102,7 +102,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/coll_stats.sql
index e120e0d2a..701810d26 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql
index ca82a1949..7ee3c94c4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql
@@ -10,7 +10,7 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind IN ('f', 'w')
AND typname IN ('trigger', 'event_trigger')
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql
index d499e9afe..0ed663109 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
pr.prokind IN ('f', 'w')
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/coll_stats.sql
index 8141d8c1c..a927a5633 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/coll_stats.sql
@@ -6,7 +6,7 @@ SELECT
FROM
pg_catalog.pg_stat_user_functions
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
AND funcid IN (
SELECT p.oid
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/create.sql
index afc31f181..8827bb55d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/create.sql
@@ -7,7 +7,7 @@
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}()
RETURNS{% if data.proretset and data.prorettypename.startswith('SETOF ') %} {{ data.prorettypename }}{% elif data.proretset %} SETOF {{ data.prorettypename }}{% else %} {{ data.prorettypename }}{% endif %}
- LANGUAGE {{ data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }}
{% if data.procost %}
COST {{data.procost}}
{% endif %}
@@ -19,11 +19,11 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}()
ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor %}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor %}
{% endif %}
AS {% if data.lanname == 'c' %}
-{{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }}
+{{ data.probin|qtLiteral(conn) }}, {{ data.prosrc_c|qtLiteral(conn) }}
{% else %}
$BODY${{ data.prosrc }}$BODY${% endif -%};
{% if data.funcowner %}
@@ -43,7 +43,7 @@ ALTER FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args
{% if data.description %}
COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func_args}})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql
index 823eed26e..9e018b2aa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql
@@ -10,7 +10,7 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname IN ('trigger', 'event_trigger')
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql
index b0a7783e5..c4ae760aa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql
@@ -12,7 +12,7 @@ LEFT OUTER JOIN
WHERE
proisagg = FALSE
{% if fnid %}
- AND pr.oid = {{ fnid|qtLiteral }}
+ AND pr.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
{% if scid %}
AND pronamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/update.sql
index a73f68d65..26e87b08c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/update.sql
@@ -16,8 +16,8 @@ o_data.proargtypenames }})
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
RETURNS {{ o_data.prorettypename }}
{% if 'lanname' in data %}
- LANGUAGE {{ data.lanname|qtLiteral }} {% else %}
- LANGUAGE {{ o_data.lanname|qtLiteral }}
+ LANGUAGE {{ data.lanname|qtLiteral(conn) }} {% else %}
+ LANGUAGE {{ o_data.lanname|qtLiteral(conn) }}
{% endif %}{% if 'provolatile' in data and data.provolatile %}{{ data.provolatile }}{% elif 'provolatile' not in data and o_data.provolatile %}{{ o_data.provolatile }}{% endif %}
{% if ('proleakproof' in data and data.proleakproof) or ('proleakproof' not in data and o_data.proleakproof) %} LEAKPROOF{% elif 'proleakproof' in data and not data.proleakproof %} NOT LEAKPROOF{% endif %}
{% if ('proisstrict' in data and data.proisstrict) or ('proisstrict' not in data and o_data.proisstrict) %} STRICT{% endif %}
@@ -28,13 +28,13 @@ CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}()
ROWS {{data.prorows}}{% elif o_data.prorows and o_data.prorows != '0' %} ROWS {{o_data.prorows}} {%endif -%}{% if data.merged_variables %}{% for v in data.merged_variables %}
- SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral }}{% endif %}{% endfor -%}
+ SET {{ conn|qtIdent(v.name) }}={% if v.name in exclude_quoting %}{{ v.value }}{% else %}{{ v.value|qtLiteral(conn) }}{% endif %}{% endfor -%}
{% endif %}
AS {% if (data.lanname == 'c' or o_data.lanname == 'c') and ('probin' in data or 'prosrc_c' in data) %}
-{% if 'probin' in data %}{{ data.probin|qtLiteral }}{% else %}{{ o_data.probin|qtLiteral }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral }}{% else %}{{ o_data.prosrc_c|qtLiteral }}{% endif %}{% elif 'prosrc' in data %}
+{% if 'probin' in data %}{{ data.probin|qtLiteral(conn) }}{% else %}{{ o_data.probin|qtLiteral(conn) }}{% endif %}, {% if 'prosrc_c' in data %}{{ data.prosrc_c|qtLiteral(conn) }}{% else %}{{ o_data.prosrc_c|qtLiteral(conn) }}{% endif %}{% elif 'prosrc' in data %}
$BODY${{ data.prosrc }}$BODY${% elif o_data.lanname == 'c' %}
-{{ o_data.probin|qtLiteral }}, {{ o_data.prosrc_c|qtLiteral }}{% else %}
+{{ o_data.probin|qtLiteral(conn) }}, {{ o_data.prosrc_c|qtLiteral(conn) }}{% else %}
$BODY${{ o_data.prosrc }}$BODY${% endif -%};
{% endif -%}
{% if data.funcowner %}
@@ -98,7 +98,7 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if data.description is defined and data.description != o_data.description%}
COMMENT ON FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtypenames }})
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif -%}
{% if data.pronamespace %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_add.py
index be2eedf7c..b62bb7c85 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_add.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_add.py
@@ -53,7 +53,7 @@ class FunctionAddTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server "
"Error while create new function get sql.')"
@@ -67,7 +67,7 @@ class FunctionAddTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server "
"Error while create new function.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_delete.py
index 7459e6be1..697e14030 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_delete.py
@@ -49,7 +49,7 @@ class FunctionDeleteTestCase(BaseTestGenerator):
without_functions_id=False,
test_data={},
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server "
"Error while delete function.')"
@@ -65,7 +65,7 @@ class FunctionDeleteTestCase(BaseTestGenerator):
mock_empty_result=True,
test_data={},
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_2darray",
"return_value": "(True, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get.py
index d3f1d4a7f..d85f12b61 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get.py
@@ -40,7 +40,7 @@ class FunctionGetTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server "
"Error while get properties.')"
@@ -57,7 +57,7 @@ class FunctionGetTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_dict",
"return_value": "(False, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_languages.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_languages.py
index 4a6b50e6a..408b5d42b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_languages.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_languages.py
@@ -41,7 +41,7 @@ class FunctionGetLanguagesTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, 'Mocked Internal Server Error "
"while get languages for functions.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_msql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_msql.py
index 2768b020f..95c1c7da6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_msql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_msql.py
@@ -130,7 +130,7 @@ class FunctionGetmsqlTestCase(BaseTestGenerator):
"acl": []
},
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server "
"Error while get msq fetch properties.')"
@@ -162,7 +162,7 @@ class FunctionGetmsqlTestCase(BaseTestGenerator):
"acl": []
},
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_dict",
"return_value": "(True, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_nodes.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_nodes.py
index bb5f301f0..9da8288c8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_nodes.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_nodes.py
@@ -39,7 +39,7 @@ class FunctionGetNodesTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server "
"Error while get function nodes.')"
@@ -70,7 +70,7 @@ class FunctionGetNodesTestCase(BaseTestGenerator):
mocking_required=True,
with_function_id=True,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_2darray",
"return_value": "(True, {'rows':[]})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_sql.py
index 6301bf9c9..f5df4f6fd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_sql.py
@@ -41,7 +41,7 @@ class FunctionSqlTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_2darray',
"return_value": "(False, 'Mocked Internal Server Error "
"while SQL for functions.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_variable_options.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_variable_options.py
index 1713aeca1..b49739a44 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_variable_options.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_get_variable_options.py
@@ -41,7 +41,7 @@ class FunctionGetLanguagesTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, 'Mocked Internal Server Error "
"while get languages for functions.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_put.py
index 582e7c82f..a98216ecc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_put.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_function_put.py
@@ -39,7 +39,7 @@ class FunctionPutTestCase(BaseTestGenerator):
mocking_required=True,
is_mock_function=False,
mock_data={
- "function_name": "pgadmin.utils.driver.psycopg2."
+ "function_name": "pgadmin.utils.driver.psycopg3."
"connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server "
"Error while create new function get sql.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependencies.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependencies.py
index 441141d5e..1531f9046 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependencies.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependencies.py
@@ -41,7 +41,7 @@ class FunctionGetDependenciesTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependents.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependents.py
index 8943e006c..2296591b9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependents.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_dependents.py
@@ -41,7 +41,7 @@ class FunctionGetDependentsTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_function_statistics.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_function_statistics.py
index 5363483d0..43c3c86ed 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_function_statistics.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_function_statistics.py
@@ -41,7 +41,7 @@ class FunctionGetFunctionStatisticsTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, 'Mocked Internal Server Error "
"while get function statistics.')"
@@ -72,7 +72,7 @@ class FunctionGetFunctionStatisticsTestCase(BaseTestGenerator):
mocking_required=True,
without_function_id=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_scalar',
"return_value": "(False, 'Mocked Internal Server Error "
"while get function statistics.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_list.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_list.py
index aa3806362..a7216fb21 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_list.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_list.py
@@ -41,7 +41,7 @@ class FunctionGetListTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_dict',
"return_value": "(False, 'Mocked Internal Server "
"Error while get function list.')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_select_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_select_sql.py
index efad1423d..f76d6a06c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_select_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_select_sql.py
@@ -43,7 +43,7 @@ class FunctionGetSelectSqlTestCase(BaseTestGenerator):
mocking_required=True,
is_add_argument=False,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_2darray',
"return_value": "(False, 'Mocked Internal Server Error "
"while get select sql.')"
@@ -61,7 +61,7 @@ class FunctionGetSelectSqlTestCase(BaseTestGenerator):
mocking_required=True,
is_add_argument=False,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_2darray',
"return_value": "(True, {'rows': []})"
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_supported_functions.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_supported_functions.py
index 96f60cdeb..cd796f15e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_supported_functions.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_get_supported_functions.py
@@ -41,7 +41,7 @@ class FunctionGetSupportedFunctionsTestCase(BaseTestGenerator):
is_positive_test=False,
mocking_required=True,
mock_data={
- "function_name": 'pgadmin.utils.driver.psycopg2.'
+ "function_name": 'pgadmin.utils.driver.psycopg3.'
'connection.Connection.execute_2darray',
"return_value": "(False, 'Mocked Internal Server Error "
"while get supported function')"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
index 5d99a9bdc..a8e26c859 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
@@ -411,7 +411,7 @@ class PackageView(PGChildNodeView, SchemaDiffObjectCompare):
"/".join([
self.template_path, self._OID_SQL
]),
- name=data['name'], scid=scid
+ name=data['name'], scid=scid, conn=self.conn
)
sql = sql.strip('\n').strip(' ')
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py
index 0b5b4c024..f47130c5d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py
@@ -248,7 +248,8 @@ class EdbFuncView(PGChildNodeView, DataTypeReader):
SQL = render_template("/".join([self.sql_template_path,
self._NODE_SQL]),
- pkgid=pkgid)
+ pkgid=pkgid,
+ conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
@@ -274,7 +275,8 @@ class EdbFuncView(PGChildNodeView, DataTypeReader):
SQL = render_template(
"/".join([self.sql_template_path, self._NODE_SQL]),
pkgid=pkgid,
- fnid=edbfnid
+ fnid=edbfnid,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/11_plus/get_oid.sql
index fda417214..fdf0fce5b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind IN ('f', 'w')
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/get_oid.sql
index 0ffbaf1be..e63cda3fd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/node.sql
index a9f2623f7..2d42b5b16 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfuncs/ppas/default/node.sql
@@ -4,7 +4,7 @@ SELECT pg_proc.oid,
FROM pg_catalog.pg_proc, pg_catalog.pg_namespace
WHERE protype = '0'::char
{% if fnid %}
-AND pg_proc.oid = {{ fnid|qtLiteral }}
+AND pg_proc.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
-AND pronamespace = {{pkgid|qtLiteral}}::oid
+AND pronamespace = {{pkgid|qtLiteral(conn)}}::oid
AND pg_proc.pronamespace = pg_namespace.oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/11_plus/get_oid.sql
index 5235eba39..c4a2cca4a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/11_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/11_plus/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
pr.prokind = 'p'
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/get_oid.sql
index 0ffbaf1be..e63cda3fd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/get_oid.sql
@@ -10,8 +10,8 @@ JOIN
pg_catalog.pg_language lng ON lng.oid=prolang
JOIN
pg_catalog.pg_namespace nsp ON nsp.oid=pr.pronamespace
- AND nsp.nspname={{ nspname|qtLiteral }}
+ AND nsp.nspname={{ nspname|qtLiteral(conn) }}
WHERE
proisagg = FALSE
AND typname NOT IN ('trigger', 'event_trigger')
- AND pr.proname = {{ name|qtLiteral }};
+ AND pr.proname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/node.sql
index f0c11211d..ba6bcbe43 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbprocs/ppas/default/node.sql
@@ -4,7 +4,7 @@ SELECT pg_proc.oid,
FROM pg_catalog.pg_proc, pg_catalog.pg_namespace
WHERE protype = '1'::char
{% if fnid %}
-AND pg_proc.oid = {{ fnid|qtLiteral }}
+AND pg_proc.oid = {{ fnid|qtLiteral(conn) }}
{% endif %}
-AND pronamespace = {{pkgid|qtLiteral}}::oid
+AND pronamespace = {{pkgid|qtLiteral(conn)}}::oid
AND pg_proc.pronamespace = pg_namespace.oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/__init__.py
index b58cab886..16604349e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/__init__.py
@@ -211,7 +211,8 @@ class EdbVarView(PGChildNodeView, DataTypeReader):
SQL = render_template("/".join([self.sql_template_path,
self._NODE_SQL]),
- pkgid=pkgid)
+ pkgid=pkgid,
+ conn=self.conn)
status, res = self.conn.execute_dict(SQL)
if not status:
@@ -237,7 +238,7 @@ class EdbVarView(PGChildNodeView, DataTypeReader):
res = []
SQL = render_template(
"/".join([self.sql_template_path, self._NODE_SQL]),
- pkgid=pkgid
+ pkgid=pkgid, conn=self.conn
)
status, rset = self.conn.execute_2darray(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/templates/edbvars/ppas/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/templates/edbvars/ppas/node.sql
index 83c7aec0c..09c69262c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/templates/edbvars/ppas/node.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/templates/edbvars/ppas/node.sql
@@ -3,6 +3,6 @@ SELECT oid,
FROM pg_catalog.edb_variable
WHERE varpackage = {{pkgid}}::oid
{% if varid %}
-AND oid = {{ varid|qtLiteral }}
+AND oid = {{ varid|qtLiteral(conn) }}
{% endif %}
ORDER BY varname
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/create.sql
index ee6137e7c..c56925d3d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/create.sql
@@ -20,6 +20,6 @@ END {{ conn|qtIdent(data.name) }};
{% endfor %}
{% endif %}{% if data.description %}
COMMENT ON PACKAGE {{ conn|qtIdent(data.schema,data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/get_oid.sql
index 73a645870..53a133d54 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/get_oid.sql
@@ -1,5 +1,5 @@
SELECT nsp.oid
FROM pg_catalog.pg_namespace nsp
WHERE nspparent = {{scid}}::oid
-AND nspname = {{ name|qtLiteral }}
+AND nspname = {{ name|qtLiteral(conn) }}
AND nspobjecttype = 0;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/grant.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/grant.sql
index d4a382c66..fbc0bb24c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/grant.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/grant.sql
@@ -10,7 +10,7 @@ ALTER SEQUENCE {{ seqname }}
{% if data.comment %}
COMMENT ON SEQUENCE {{ seqname }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% if data.securities %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/update.sql
index ecef723b4..d732cd81e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/default/update.sql
@@ -43,6 +43,6 @@ END {{ conn|qtIdent(data.name) }};
{% if data.description is defined %}
COMMENT ON PACKAGE {{ conn|qtIdent(data.schema,data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py
index 22a2b9605..aee05c7ff 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py
@@ -213,7 +213,8 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare):
"/".join([self.template_path, self._NODES_SQL]),
scid=scid,
seid=seid,
- show_internal=show_internal
+ show_internal=show_internal,
+ conn=self.conn
)
status, rset = self.conn.execute_dict(SQL)
if not status:
@@ -433,7 +434,8 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
name=data['name'],
- schema=data['schema']
+ schema=data['schema'],
+ conn=self.conn
)
sql = sql.strip('\n').strip(' ')
@@ -548,7 +550,8 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare):
sql = render_template(
"/".join([self.template_path, self._NODES_SQL]),
- seid=seid
+ seid=seid,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(sql)
if not status:
@@ -899,7 +902,8 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare):
'schemas/pg/#{0}#/sql/get_name.sql'.format(
self.manager.version
),
- scid=scid
+ scid=scid,
+ conn=self.conn
)
)
if not status:
@@ -935,7 +939,8 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare):
res = dict()
sql = render_template("/".join([self.template_path,
self._NODES_SQL]), scid=scid,
- schema_diff=True)
+ schema_diff=True,
+ conn=self.conn)
status, rset = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=res)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/coll_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/coll_stats.sql
index 5745d2834..42b33cefa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/coll_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/coll_stats.sql
@@ -5,5 +5,5 @@ SELECT
FROM
pg_catalog.pg_statio_all_sequences
WHERE
- schemaname = {{ schema_name|qtLiteral }}
+ schemaname = {{ schema_name|qtLiteral(conn) }}
ORDER BY relname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/get_oid.sql
index 4db094970..a0a50ae2b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/get_oid.sql
@@ -3,5 +3,5 @@ FROM pg_catalog.pg_class cl
LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=cl.oid AND des.classoid='pg_class'::regclass)
LEFT OUTER JOIN pg_catalog.pg_namespace nsp ON (nsp.oid = cl.relnamespace)
WHERE relkind = 'S'
-AND relname = {{ name|qtLiteral }}
-AND nspname = {{ schema|qtLiteral }}
+AND relname = {{ name|qtLiteral(conn) }}
+AND nspname = {{ schema|qtLiteral(conn) }}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/grant.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/grant.sql
index d4a382c66..fbc0bb24c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/grant.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/grant.sql
@@ -10,7 +10,7 @@ ALTER SEQUENCE {{ seqname }}
{% if data.comment %}
COMMENT ON SEQUENCE {{ seqname }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% if data.securities %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/nodes.sql
index 3ebd66d02..73f74e365 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/nodes.sql
@@ -6,10 +6,10 @@ LEFT JOIN pg_catalog.pg_depend d1 ON d1.refobjid = cl.oid AND d1.deptype = 'i'
WHERE
relkind = 'S'
{% if scid %}
- AND relnamespace = {{scid|qtLiteral}}::oid
+ AND relnamespace = {{scid|qtLiteral(conn)}}::oid
{% endif %}
{% if seid %}
- AND cl.oid = {{seid|qtLiteral}}::oid
+ AND cl.oid = {{seid|qtLiteral(conn)}}::oid
{% endif %}
{% if schema_diff %}
AND CASE WHEN (SELECT COUNT(*) FROM pg_catalog.pg_depend
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql
index fbb691687..81f6574dd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequences/sql/default/update.sql
@@ -20,7 +20,7 @@ ALTER SEQUENCE IF EXISTS {{ conn|qtIdent(o_data.schema, data.name) }}
{% endif %}
{% if data.current_value is defined %}
{% set seqname = conn|qtIdent(o_data.schema, data.name) %}
-SELECT setval({{ seqname|qtLiteral }}, {{ data.current_value }}, true);
+SELECT setval({{ seqname|qtLiteral(conn) }}, {{ data.current_value }}, true);
{% endif %}
{% set defquery = '' %}
@@ -60,7 +60,7 @@ ALTER SEQUENCE IF EXISTS {{ conn|qtIdent(o_data.schema, data.name) }}
{% endif %}
{% if data.comment is defined and data.comment != o_data.comment %}
COMMENT ON SEQUENCE {{ seqname }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% if data.securities and data.securities|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props_msql.sql
index 62c9b8b84..0893a1f28 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props_msql.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/pg/default/alter_seq_props_msql.sql
@@ -1,4 +1,4 @@
-SELECT setval('public."Seq1_$%{}[]()&*^!@""''`\/#"', 7, true);
+SELECT setval( E'public."Seq1_$%{}[]()&*^!@""''`\\/#"', 7, true);
ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#"
INCREMENT 12
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props_msql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props_msql.sql
index 62c9b8b84..f3c0289cc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props_msql.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/ppas/default/alter_seq_props_msql.sql
@@ -1,4 +1,4 @@
-SELECT setval('public."Seq1_$%{}[]()&*^!@""''`\/#"', 7, true);
+SELECT setval(E'public."Seq1_$%{}[]()&*^!@""""''`\\/#"', 7, true);
ALTER SEQUENCE IF EXISTS public."Seq1_$%{}[]()&*^!@""'`\/#"
INCREMENT 12
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_objects.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_objects.sql
index e284d7b46..c4579759f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_objects.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_objects.sql
@@ -5,7 +5,7 @@
SELECT DISTINCT proname AS name
FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n
WHERE p.pronamespace = n.oid AND
- n.nspname = {{ trgSchema|qtLiteral }} AND
+ n.nspname = {{ trgSchema|qtLiteral(conn) }} AND
p.protype = '0'
ORDER BY proname;
{###########################################}
@@ -15,7 +15,7 @@ ORDER BY proname;
SELECT DISTINCT proname AS name
FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n
WHERE p.pronamespace = n.oid AND
- n.nspname = {{ trgSchema|qtLiteral }} AND
+ n.nspname = {{ trgSchema|qtLiteral(conn) }} AND
p.protype = '1'
ORDER BY proname;
{###########################################}
@@ -45,12 +45,12 @@ ORDER BY nspname;
SELECT relname AS name
FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n
WHERE c.relnamespace = n.oid AND
- n.nspname = {{ trgSchema|qtLiteral }} AND
+ n.nspname = {{ trgSchema|qtLiteral(conn) }} AND
{% if trgTyp == 'v' %}
{# If view is select then we need to fetch both view and materialized view #}
(c.relkind = 'v' OR c.relkind = 'm')
{% else %}
- c.relkind = {{ trgTyp|qtLiteral }}
+ c.relkind = {{ trgTyp|qtLiteral(conn) }}
{% endif %}
ORDER BY relname;
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
index 3360b2862..50ba41e3e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
@@ -1,5 +1,5 @@
SELECT s.oid as syid, synnamespace as scid
FROM pg_catalog.pg_synonym s
-WHERE synname = {{ data.name|qtLiteral }}
+WHERE synname = {{ data.name|qtLiteral(conn) }}
AND synnamespace IN
- ( SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = {{ data.schema|qtLiteral }} );
+ ( SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = {{ data.schema|qtLiteral(conn) }} );
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_schema.sql
index da5f6ad50..8baf6c488 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_schema.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_schema.sql
@@ -4,4 +4,4 @@ SELECT
FROM
pg_catalog.pg_class c
WHERE
- c.oid = {{syid|qtLiteral}}::oid;
+ c.oid = {{syid|qtLiteral(conn)}}::oid;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
index e24bce49b..a563cf64d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
@@ -698,7 +698,7 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
self.table_template_path,
self._GET_COLUMNS_FOR_TABLE_SQL
]),
- tid=data['tid']
+ tid=data['tid'], conn=self.conn
)
elif data and 'tname' in data:
SQL = render_template(
@@ -706,7 +706,7 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
self.table_template_path,
self._GET_COLUMNS_FOR_TABLE_SQL
]),
- tname=data['tname']
+ tname=data['tname'], conn=self.conn
)
if SQL:
@@ -747,7 +747,7 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
"/".join(
[self.table_template_path,
self._GET_COLUMNS_FOR_TABLE_SQL]
- ), tid=row['oid']
+ ), tid=row['oid'], conn=self.conn
)
status, type_cols = self.conn.execute_dict(SQL)
@@ -924,17 +924,6 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
request.data, encoding='utf-8'
)
- for k, v in data.items():
- try:
- # comments should be taken as is because if user enters a
- # json comment it is parsed by loads which should not happen
- if k in ('description',):
- data[k] = v
- else:
- data[k] = json.loads(v, encoding='utf-8')
- except (ValueError, TypeError, KeyError):
- data[k] = v
-
required_args = [
'name'
]
@@ -983,7 +972,8 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
# Get updated schema oid
sql = render_template(
"/".join([self.table_template_path, self._GET_SCHEMA_OID_SQL]),
- tname=data['name']
+ tname=data['name'],
+ conn=self.conn
)
status, new_scid = self.conn.execute_scalar(sql)
@@ -993,7 +983,7 @@ class TableView(BaseTableView, DataTypeReader, SchemaDiffTableCompare):
# we need oid to add object in tree at browser
sql = render_template(
"/".join([self.table_template_path, self._OID_SQL]),
- scid=new_scid, data=data
+ scid=new_scid, data=data, conn=self.conn
)
status, tid = self.conn.execute_scalar(sql)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py
index d525a06b5..cf1e66fde 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py
@@ -273,7 +273,8 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
"/".join([self.template_path, self._NODES_SQL]),
tid=tid,
clid=clid,
- show_sys_objects=self.blueprint.show_system_objects
+ show_sys_objects=self.blueprint.show_system_objects,
+ conn=self.conn
)
status, rset = self.conn.execute_2darray(SQL)
if not status:
@@ -416,7 +417,7 @@ class ColumnsView(PGChildNodeView, DataTypeReader):
# we need oid to add object in tree at browser
SQL = render_template(
"/".join([self.template_path, 'get_position.sql']),
- tid=tid, data=data
+ tid=tid, data=data, conn=self.conn
)
status, clid = self.conn.execute_scalar(SQL)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/templates/columns/macros/security.macros b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/templates/columns/macros/security.macros
index 39587c32b..20406ab99 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/templates/columns/macros/security.macros
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/templates/columns/macros/security.macros
@@ -1,5 +1,5 @@
{% macro APPLY(conn, type, schema_name, parent_object, child_object, provider, label) -%}
-SECURITY LABEL FOR {{ conn|qtIdent(provider) }} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS {{ label|qtLiteral }};
+SECURITY LABEL FOR {{ conn|qtIdent(provider) }} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS {{ label|qtLiteral(conn) }};
{%- endmacro %}
{% macro DROP(conn, type, schema_name, parent_object, child_object, provider) -%}
SECURITY LABEL FOR {{ conn|qtIdent(provider) }} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS NULL;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/column_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/column_test_data.json
index 01b7962d9..17560d3a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/column_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/column_test_data.json
@@ -193,7 +193,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -255,7 +255,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -272,7 +272,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -335,7 +335,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -352,7 +352,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -447,7 +447,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -740,7 +740,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -789,7 +789,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/utils.py
index 896822150..59ce4f70f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/tests/utils.py
@@ -103,12 +103,12 @@ def create_column(server, db_name, schema_name, table_name, col_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "ALTER TABLE %s.%s ADD COLUMN %s %s" % \
(schema_name, table_name, col_name, col_data_type)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get column position of newly added column
pg_cursor.execute("select attnum from pg_attribute where"
@@ -151,13 +151,13 @@ def create_identity_column(server, db_name, schema_name, table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "ALTER TABLE %s.%s ADD COLUMN %s %s " \
"GENERATED ALWAYS AS IDENTITY" % \
(schema_name, table_name, col_name, col_data_type)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get column position of newly added column
pg_cursor.execute("select attnum from pg_attribute where"
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/compound_trigger_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/compound_trigger_test_data.json
index a2523501a..4e82076b3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/compound_trigger_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/compound_trigger_test_data.json
@@ -151,7 +151,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -172,7 +172,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -193,7 +193,7 @@
"mocking_required": true,
"error_creating_compound_trigger": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -229,7 +229,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -254,7 +254,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -316,7 +316,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -363,7 +363,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -411,7 +411,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -448,7 +448,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -461,7 +461,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -548,7 +548,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PlACE_HOLDER"
},
"expected_data": {
@@ -608,7 +608,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PlACE_HOLDER"
},
"expected_data": {
@@ -705,7 +705,7 @@
"is_enable_trigger": "O"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -721,7 +721,7 @@
"is_enable_trigger": "O"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -743,7 +743,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PLACE_HOLDER"
},
"expected_data": {
@@ -760,7 +760,7 @@
"description": "This is test comment."
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -777,7 +777,7 @@
"description": "This is test comment."
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py
index b1171593f..6a7b3b041 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py
@@ -122,7 +122,7 @@ class CompoundTriggersUpdateTestCase(BaseTestGenerator):
with patch(self.mock_data["function_name"],
side_effect=self.mock_data["return_value"]), patch(
- 'pgadmin.utils.driver.psycopg2.connection.Connection.'
+ 'pgadmin.utils.driver.psycopg3.connection.Connection.'
'execute_scalar',
side_effect=[(True, True),
(True, "Mocked response")]):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py
index b9cbc99c4..7d67b0f80 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py
@@ -53,13 +53,13 @@ def create_compound_trigger(server, db_name, schema_name, table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE OR REPLACE TRIGGER %s FOR INSERT OR UPDATE ON %s.%s " \
"COMPOUND TRIGGER %s END;" % (trigger_name, schema_name,
table_name, code)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
pg_cursor.execute("SELECT oid FROM pg_catalog.pg_trigger "
"where tgname='%s'" % trigger_name)
@@ -98,12 +98,12 @@ def create_view(server, db_name, schema_name, sql_query, view_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = sql_query % (schema_name, view_name, schema_name, view_name,
server['username'])
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created view
pg_cursor.execute("select oid from pg_catalog.pg_class where "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
index 76f756be3..b0dd2aa32 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/__init__.py
@@ -540,7 +540,7 @@ class CheckConstraintView(PGChildNodeView):
# The below SQL will execute CREATE DDL only
sql = render_template(
"/".join([self.template_path, self._CREATE_SQL]),
- data=data
+ data=data, conn=self.conn
)
status, msg = self.conn.execute_scalar(sql)
@@ -568,7 +568,8 @@ class CheckConstraintView(PGChildNodeView):
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
tid=tid,
- name=data['name']
+ name=data['name'],
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -741,7 +742,7 @@ class CheckConstraintView(PGChildNodeView):
SQL = render_template("/".join([self.template_path,
self._CREATE_SQL]),
- data=data)
+ data=data, conn=self.conn)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/check_constraint_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/check_constraint_test_data.json
index 28debaf33..c37448999 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/check_constraint_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/check_constraint_test_data.json
@@ -83,7 +83,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -103,7 +103,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -124,7 +124,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -187,7 +187,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -204,7 +204,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -298,7 +298,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -469,7 +469,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -516,7 +516,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -547,7 +547,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -563,7 +563,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/utils.py
index ee6c49df9..964147485 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/tests/utils.py
@@ -107,7 +107,7 @@ def create_check_constraint(server, db_name, schema_name, table_name,
server['host'],
server['port'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
if query_val is None:
query = "ALTER TABLE %s.%s ADD CONSTRAINT %s CHECK ( (id > 0)) " \
@@ -119,7 +119,7 @@ def create_check_constraint(server, db_name, schema_name, table_name,
else:
query = eval(query_val)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly added check constraint
pg_cursor.execute(
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/utils.py
index 1ec69bd6b..7c2fa9b6d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/utils.py
@@ -181,6 +181,6 @@ def get_sql(conn, data, tid, cid=None, template_path=None):
return _('-- definition incomplete'), name
sql = render_template("/".join([template_path, 'create.sql']),
- data=data)
+ data=data, conn=conn)
return sql, name
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
index 90c542141..186100674 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/__init__.py
@@ -573,7 +573,7 @@ class ExclusionConstraintView(PGChildNodeView):
else:
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
- name=data['name']
+ name=data['name'], conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -633,7 +633,7 @@ class ExclusionConstraintView(PGChildNodeView):
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
- name=data['name']
+ name=data['name'], conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -796,7 +796,8 @@ class ExclusionConstraintView(PGChildNodeView):
data['table'] = self.table
SQL = render_template(
- "/".join([self.template_path, self._CREATE_SQL]), data=data)
+ "/".join([self.template_path, self._CREATE_SQL]), data=data,
+ conn=self.conn)
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/exclusion_constraint_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/exclusion_constraint_test_data.json
index 0c6b8ee8e..a711d5e75 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/exclusion_constraint_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/exclusion_constraint_test_data.json
@@ -77,7 +77,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -102,7 +102,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -127,7 +127,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -151,7 +151,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -210,7 +210,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -226,7 +226,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -322,7 +322,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -428,7 +428,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -447,7 +447,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -497,7 +497,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -531,7 +531,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/utils.py
index 8b3a62a64..643fab1fc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/tests/utils.py
@@ -103,13 +103,13 @@ def create_exclusion_constraint(server, db_name, schema_name, table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "ALTER TABLE %s.%s ADD CONSTRAINT %s EXCLUDE USING btree(" \
"id ASC NULLS FIRST WITH =)" % \
(schema_name, table_name, key_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly added index constraint
pg_cursor.execute("SELECT conindid FROM pg_catalog.pg_constraint "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/utils.py
index ec4b15298..470df006e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/utils.py
@@ -228,7 +228,7 @@ def get_sql(conn, data, did, tid, exid=None, template_path=None):
name = data['name'] = old_data['name']
sql = render_template("/".join([template_path, 'update.sql']),
- data=data, o_data=old_data)
+ data=data, o_data=old_data, conn=conn)
else:
if 'columns' not in data or \
(isinstance(data['columns'], list) and
@@ -276,7 +276,7 @@ def get_oper_class(conn, indextype, template_path=None):
:return:
"""
SQL = render_template("/".join([template_path, 'get_oper_class.sql']),
- indextype=indextype)
+ indextype=indextype, conn=conn)
status, res = conn.execute_2darray(SQL)
if not status:
@@ -301,7 +301,7 @@ def get_operator(conn, coltype, show_sysobj, template_path=None):
:return:
"""
SQL = render_template("/".join([template_path, 'get_operator.sql']),
- type=coltype, show_sysobj=show_sysobj)
+ type=coltype, show_sysobj=show_sysobj, conn=conn)
status, res = conn.execute_2darray(SQL)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
index 987f87a0e..68eee94f0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py
@@ -593,7 +593,7 @@ class ForeignKeyConstraintView(PGChildNodeView):
else:
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
- name=data['name']
+ name=data['name'], conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -688,7 +688,8 @@ class ForeignKeyConstraintView(PGChildNodeView):
sql = render_template(
"/".join([self.template_path, self._OID_SQL]),
tid=tid,
- name=data['name']
+ name=data['name'],
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/foreign_key_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/foreign_key_test_data.json
index 88ed76213..a6062f2ef 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/foreign_key_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/foreign_key_test_data.json
@@ -86,7 +86,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -114,7 +114,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -142,7 +142,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -169,7 +169,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -234,7 +234,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -252,7 +252,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -336,7 +336,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -470,7 +470,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -489,7 +489,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -539,7 +539,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -573,7 +573,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -591,7 +591,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/utils.py
index 06cee155c..89832e94b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/tests/utils.py
@@ -126,11 +126,11 @@ def create_foreignkey(server, db_name, schema_name, local_table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly added foreign key
pg_cursor.execute("SELECT oid FROM pg_catalog.pg_constraint "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
index 75557c199..284418fe4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/utils.py
@@ -243,7 +243,7 @@ def get_sql(conn, data, tid, fkid=None, template_path=None):
template_path, conn)
sql = render_template("/".join([template_path, 'update.sql']),
- data=data, o_data=old_data)
+ data=data, o_data=old_data, conn=conn)
if 'autoindex' in data and data['autoindex'] and \
('coveringindex' in data and data['coveringindex'] != ''):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
index e5bfa878e..aef6c8674 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py
@@ -616,7 +616,8 @@ class IndexConstraintView(PGChildNodeView):
"/".join([self.template_path, self._OID_SQL]),
tid=tid,
constraint_type=self.constraint_type,
- name=data['name']
+ name=data['name'],
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -678,7 +679,8 @@ class IndexConstraintView(PGChildNodeView):
"/".join([self.template_path, self._OID_SQL]),
tid=tid,
constraint_type=self.constraint_type,
- name=data['name']
+ name=data['name'],
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -881,7 +883,9 @@ class IndexConstraintView(PGChildNodeView):
SQL = render_template(
"/".join([self.template_path, self._CREATE_SQL]),
data=data,
- constraint_name=self.constraint_name)
+ constraint_name=self.constraint_name,
+ conn=self.conn
+ )
sql_header = "-- Constraint: {0}\n\n-- ".format(data['name'])
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/index_constraint_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/index_constraint_test_data.json
index 68f0ca2f8..65b4bebc4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/index_constraint_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/index_constraint_test_data.json
@@ -100,7 +100,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -120,7 +120,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -141,7 +141,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -165,7 +165,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -297,7 +297,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -318,7 +318,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -451,7 +451,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -639,7 +639,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -717,7 +717,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -803,7 +803,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -871,7 +871,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -895,7 +895,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/utils.py
index 5ac848855..c2dea525c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/tests/utils.py
@@ -112,12 +112,12 @@ def create_index_constraint(server, db_name, schema_name, table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "ALTER TABLE %s.%s ADD CONSTRAINT %s %s (id)" % \
(schema_name, table_name, key_name, key_type)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly added index constraint
pg_cursor.execute("SELECT conindid FROM pg_catalog.pg_constraint "
@@ -183,12 +183,12 @@ def create_unique_index(server, db_name, schema_name, table_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE UNIQUE INDEX CONCURRENTLY %s ON %s.%s (%s)" % \
(index_name, schema_name, table_name, column_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/utils.py
index fc6dffe53..a305dfb4d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/utils.py
@@ -290,7 +290,8 @@ def get_sql(conn, data, did, tid, ctype, cid=None, template_path=None):
sql = render_template("/".join([template_path, 'update.sql']),
data=data,
- o_data=old_data)
+ o_data=old_data,
+ conn=conn)
else:
is_error, errmsg, name = _check_required_args(data, name)
if is_error:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
index 57aa0a307..9ee52e735 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py
@@ -636,7 +636,7 @@ class IndexesView(PGChildNodeView, SchemaDiffObjectCompare):
# we need oid to add object in tree at browser
SQL = render_template(
"/".join([self.template_path, self._OID_SQL]),
- tid=tid, data=data
+ tid=tid, data=data, conn=self.conn
)
status, idx = self.conn.execute_scalar(SQL)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/index_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/index_test_data.json
index 32c920200..6d39edadf 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/index_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/index_test_data.json
@@ -156,7 +156,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -187,7 +187,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(True, True),(False, 'Mocked Internal Server Error'),(False, 'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -252,7 +252,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -270,7 +270,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -322,7 +322,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -340,7 +340,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -395,7 +395,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -445,7 +445,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "[(True,''),(False, 'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -476,7 +476,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "[(True,''),(False, 'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -507,7 +507,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "[(True,''),(False, 'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -636,7 +636,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/utils.py
index c23133a62..092503818 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/tests/utils.py
@@ -185,13 +185,13 @@ def create_index(server, db_name, schema_name, table_name, index_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE INDEX %s ON %s.%s USING btree (%s ASC NULLS LAST) " \
"TABLESPACE pg_default" % (index_name, schema_name,
table_name, col_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly added index
pg_cursor.execute("select oid from pg_catalog.pg_class "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py
index 364d0d724..329830b76 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py
@@ -564,7 +564,8 @@ class PartitionsView(BaseTableView, DataTypeReader, SchemaDiffObjectCompare):
# Get schema oid of partition
status, pscid = self.conn.execute_scalar(
render_template("/".join([self.table_template_path,
- self._GET_SCHEMA_OID_SQL]), tid=ptid))
+ self._GET_SCHEMA_OID_SQL]), tid=ptid,
+ conn=self.conn))
if not status:
return internal_server_error(errormsg=scid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py
index ac4b2d4a6..3af42c834 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py
@@ -368,7 +368,7 @@ class RowSecurityView(PGChildNodeView):
sql = render_template("/".join([self.template_path,
self._CREATE_SQL]),
data=data,
- conn=self.conn,
+ conn=self.conn
)
status, res = self.conn.execute_scalar(sql)
if not status:
@@ -377,7 +377,7 @@ class RowSecurityView(PGChildNodeView):
# we need oid to add object in tree at browser
sql = render_template(
"/".join([self.template_path, 'get_position.sql']),
- tid=tid, data=data
+ tid=tid, data=data, conn=self.conn
)
status, plid = self.conn.execute_scalar(sql)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/rls_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/rls_test_data.json
index 1adf62f44..c1e57b1a5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/rls_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/rls_test_data.json
@@ -55,7 +55,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -72,7 +72,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -88,7 +88,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -124,7 +124,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -149,7 +149,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -203,7 +203,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -240,7 +240,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -253,7 +253,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -302,7 +302,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -315,7 +315,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -328,7 +328,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -421,7 +421,7 @@
"id": "PLACE_HOLDER"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -438,7 +438,7 @@
"id": "PLACE_HOLDER"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/utils.py
index 96289ac54..198a33efb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/tests/utils.py
@@ -44,12 +44,12 @@ def create_policy(server, db_name, schema_name, table_name, policy_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE policy %s on %s.%s To public" % \
(policy_name, schema_name, table_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get role oid of newly added policy
pg_cursor.execute("select oid from pg_catalog.pg_policy where "
@@ -126,12 +126,12 @@ def delete_policy(server, db_name, policy_name, schema_name, table_name):
policy_count = pg_cursor.fetchone()
if policy_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "DROP policy %s on %s.%s" % \
(policy_name, schema_name, table_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/utils.py
index c67dbd1ee..f7d392c1a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/utils.py
@@ -89,13 +89,13 @@ def get_sql(conn, **kwargs):
old_data['table'] = table
sql = render_template(
"/".join([template_path, 'update.sql']),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=conn
)
else:
data['schema'] = schema
data['table'] = table
sql = render_template("/".join(
- [template_path, 'create.sql']), data=data)
+ [template_path, 'create.sql']), data=data, conn=conn)
return sql, data['name'] if 'name' in data else old_data['name']
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py
index 6f784712e..ee6e46d2b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py
@@ -340,7 +340,9 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare):
)
try:
SQL = render_template("/".join(
- [self.template_path, self._CREATE_SQL]), data=data)
+ [self.template_path, self._CREATE_SQL]),
+ data=data,
+ conn=self.conn)
status, res = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -348,7 +350,8 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare):
# Fetch the rule id against rule name to display node
# in tree browser
SQL = render_template("/".join(
- [self.template_path, 'rule_id.sql']), rule_name=data['name'])
+ [self.template_path, 'rule_id.sql']),
+ rule_name=data['name'], conn=self.conn)
status, rule_id = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=rule_id)
@@ -488,7 +491,8 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare):
SQL = render_template("/".join(
[self.template_path, self._CREATE_SQL]),
data=res_data, display_comments=True,
- add_replace_clause=True
+ add_replace_clause=True,
+ conn=self.conn
)
return ajax_response(response=SQL)
@@ -511,11 +515,12 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare):
old_data = res_data
SQL = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=self.conn
)
else:
SQL = render_template("/".join(
- [self.template_path, self._CREATE_SQL]), data=data)
+ [self.template_path, self._CREATE_SQL]),
+ data=data, conn=self.conn)
return SQL, data['name'] if 'name' in data else old_data['name']
@check_precondition
@@ -553,13 +558,15 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare):
old_data = res_data
sql = render_template(
"/".join([self.template_path, self._UPDATE_SQL]),
- data=data, o_data=old_data
+ data=data, o_data=old_data, conn=self.conn
)
else:
RuleView._check_schema_diff(target_schema, res_data)
sql = render_template("/".join(
[self.template_path, self._CREATE_SQL]),
- data=res_data, display_comments=True)
+ data=res_data,
+ display_comments=True,
+ conn=self.conn)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/rules_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/rules_test_data.json
index cd053c5dc..e3cfa0ed1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/rules_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/rules_test_data.json
@@ -46,7 +46,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -66,7 +66,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -85,7 +85,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -133,7 +133,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -187,7 +187,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -224,7 +224,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -237,7 +237,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -286,7 +286,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -299,7 +299,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -312,7 +312,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -348,7 +348,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -361,7 +361,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/utils.py
index eb66a52dd..f3f6a94ce 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/tests/utils.py
@@ -44,12 +44,12 @@ def create_rule(server, db_name, schema_name, table_name, rule_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE OR REPLACE RULE %s AS ON UPDATE TO %s.%s DO NOTHING" %\
(rule_name, schema_name, table_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get role oid of newly added rule
pg_cursor.execute("select oid from pg_catalog.pg_rewrite where "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/create.sql
index 1e095dbd1..c075f4ba0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/create.sql
@@ -7,5 +7,9 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
+<<<<<<< Updated upstream
IS {{ data.comment|qtLiteral }};
+=======
+ IS {{ data.comment|qtLiteral(conn) }};
+>>>>>>> Stashed changes
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/get_oid.sql
index 1970d96b2..b858844ba 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/get_oid.sql
@@ -5,4 +5,4 @@ FROM
pg_catalog.pg_constraint
WHERE
conrelid = {{tid}}::oid
- AND conname={{ name|qtLiteral }};
+ AND conname={{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/update.sql
index 5a323c4d2..f30eea794 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/default/update.sql
@@ -7,7 +7,13 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(o_data.nspname, data.table) }}
ALTER TABLE IF EXISTS {{ conn|qtIdent(o_data.nspname, data.table) }}
VALIDATE CONSTRAINT {{ conn|qtIdent(data.name) }};{% endif -%}
{% if data.comment is defined and data.comment != o_data.comment %}
+<<<<<<< Updated upstream
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, data.table) }}
IS {{ data.comment|qtLiteral }};{% endif %}
{% endif -%}
+=======
+COMMENT ON CONSTRAINT {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
+ IS {{ data.comment|qtLiteral(conn) }};
+{% endif %}
+>>>>>>> Stashed changes
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/macros/security.macros b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/macros/security.macros
index 1beb2595b..2e99342c7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/macros/security.macros
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/macros/security.macros
@@ -1,5 +1,5 @@
{% macro APPLY(conn, type, schema_name, parent_object, child_object, provider, label) -%}
-SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS {{ label|qtLiteral }};
+SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS {{ label|qtLiteral(conn) }};
{%- endmacro %}
{% macro DROP(conn, type, schema_name, parent_object, child_object, provider) -%}
SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema_name, parent_object, child_object) }} IS NULL;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/12_plus/create.sql
index 1929705a7..46df0aeea 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/12_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/12_plus/create.sql
@@ -23,7 +23,7 @@ CACHE {{data.seqcache|int}} {% endif %}
{### Add comments ###}
{% if data and data.description and data.description != None %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### Add variables to column ###}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/create.sql
index 03db79b45..7fa814ad1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/create.sql
@@ -23,7 +23,7 @@ CACHE {{data.seqcache|int}} {% endif %}
{### Add comments ###}
{% if data and data.description and data.description != None %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### Add variables to column ###}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/get_position.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/get_position.sql
index fe640d58d..367fa4f43 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/get_position.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/get_position.sql
@@ -1,4 +1,4 @@
SELECT att.attnum
FROM pg_catalog.pg_attribute att
WHERE att.attrelid = {{tid}}::oid
- AND att.attname = {{data.name|qtLiteral(True)}}
+ AND att.attname = {{data.name|qtLiteral(conn)}}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/nodes.sql
index 2648e65ed..171eb740d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/nodes.sql
@@ -11,9 +11,9 @@ FROM pg_catalog.pg_attribute att
LEFT OUTER JOIN pg_catalog.pg_namespace ns ON ns.oid=cs.relnamespace
LEFT OUTER JOIN pg_catalog.pg_index pi ON pi.indrelid=att.attrelid AND indisprimary
WHERE
- att.attrelid = {{ tid|qtLiteral }}::oid
+ att.attrelid = {{ tid|qtLiteral(conn) }}::oid
{% if clid %}
- AND att.attnum = {{ clid|qtLiteral }}
+ AND att.attnum = {{ clid|qtLiteral(conn) }}
{% endif %}
{### To show system objects ###}
{% if not show_sys_objects and not has_oids %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/stats.sql
index b9b000156..6aa4754e6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/stats.sql
@@ -9,6 +9,6 @@ SELECT
FROM
pg_catalog.pg_stats
WHERE
- schemaname = {{schema|qtLiteral}}
- AND tablename = {{table|qtLiteral}}
- AND attname = {{column|qtLiteral}};
+ schemaname = {{schema|qtLiteral(conn)}}
+ AND tablename = {{table|qtLiteral(conn)}}
+ AND attname = {{column|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/update.sql
index dc9c6d9ce..6da49a9c8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/columns/sql/default/update.sql
@@ -102,7 +102,7 @@ COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}}
{% else %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, o_data.name)}}
{% endif %}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### Update column variables ###}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql
index 2f9b392ab..82e97c250 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql
@@ -22,5 +22,5 @@ END {{ conn|qtIdent(data.name) }};
{% if data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql
index ff66a7f27..5407b4868 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql
@@ -1,4 +1,4 @@
SELECT t.oid
FROM pg_catalog.pg_trigger t
WHERE tgrelid = {{tid}}::OID
- AND tgname = {{data.name|qtLiteral}};
+ AND tgname = {{data.name|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql
index 30f2a657b..765592634 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql
@@ -30,12 +30,12 @@ END {{ conn|qtIdent(data.name) }};
{% if data.description is not defined and o_data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{o_data.description|qtLiteral}};
+ IS {{o_data.description|qtLiteral(conn)}};
{% endif %}
{% endif %}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %}
{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
index 26f944907..0e9f2ecc2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/11_plus/create.sql
@@ -17,5 +17,5 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment and data.name %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
index b943ecb00..8ebe6f9f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/create.sql
@@ -15,5 +15,5 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment and data.name %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oid.sql
index 21599a558..3eda508ec 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oid.sql
@@ -1,4 +1,4 @@
SELECT ct.conindid AS oid
FROM pg_catalog.pg_constraint ct
WHERE contype='x' AND
-ct.conname = {{ name|qtLiteral }};
+ct.conname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oper_class.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oper_class.sql
index 0624a0e49..cdabbb0a2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oper_class.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_oper_class.sql
@@ -2,6 +2,6 @@ SELECT opcname
FROM pg_catalog.pg_opclass opc,
pg_catalog.pg_am am
WHERE opcmethod=am.oid AND
- am.amname ={{indextype|qtLiteral}} AND
+ am.amname ={{indextype|qtLiteral(conn)}} AND
NOT opcdefault
ORDER BY 1
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_operator.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_operator.sql
index eb0c72fd2..ba0c5ebee 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_operator.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_operator.sql
@@ -26,7 +26,7 @@ FROM pg_catalog.pg_operator op,
UNION SELECT 'smallserial', 0
UNION SELECT 'bigserial', 0
UNION SELECT 'serial', 0) t1
- WHERE typname = {{type|qtLiteral}}) AS types
+ WHERE typname = {{type|qtLiteral(conn)}}) AS types
WHERE oprcom > 0 AND
(op.oprleft=types.oid OR op.oprright=types.oid)
{% else %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
index cd57cbb3e..a79c3d1f8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/update.sql
@@ -21,6 +21,6 @@ ALTER INDEX IF EXISTS {{ conn|qtIdent(data.schema, data.name) }}
{# ==== To update exclusion constraint comments ==== #}
{% if data.comment is defined and data.comment != o_data.comment %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/create.sql
index 6601e7ed1..bf53512ee 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/create.sql
@@ -28,6 +28,6 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment and data.name %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/get_oid.sql
index 5b0b42132..b0f345537 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/get_oid.sql
@@ -2,4 +2,4 @@ SELECT ct.oid,
NOT convalidated as convalidated
FROM pg_catalog.pg_constraint ct
WHERE contype='f' AND
-ct.conname = {{ name|qtLiteral }};
+ct.conname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/update.sql
index 321ad5131..0938bab18 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/default/update.sql
@@ -15,6 +15,6 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{# ==== To update foreign key comments ==== #}
{% if data.comment is defined and data.comment != o_data.comment %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/tests/test_foreign_key_properties.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/tests/test_foreign_key_properties.py
index 9c21030dc..abdbccfa8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/tests/test_foreign_key_properties.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/tests/test_foreign_key_properties.py
@@ -38,7 +38,7 @@ class TestColumnForeignKeyGetConstraintCols(BaseTestGenerator):
" and pg_attribute.attname = 'some_column'")
table_id, column_id = cursor.fetchone()
- if connection.server_version < 90100:
+ if test_utils.get_server_version(connection) < 90100:
self.versions_to_test = ['default']
else:
self.versions_to_test = ['9.1_plus']
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/11_plus/create.sql
index 799a39cd5..c5c54a12f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/11_plus/create.sql
@@ -16,5 +16,5 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment and data.name %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/create.sql
index 0a46c4e9d..521dc5041 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/create.sql
@@ -13,5 +13,5 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.table) }}
{% if data.comment and data.name %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/get_oid.sql
index 154b8c44c..6901effa7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/get_oid.sql
@@ -1,4 +1,4 @@
SELECT ct.conindid as oid
FROM pg_catalog.pg_constraint ct
WHERE contype='{{constraint_type}}' AND
-ct.conname = {{ name|qtLiteral }};
+ct.conname = {{ name|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/update.sql
index 8d4301a99..5b30e993a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/default/update.sql
@@ -20,6 +20,6 @@ ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }}
{# ==== To update constraint comments ==== #}
{% if data.comment is defined and data.comment != o_data.comment %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/alter.sql
index 50371e9e4..837789ef2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/alter.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/alter.sql
@@ -8,4 +8,4 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.table)}}
{% if data.description is defined and data.description %}
COMMENT ON INDEX {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};{% endif %}
+ IS {{data.description|qtLiteral(conn)}};{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/get_oid.sql
index e47573ad6..94c99ddda 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/get_oid.sql
@@ -4,4 +4,4 @@ FROM pg_catalog.pg_index idx
JOIN pg_catalog.pg_class tab ON tab.oid=indrelid
JOIN pg_catalog.pg_namespace n ON n.oid=tab.relnamespace
WHERE indrelid = {{tid}}::OID
- AND cls.relname = {{data.name|qtLiteral}};
+ AND cls.relname = {{data.name|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/update.sql
index 2748cd9fe..a96b1ea0f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/update.sql
@@ -35,4 +35,4 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.table)}}
{## Changes description ##}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON INDEX {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};{% endif %}
+ IS {{data.description|qtLiteral(conn)}};{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/pg/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/pg/default/create.sql
index bde3c4909..f39edda72 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/pg/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/pg/default/create.sql
@@ -63,5 +63,5 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}}
{### SQL for COMMENT ###}
{% if data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/ppas/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/ppas/default/create.sql
index c4dac5b54..d54e98d2e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/ppas/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/partitions/sql/ppas/default/create.sql
@@ -61,5 +61,5 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}}
{### SQL for COMMENT ###}
{% if data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/row_security_policies/sql/default/get_position.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/row_security_policies/sql/default/get_position.sql
index 851d504d9..9dbf8df84 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/row_security_policies/sql/default/get_position.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/row_security_policies/sql/default/get_position.sql
@@ -1,2 +1,2 @@
SELECT pl.oid FROM pg_catalog.pg_policy pl
-WHERE pl.polrelid = {{tid}}::oid AND pl.polname = {{data.name|qtLiteral}};
+WHERE pl.polrelid = {{tid}}::oid AND pl.polname = {{data.name|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/create.sql
index bf0e46fb6..394afb45a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/create.sql
@@ -23,5 +23,5 @@ CREATE{% if add_replace_clause %} OR REPLACE{% endif %} RULE {{ conn|qtIdent(dat
{% endif %}
{% if data.comment %}
-COMMENT ON RULE {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.view) }} IS {{ data.comment|qtLiteral }};{% endif %}
+COMMENT ON RULE {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.view) }} IS {{ data.comment|qtLiteral(conn) }};{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/rule_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/rule_id.sql
index b528fa2e5..6bc9c8321 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/rule_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/rule_id.sql
@@ -5,5 +5,5 @@ SELECT
FROM
pg_catalog.pg_rewrite rw
WHERE
- rw.rulename={{ rule_name|qtLiteral }}
+ rw.rulename={{ rule_name|qtLiteral(conn) }}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql
index 90a94e2a8..567aae00c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql
@@ -34,7 +34,7 @@ CREATE OR REPLACE RULE {{ conn|qtIdent(rule_name) }} AS
{% endif %}
{% set old_comment = o_data.comment|default('', true) %}
{% if (data.comment is defined and (data.comment != old_comment)) %}
-COMMENT ON RULE {{ conn|qtIdent(rule_name) }} ON {{ conn|qtIdent(o_data.schema, o_data.view) }} IS {{ data.comment|qtLiteral }};{% endif %}
+COMMENT ON RULE {{ conn|qtIdent(rule_name) }} ON {{ conn|qtIdent(o_data.schema, o_data.view) }} IS {{ data.comment|qtLiteral(conn) }};{% endif %}
{% if data.enabled is defined and o_data.enabled != data.enabled %}
ALTER TABLE {{ conn|qtIdent(o_data.schema, o_data.view) }} {% if (data.enabled in ['false', False]) %}DISABLE{% endif %}{% if (data.enabled in ['true', True]) %}ENABLE{% endif %} RULE {{ conn|qtIdent(o_data.name) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/create.sql
index 02de260cb..64c22707c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/create.sql
@@ -144,7 +144,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}}
{### SQL for COMMENT ###}
{% if data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{#===========================================#}
{#====== MAIN TABLE TEMPLATE ENDS HERE ======#}
@@ -157,7 +157,7 @@ COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
{% if c.description %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.name, c.name)}}
- IS {{c.description|qtLiteral}};
+ IS {{c.description|qtLiteral(conn)}};
{% endif %}
{### Add variables to column ###}
{% if c.attoptions and c.attoptions|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/update.sql
index e40d2e36c..591ed675e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/11_plus/update.sql
@@ -209,7 +209,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}} RESET (
{#####################################################}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/create.sql
index c43de881d..09fa59160 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/create.sql
@@ -162,7 +162,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}}
{### SQL for COMMENT ###}
{% if data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{#===========================================#}
{#====== MAIN TABLE TEMPLATE ENDS HERE ======#}
@@ -175,7 +175,7 @@ COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
{% if c.description %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.name, c.name)}}
- IS {{c.description|qtLiteral}};
+ IS {{c.description|qtLiteral(conn)}};
{% endif %}
{### Add variables to column ###}
{% if c.attoptions and c.attoptions|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/update.sql
index 1b13269d8..e14750395 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/12_plus/update.sql
@@ -226,7 +226,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}} RESET (
{#####################################################}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{#####################################################}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/coll_table_stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/coll_table_stats.sql
index 443d32362..fae6c4521 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/coll_table_stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/coll_table_stats.sql
@@ -25,5 +25,5 @@ FROM
JOIN
pg_catalog.pg_class cl on cl.oid=st.relid
WHERE
- schemaname = {{schema_name|qtLiteral}}
+ schemaname = {{schema_name|qtLiteral(conn)}}
ORDER BY st.relname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/create.sql
index c1eaedf7e..09957feb5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/create.sql
@@ -143,7 +143,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}}
{### SQL for COMMENT ###}
{% if data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{#===========================================#}
{#====== MAIN TABLE TEMPLATE ENDS HERE ======#}
@@ -156,7 +156,7 @@ COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
{% if c.description %}
COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.name, c.name)}}
- IS {{c.description|qtLiteral}};
+ IS {{c.description|qtLiteral(conn)}};
{% endif %}
{### Add variables to column ###}
{% if c.attoptions and c.attoptions|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql
index 2bb034c13..2b63fdab3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql
@@ -15,5 +15,5 @@ WHERE
{% if tid %}
c.oid = {{tid}}::OID
{% else %}
- c.relname = {{tname|qtLiteral}}
+ c.relname = {{tname|qtLiteral(conn)}}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_oid.sql
index 97ab5fef5..3f53d6f5a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_oid.sql
@@ -2,4 +2,4 @@ SELECT rel.oid as tid
FROM pg_catalog.pg_class rel
WHERE rel.relkind IN ('r','s','t','p')
AND rel.relnamespace = {{ scid }}::oid
-AND rel.relname = {{data.name|qtLiteral}}
+AND rel.relname = {{data.name|qtLiteral(conn)}}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema_oid.sql
index ea6aee3ab..9e34436b9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_schema_oid.sql
@@ -8,5 +8,5 @@ WHERE
{% if tid %}
c.oid = {{tid}}::oid;
{% else %}
- c.relname = {{tname|qtLiteral}}::text;
+ c.relname = {{tname|qtLiteral(conn)}}::text;
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/update.sql
index fb1ffda31..f1b4625a2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/update.sql
@@ -210,7 +210,7 @@ ALTER TABLE IF EXISTS {{conn|qtIdent(data.schema, data.name)}} RESET (
{#####################################################}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{#####################################################}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/macros/constraints.macro b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/macros/constraints.macro
index e3529bed7..a307753db 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/macros/constraints.macro
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/macros/constraints.macro
@@ -106,7 +106,7 @@
{% for d in data %}
{% if d.name and d.comment %}
COMMENT ON CONSTRAINT {{ conn|qtIdent(d.name) }} ON {{ conn|qtIdent(schema, table) }}
- IS {{ d.comment|qtLiteral }};
+ IS {{ d.comment|qtLiteral(conn) }};
{% endif %}
{% endfor %}
{%- endmacro %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/create.sql
index 5a69fba33..f3d7c2070 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/create.sql
@@ -33,5 +33,5 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql
index 26ee3818d..8b7a9ded0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql
@@ -47,12 +47,12 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description is not defined and o_data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{o_data.description|qtLiteral}};
+ IS {{o_data.description|qtLiteral(conn)}};
{% endif %}
{% endif %}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %}
{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql
index 93f323e1a..dcfe217ed 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql
@@ -6,4 +6,4 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}}
{## Changes description ##}
{% if data.description %}
COMMENT ON INDEX {{conn|qtIdent(data.name)}}
- IS {{data.description|qtLiteral}};{% endif %}
\ No newline at end of file
+ IS {{data.description|qtLiteral(conn)}};{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql
index 7676c1332..5f3c877ae 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql
@@ -33,5 +33,5 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql
index fcaddc964..d37f4bfa5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql
@@ -2,4 +2,4 @@ SELECT t.oid
FROM pg_catalog.pg_trigger t
WHERE NOT tgisinternal
AND tgrelid = {{tid}}::OID
- AND tgname = {{data.name|qtLiteral}};
+ AND tgname = {{data.name|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql
index 4c8fd07de..4cb6af005 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql
@@ -47,12 +47,12 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description is not defined and o_data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{o_data.description|qtLiteral}};
+ IS {{o_data.description|qtLiteral(conn)}};
{% endif %}
{% endif %}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %}
{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/create.sql
index 5a69fba33..f3d7c2070 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/create.sql
@@ -33,5 +33,5 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql
index c351b3e7b..e6b1d8624 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql
@@ -56,12 +56,12 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description is not defined and o_data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{o_data.description|qtLiteral}};
+ IS {{o_data.description|qtLiteral(conn)}};
{% endif %}
{% endif %}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %}
{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql
index 93f323e1a..dcfe217ed 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql
@@ -6,4 +6,4 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}}
{## Changes description ##}
{% if data.description %}
COMMENT ON INDEX {{conn|qtIdent(data.name)}}
- IS {{data.description|qtLiteral}};{% endif %}
\ No newline at end of file
+ IS {{data.description|qtLiteral(conn)}};{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql
index 7676c1332..5f3c877ae 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql
@@ -33,5 +33,5 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql
index fcaddc964..d37f4bfa5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql
@@ -2,4 +2,4 @@ SELECT t.oid
FROM pg_catalog.pg_trigger t
WHERE NOT tgisinternal
AND tgrelid = {{tid}}::OID
- AND tgname = {{data.name|qtLiteral}};
+ AND tgname = {{data.name|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql
index e007e1251..6341cc0c6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql
@@ -56,12 +56,12 @@ CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|
{% if data.description is not defined and o_data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{o_data.description|qtLiteral}};
+ IS {{o_data.description|qtLiteral(conn)}};
{% endif %}
{% endif %}
{% if data.description is defined and o_data.description != data.description %}
COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %}
{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/table_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/table_test_data.json
index a88314f32..109689d58 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/table_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/table_test_data.json
@@ -600,7 +600,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error'),(True,True)]"
},
"expected_data": {
@@ -662,7 +662,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -725,7 +725,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -742,7 +742,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -805,7 +805,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -822,7 +822,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -968,7 +968,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -985,7 +985,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1502,7 +1502,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1569,7 +1569,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1619,7 +1619,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1669,7 +1669,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1809,7 +1809,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -1848,7 +1848,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_acl_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_acl_sql.py
index e50e48d40..0a553254e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_acl_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_acl_sql.py
@@ -34,16 +34,19 @@ class TestColumnAclSql(SQLTemplateTestBase):
" AND pg_attribute.attname = 'some_column'")
self.table_id, self.column_id = cursor.fetchone()
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"columns", "sql")
- template_file = self.get_template_file(version, file_path,
- "acl.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "acl.sql")
template = file_as_template(template_file)
public_schema_id = 2200
sql = template.render(scid=public_schema_id,
tid=self.table_id,
- clid=self.column_id
+ clid=self.column_id,
+ conn=connection
)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_properties_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_properties_sql.py
index cf18066d1..d0f9d844f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_properties_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_column_properties_sql.py
@@ -30,15 +30,18 @@ class TestColumnPropertiesSql(SQLTemplateTestBase):
self.table_id = cursor.fetchone()[0]
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"columns", "sql")
- template_file = self.get_template_file(version, file_path,
- "properties.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "properties.sql")
template = file_as_template(template_file)
public_schema_id = 2200
sql = template.render(scid=public_schema_id,
- tid=self.table_id
+ tid=self.table_id,
+ conn=connection
)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get_pre_table_creation_parameters.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get_pre_table_creation_parameters.py
index fc5120724..e86350077 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get_pre_table_creation_parameters.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get_pre_table_creation_parameters.py
@@ -59,13 +59,6 @@ class TableGetPreTablecreationParametersTestCase(BaseTestGenerator):
self.table_id = tables_utils.create_table(self.server, self.db_name,
self.schema_name,
self.table_name)
- # self.table_id = tables_utils.create_table_for_partition(
- # self.server,
- # self.db_name,
- # self.schema_name,
- # self.table_name,
- # 'partitioned',
- # 'list')
def runTest(self):
"""This function will delete added table under schema node."""
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_acl_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_acl_sql.py
index aec630c8d..93e0ec96b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_acl_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_acl_sql.py
@@ -30,15 +30,18 @@ class TestTablesAclSql(SQLTemplateTestBase):
"'test_table'")
self.table_id = cursor.fetchone()[0]
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"tables", "sql")
- template_file = self.get_template_file(version, file_path,
- "acl.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "acl.sql")
template = file_as_template(template_file)
public_schema_id = 2200
sql = template.render(scid=public_schema_id,
- tid=self.table_id)
+ tid=self.table_id,
+ conn=connection)
return sql
def assertions(self, fetch_result, descriptions):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_node_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_node_sql.py
index 6d1e776e7..4cbe270e6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_node_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_node_sql.py
@@ -22,14 +22,17 @@ class TestTablesNodeSql(SQLTemplateTestBase):
def test_setup(self, connection, cursor):
pass
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"tables", "sql")
- template_file = self.get_template_file(version, file_path,
- "nodes.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "nodes.sql")
template = file_as_template(template_file)
public_schema_id = 2200
- sql = template.render(scid=public_schema_id)
+ sql = template.render(scid=public_schema_id,
+ conn=connection)
return sql
def assertions(self, fetch_result, descriptions):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_properties_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_properties_sql.py
index 91e2c1759..e0e7638a3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_properties_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_tables_properties_sql.py
@@ -38,17 +38,20 @@ class TestTablesPropertiesSql(SQLTemplateTestBase):
self.assertEqual(None, first_row['typname'])
self.assertEqual([], first_row['coll_inherits'])
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"tables", "sql")
- template_file = self.get_template_file(version, file_path,
- "properties.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "properties.sql")
template = file_as_template(template_file)
public_schema_id = 2200
sql = template.render(scid=public_schema_id,
did=self.database_id,
datlastsysoid=DATABASE_LAST_SYSTEM_OID,
- tid=self.table_id
+ tid=self.table_id,
+ conn=connection
)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py
index 96a67e3fe..4cf6a0018 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py
@@ -34,20 +34,22 @@ class TestTriggerGetOidSql(SQLTemplateTestBase):
" AND pg_attribute.attname = 'some_column'")
self.table_id, self.column_id = cursor.fetchone()
- def generate_sql(self, version):
+ def generate_sql(self, conn):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"triggers", "sql")
if 'type' in self.server:
file_path = os.path.join(os.path.dirname(__file__), "..",
"templates",
"triggers", "sql", self.server['type'])
- template_file = self.get_template_file(version, file_path,
+ template_file = self.get_template_file(self.get_server_version(conn),
+ file_path,
"get_oid.sql")
- jinja2.filters.FILTERS['qtLiteral'] = lambda value: "NULL"
+ jinja2.filters.FILTERS['qtLiteral'] = lambda conn, value: "NULL"
template = file_as_template(template_file)
sql = template.render(data={'name': None},
- tid=self.table_id
+ tid=self.table_id,
+ conn=conn
)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py
index c2511900e..c51fbc675 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py
@@ -29,17 +29,19 @@ class TestTriggerNodesSql(SQLTemplateTestBase):
"WHERE pg_class.relname='test_table'")
self.table_id = cursor.fetchone()[0]
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"triggers", "sql")
if 'type' in self.server:
file_path = os.path.join(os.path.dirname(__file__), "..",
"templates",
"triggers", "sql", self.server['type'])
- template_file = self.get_template_file(version, file_path,
- "nodes.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "nodes.sql")
template = file_as_template(template_file)
- sql = template.render(tid=self.table_id)
+ sql = template.render(tid=self.table_id, conn=connection)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/utils.py
index e61f4b74a..36732290f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/utils.py
@@ -120,10 +120,10 @@ def create_table(server, db_name, schema_name, table_name, custom_query=None):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created table
pg_cursor.execute("select oid from pg_catalog.pg_class "
@@ -194,7 +194,7 @@ def create_table_for_partition(
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = ''
@@ -224,7 +224,7 @@ def create_table_for_partition(
"saledate date NOT NULL)" % (schema_name, table_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created table
pg_cursor.execute("select oid from pg_catalog.pg_class "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py
index f591d8955..1794a5537 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py
@@ -611,7 +611,7 @@ class TriggerView(PGChildNodeView, SchemaDiffObjectCompare):
# we need oid to add object in tree at browser
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- tid=tid, data=data)
+ tid=tid, data=data, conn=self.conn)
status, trid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=tid)
@@ -735,7 +735,7 @@ class TriggerView(PGChildNodeView, SchemaDiffObjectCompare):
# so we need to return new OID of trigger.
SQL = render_template(
"/".join([self.template_path, self._OID_SQL]),
- tid=tid, data=data
+ tid=tid, data=data, conn=self.conn
)
status, new_trid = self.conn.execute_scalar(SQL)
if not status:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/triggers_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/triggers_test_data.json
index c377b6527..fe73b76f7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/triggers_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/triggers_test_data.json
@@ -105,7 +105,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -127,7 +127,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -148,7 +148,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -196,7 +196,7 @@
"table_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -258,7 +258,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -304,7 +304,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -352,7 +352,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -395,7 +395,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, True),(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -409,7 +409,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(True, True),(True, True)"
},
"expected_data": {
@@ -435,7 +435,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -448,7 +448,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -461,7 +461,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -569,7 +569,7 @@
"is_enable_trigger": "O"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -585,7 +585,7 @@
"is_enable_trigger": "O"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -606,7 +606,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "PLACE_HOLDER"
},
"expected_data": {
@@ -663,7 +663,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -680,7 +680,7 @@
"description": "This is test comment."
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -697,7 +697,7 @@
"description": "This is test comment."
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, True),(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
index 2eb2011a4..dda7e317d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/utils.py
@@ -47,14 +47,14 @@ def create_trigger(server, db_name, schema_name, table_name, trigger_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE TRIGGER %s BEFORE INSERT ON %s.%s FOR EACH ROW " \
"EXECUTE PROCEDURE %s.%s()" % (trigger_name, schema_name,
table_name, schema_name,
trigger_func_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
pg_cursor.execute("SELECT oid FROM pg_catalog.pg_trigger "
"where tgname='%s'" % trigger_name)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py
index 495d7ef44..c5876d976 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py
@@ -123,7 +123,7 @@ def get_trigger_function_and_columns(conn, data, tid,
driver = get_driver(PG_DEFAULT_DRIVER)
# We know that trigger has more than 1 argument, let's join them
# and convert it to string
- formatted_args = [driver.qtLiteral(arg)
+ formatted_args = [driver.qtLiteral(arg, conn)
for arg in data['custom_tgargs']]
formatted_args = ', '.join(formatted_args)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
index 6e26c4c34..b8ebe5893 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py
@@ -215,7 +215,7 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
if data['typoid']:
sql = render_template("/".join([self.table_template_path,
'get_columns_for_table.sql']),
- tid=data['typoid'])
+ tid=data['typoid'], conn=self.conn)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -259,7 +259,7 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
sql = render_template("/".join(
[self.table_template_path,
'get_columns_for_table.sql']),
- tid=row['oid']
+ tid=row['oid'], conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -572,7 +572,8 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
sql = render_template(
"/".join([self.table_template_path, self._PROPERTIES_SQL]),
did=did, scid=scid, tid=tid,
- datlastsysoid=self._DATABASE_LAST_SYSTEM_OID
+ datlastsysoid=self._DATABASE_LAST_SYSTEM_OID,
+ conn=self.conn
)
status, res = self.conn.execute_dict(sql)
if not status:
@@ -1589,7 +1590,8 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
return internal_server_error(errormsg=rest)
sql = render_template("/".join([self.table_template_path,
- self._GET_SCHEMA_OID_SQL]), tid=tid)
+ self._GET_SCHEMA_OID_SQL]), tid=tid,
+ conn=self.conn)
status, rest = self.conn.execute_2darray(sql)
if not status:
return internal_server_error(errormsg=rest)
@@ -1638,7 +1640,8 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
self.table_template_path,
self._GET_SCHEMA_OID_SQL
]),
- tid=row['oid']
+ tid=row['oid'],
+ conn=self.conn
)
)
if not status:
@@ -1671,7 +1674,8 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
self.table_template_path,
self._GET_SCHEMA_OID_SQL
]),
- tid=row['partition_name']
+ tid=row['partition_name'],
+ conn=self.conn
)
)
if not status:
@@ -2051,7 +2055,9 @@ class BaseTableView(PGChildNodeView, BasePartitionTable, VacuumSettings):
# Get schema oid
status, scid = self.conn.execute_scalar(
render_template("/".join([self.table_template_path,
- self._GET_SCHEMA_OID_SQL]), tid=tid))
+ self._GET_SCHEMA_OID_SQL]),
+ tid=tid,
+ conn=self.conn))
if not status:
return internal_server_error(errormsg=scid)
if scid is None:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/create.sql
index 12dd10251..7cd2aaa4e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/create.sql
@@ -7,11 +7,11 @@ CREATE SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if data.nspacl %}
{% for priv in data.nspacl %}
{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
{% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/is_catalog.sql
index 9386acbf4..f15d3c177 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/update.sql
index 39f7f94c7..510adf5dd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.1_plus/sql/update.sql
@@ -3,7 +3,7 @@
{# ==== To update catalog comments ==== #}
{% if data.description and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ==== To update catalog securitylabel ==== #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/create.sql
index 2dd2328b6..d55e2aac0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/create.sql
@@ -7,7 +7,7 @@ CREATE SCHEMA{% if add_not_exists_clause %} IF NOT EXISTS{% endif %} {{ conn|qtI
{% endif %}
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if data.nspacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/is_catalog.sql
index 9386acbf4..f15d3c177 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/update.sql
index 39f7f94c7..510adf5dd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/9.2_plus/sql/update.sql
@@ -3,7 +3,7 @@
{# ==== To update catalog comments ==== #}
{% if data.description and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ==== To update catalog securitylabel ==== #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/is_catalog.sql
index 9386acbf4..f15d3c177 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/nodes.sql
index 5de3ee5b4..6468b1920 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/pg/default/sql/nodes.sql
@@ -9,6 +9,9 @@ FROM
WHERE
{% if scid %}
nsp.oid={{scid}}::oid AND
+ {% else %}
+ {% if not show_sysobj %}
+ nspname NOT LIKE E'pg\\_%' AND
{% endif %}
(
{{ CATALOGS.LIST('nsp') }}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/create.sql
index 38c553228..811955ad9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/create.sql
@@ -7,11 +7,11 @@ CREATE SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if data.nspacl %}
{% for priv in data.nspacl %}
{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
{% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/is_catalog.sql
index 992b18c3b..1fd2f207e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/update.sql
index 39f7f94c7..510adf5dd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.1_plus/sql/update.sql
@@ -3,7 +3,7 @@
{# ==== To update catalog comments ==== #}
{% if data.description and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ==== To update catalog securitylabel ==== #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/create.sql
index 38c553228..811955ad9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/create.sql
@@ -7,11 +7,11 @@ CREATE SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if data.nspacl %}
{% for priv in data.nspacl %}
{{ PRIVILEGE.APPLY(conn, 'SCHEMA', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
{% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/is_catalog.sql
index 992b18c3b..1fd2f207e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/update.sql
index 39f7f94c7..510adf5dd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/9.2_plus/sql/update.sql
@@ -3,7 +3,7 @@
{# ==== To update catalog comments ==== #}
{% if data.description and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ==== To update catalog securitylabel ==== #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/acl.sql
index 04b20a271..c41e31373 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/is_catalog.sql
index 992b18c3b..1fd2f207e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/catalog/ppas/default/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/functions/security.macros b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/functions/security.macros
index 5d9e2a65d..bd90b8af6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/functions/security.macros
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/functions/security.macros
@@ -2,7 +2,7 @@
{# Macros for Security Labels (functions module) #}
{#################################################}
{% macro SET(conn, type, name, provider, label, schema, func_args) -%}
-SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema, name) }}({{func_args}}) IS {{ label|qtLiteral }};
+SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema, name) }}({{func_args}}) IS {{ label|qtLiteral(conn) }};
{%- endmacro %}
{% macro UNSET(conn, type, name, provider, schema, func_args) -%}
SECURITY LABEL FOR {{ provider }} ON {{ type }} {{ conn|qtIdent(schema, name) }}({{func_args}}) IS NULL;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/schemas/security.macros b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/schemas/security.macros
index 888e9f05d..cc7e9803d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/schemas/security.macros
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/macros/schemas/security.macros
@@ -2,7 +2,7 @@
{# Macros for schema and its child nodes #}
{##########################################}
{% macro SET(conn, type, name, provider, label, schema) -%}
-SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema, name) }} IS {{ label|qtLiteral }};
+SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(schema, name) }} IS {{ label|qtLiteral(conn) }};
{%- endmacro %}
{% macro UNSET(conn, type, name, provider, schema) -%}
SECURITY LABEL FOR {{ provider }} ON {{ type }} {{ conn|qtIdent(schema, name) }} IS NULL;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/acl.sql
index 58d0aff55..89136c7df 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/create.sql
index bbbb2477c..d5a65a166 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/create.sql
@@ -9,7 +9,7 @@ CREATE SCHEMA{% if add_not_exists_clause %} IF NOT EXISTS{% endif %} {{ conn|qtI
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ACL for the schema #}
{% if data.nspacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/is_catalog.sql
index 9386acbf4..f15d3c177 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/nodes.sql
index ca557164e..c4b1197e6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/nodes.sql
@@ -11,7 +11,7 @@ WHERE
nsp.oid={{scid}}::oid AND
{% else %}
{% if not show_sysobj %}
- nspname NOT LIKE 'pg!_%' escape '!' AND
+ nspname NOT LIKE E'pg\\_%' AND
{% endif %}
{% endif %}
NOT (
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/oid.sql
index 9528a26fe..4c75713c3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/oid.sql
@@ -1 +1 @@
-SELECT nsp.oid FROM pg_catalog.pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral }};
+SELECT nsp.oid FROM pg_catalog.pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/update.sql
index e04140875..ad2a5593c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/update.sql
@@ -16,7 +16,7 @@ ALTER SCHEMA {{ conn|qtIdent(data.name) }}
{# Update the comments/description #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# Change the privileges #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/acl.sql
index 58d0aff55..89136c7df 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/acl.sql
@@ -15,7 +15,7 @@ FROM
FROM
(SELECT pg_catalog.aclexplode(nsp.nspacl) as d
FROM pg_catalog.pg_namespace nsp
- WHERE nsp.oid = {{ scid|qtLiteral }}::OID
+ WHERE nsp.oid = {{ scid|qtLiteral(conn) }}::OID
) a
) b
LEFT JOIN pg_catalog.pg_roles g ON (b.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/create.sql
index bbbb2477c..d5a65a166 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/create.sql
@@ -9,7 +9,7 @@ CREATE SCHEMA{% if add_not_exists_clause %} IF NOT EXISTS{% endif %} {{ conn|qtI
{% if data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ACL for the schema #}
{% if data.nspacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/get_name.sql
index be20542b7..5f5612c02 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/get_name.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/get_name.sql
@@ -1 +1 @@
-SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral }};
+SELECT nsp.nspname FROM pg_catalog.pg_namespace nsp WHERE nsp.oid = {{ scid|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/is_catalog.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/is_catalog.sql
index 992b18c3b..1fd2f207e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/is_catalog.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/is_catalog.sql
@@ -6,4 +6,4 @@ SELECT
FROM
pg_catalog.pg_namespace nsp
WHERE
- nsp.oid = {{ scid|qtLiteral }}::OID;
+ nsp.oid = {{ scid|qtLiteral(conn) }}::OID;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/oid.sql
index 9528a26fe..4c75713c3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/oid.sql
@@ -1 +1 @@
-SELECT nsp.oid FROM pg_catalog.pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral }};
+SELECT nsp.oid FROM pg_catalog.pg_namespace nsp WHERE nsp.nspname = {{ schema|qtLiteral(conn) }};
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/update.sql
index 3f9a26587..82991a8a2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/update.sql
@@ -17,7 +17,7 @@ ALTER SCHEMA {{ conn|qtIdent(data.name) }}
{### To update SCHEMA comments ###}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{### Change the security labels ###}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json
index 87b0d3afd..00f8beabd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/schema_test_data.json
@@ -54,7 +54,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a schema')"
},
"expected_data": {
@@ -127,7 +127,7 @@
"invalid": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching schema nodes')"
},
"expected_data": {
@@ -168,7 +168,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False, 'Mocked Internal Server Error while updating a schema')]"
},
"expected_data": {
@@ -194,7 +194,7 @@
"internal_server_error": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a schema')"
},
"expected_data": {
@@ -232,7 +232,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching schema properties')"
},
"expected_data": {
@@ -258,7 +258,7 @@
"schema_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching schema list')"
},
"expected_data": {
@@ -285,7 +285,7 @@
"schema_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching schema children')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py
index 7a051ac13..b88b625b0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/utils.py
@@ -58,10 +58,10 @@ def create_schema(connection, schema_name):
"""This function add the schemas into databases"""
try:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute("CREATE SCHEMA %s" % schema_name)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get schema details of newly created schema
pg_cursor.execute("SELECT sch.oid, sch.nspname FROM "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
index 10956a36f..6f514950c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
@@ -745,7 +745,7 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
try:
SQL = render_template("/".join([self.template_path,
self._GET_SUBTYPES_SQL]),
- subtype=True)
+ subtype=True, conn=self.conn)
status, rset = self.conn.execute_2darray(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -775,7 +775,8 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
try:
SQL = render_template("/".join([self.template_path,
self._GET_SUBTYPES_SQL]),
- subtype_opclass=True, data=data)
+ subtype_opclass=True, data=data,
+ conn=self.conn)
if SQL:
status, rset = self.conn.execute_2darray(SQL)
if not status:
@@ -806,7 +807,8 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
try:
SQL = render_template("/".join([self.template_path,
self._GET_SUBTYPES_SQL]),
- get_opcintype=True, data=data)
+ get_opcintype=True, data=data,
+ conn=self.conn)
if SQL:
status, opcintype = self.conn.execute_scalar(SQL)
if not status:
@@ -847,7 +849,7 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
# else we will disable the combobox
SQL = render_template("/".join([self.template_path,
self._GET_SUBTYPES_SQL]),
- getoid=True, data=data)
+ getoid=True, data=data, conn=self.conn)
if SQL:
status, oid = self.conn.execute_scalar(SQL)
if not status:
@@ -1040,7 +1042,7 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
# we need scid to update in browser tree
SQL = render_template("/".join([self.template_path,
'get_scid.sql']),
- schema=data['schema'])
+ schema=data['schema'], conn=self.conn)
status, scid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=scid)
@@ -1048,7 +1050,7 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
# we need oid to add object in tree at browser
SQL = render_template("/".join([self.template_path,
self._OID_SQL]),
- scid=scid, data=data)
+ scid=scid, data=data, conn=self.conn)
status, tid = self.conn.execute_scalar(SQL)
if not status:
return internal_server_error(errormsg=tid)
@@ -1091,7 +1093,8 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
return internal_server_error(errormsg=res)
SQL = render_template("/".join([self.template_path,
- 'get_scid.sql']), tid=tid)
+ 'get_scid.sql']),
+ tid=tid, conn=self.conn)
# Get updated schema oid
status, scid = self.conn.execute_scalar(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/create.sql
index 0e4289700..a2d4da1b0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/create.sql
@@ -13,7 +13,7 @@ CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% els
{### Enum Type ###}
{% if data and data.typtype == 'e' %}
CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else %}{{ conn|qtIdent(data.name) }}{% endif %} AS ENUM
- ({% for e in data.enum %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral }}{% endfor %});
+ ({% for e in data.enum %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral(conn) }}{% endfor %});
{% endif %}
{### Range Type ###}
{% if data and data.typtype == 'r' %}
@@ -43,11 +43,11 @@ CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% els
PASSEDBYVALUE{% endif %}{% if data.typalign %},
ALIGNMENT = {{data.typalign}}{% endif %}{% if data.typstorage %},
STORAGE = {{data.typstorage}}{% endif %}{% if data.typcategory %},
- CATEGORY = {{data.typcategory|qtLiteral}}{% endif %}{% if data.typispreferred %},
+ CATEGORY = {{data.typcategory|qtLiteral(conn)}}{% endif %}{% if data.typispreferred %},
PREFERRED = {{data.typispreferred}}{% endif %}{% if data.typdefault %},
- DEFAULT = {{data.typdefault|qtLiteral}}{% endif %}{% if data.element %},
+ DEFAULT = {{data.typdefault|qtLiteral(conn)}}{% endif %}{% if data.element %},
ELEMENT = {{data.element}}{% endif %}{% if data.typdelim %},
- DELIMITER = {{data.typdelim|qtLiteral}}{% endif %}{% if data.is_collatable %},
+ DELIMITER = {{data.typdelim|qtLiteral(conn)}}{% endif %}{% if data.is_collatable %},
COLLATABLE = {{data.is_collatable}}{% endif %}
);
@@ -64,7 +64,7 @@ ALTER TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else
COMMENT ON TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else %}{{ conn|qtIdent(data.name) }}{% endif %}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### ACL ###}
{% if data.typacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_oid.sql
index d5282bc10..1196af4c0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_oid.sql
@@ -6,6 +6,6 @@ FROM pg_catalog.pg_type t
LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=t.oid AND des.classoid='pg_type'::regclass)
WHERE t.typtype != 'd' AND t.typname NOT LIKE E'\\_%' AND t.typnamespace = {{scid}}::oid
{% if data %}
- AND t.typname = {{data.name|qtLiteral}}
+ AND t.typname = {{data.name|qtLiteral(conn)}}
{% endif %}
ORDER BY t.typname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_scid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_scid.sql
index 65d7661d4..8c3c05add 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_scid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_scid.sql
@@ -11,5 +11,5 @@ SELECT
FROM
pg_catalog.pg_namespace ns
WHERE
- ns.nspname = {{schema|qtLiteral}}::text;
+ ns.nspname = {{schema|qtLiteral(conn)}}::text;
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_subtypes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_subtypes.sql
index f8ba524a2..bc788310b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_subtypes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/get_subtypes.sql
@@ -12,7 +12,7 @@ ORDER BY 1
SELECT opc.opcname
FROM pg_catalog.pg_opclass opc
JOIN pg_catalog.pg_type typ ON opc.opcintype=typ.oid
- AND typ.typname = {{ data.typname|qtLiteral }}
+ AND typ.typname = {{ data.typname|qtLiteral(conn) }}
WHERE opc.opcmethod = 403
ORDER BY opcname;
{% endif %}
@@ -21,9 +21,9 @@ ORDER BY opcname;
SELECT opc.opcintype
FROM pg_catalog.pg_opclass opc
JOIN pg_catalog.pg_type typ ON opc.opcintype=typ.oid
- AND typ.typname = {{ data.typname|qtLiteral }}
+ AND typ.typname = {{ data.typname|qtLiteral(conn) }}
WHERE opc.opcmethod = 403
- AND opc.opcname = {{ data.opcname|qtLiteral }}
+ AND opc.opcname = {{ data.opcname|qtLiteral(conn) }}
ORDER BY opcname;
{% endif %}
{### To fill subtype diff function combobox ###}
@@ -41,7 +41,7 @@ ORDER BY proname;
{### To fill canonical combobox ###}
{% if getoid %}
SELECT oid FROM pg_catalog.pg_type
-WHERE typname = {{ data.name|qtLiteral }}
+WHERE typname = {{ data.name|qtLiteral(conn) }}
{% endif %}
{% if canonical and oid %}
SELECT proname, nspname,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/type_schema_diff.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/type_schema_diff.sql
index 5f0b5fccf..246e3bc1d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/type_schema_diff.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/type_schema_diff.sql
@@ -19,7 +19,7 @@ CREATE TYPE {% if o_data.schema %}{{ conn|qtIdent(o_data.schema, o_data.name) }}
{### Enum Type ###}
{% if data and data.typtype == 'e' %}
CREATE TYPE {% if o_data.schema %}{{ conn|qtIdent(o_data.schema, o_data.name) }}{% else %}{{ conn|qtIdent(o_data.name) }}{% endif %} AS ENUM
- ({% for e in data.enum.added %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral }}{% endfor %});
+ ({% for e in data.enum.added %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral(conn) }}{% endfor %});
{% endif %}
{### Range Type ###}
{% if data and (data.typtype == 'r' or (data.typtype is not defined and o_data.typtype == 'r')) %}
@@ -52,11 +52,11 @@ CREATE TYPE {% if o_data.schema %}{{ conn|qtIdent(o_data.schema, o_data.name) }}
PASSEDBYVALUE{% endif %}{% if data.typalign %},
ALIGNMENT = {{data.typalign}}{% endif %}{% if data.typstorage %},
STORAGE = {{data.typstorage}}{% endif %}{% if data.typcategory %},
- CATEGORY = {{data.typcategory|qtLiteral}}{% endif %}{% if data.typispreferred %},
+ CATEGORY = {{data.typcategory|qtLiteral(conn)}}{% endif %}{% if data.typispreferred %},
PREFERRED = {{data.typispreferred}}{% endif %}{% if data.typdefault %},
- DEFAULT = {{data.typdefault|qtLiteral}}{% endif %}{% if data.element %},
+ DEFAULT = {{data.typdefault|qtLiteral(conn)}}{% endif %}{% if data.element %},
ELEMENT = {{data.element}}{% endif %}{% if data.typdelim %},
- DELIMITER = {{data.typdelim|qtLiteral}}{% endif %}{% if data.is_collatable %},
+ DELIMITER = {{data.typdelim|qtLiteral(conn)}}{% endif %}{% if data.is_collatable %},
COLLATABLE = {{data.is_collatable}}{% endif %}
);
@@ -73,7 +73,7 @@ ALTER TYPE {% if o_data.schema %}{{ conn|qtIdent(o_data.schema, o_data.name) }}{
COMMENT ON TYPE {% if o_data.schema %}{{ conn|qtIdent(o_data.schema, o_data.name) }}{% else %}{{ conn|qtIdent(o_data.name) }}{% endif %}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### ACL ###}
{% if data.typacl and data.typacl|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/update.sql
index 036ea2a11..fd40a44a0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/pg/sql/default/update.sql
@@ -12,7 +12,7 @@ ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
{# Below will change objects comment #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{#======================================#}
@@ -87,12 +87,12 @@ ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
{% if c_idx == 1 %}
{# if first new element then add it after old data enum list#}
ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- ADD VALUE {{r.label|qtLiteral}} {% if o_enum_len > 0 %}AFTER {{o_data.enum[o_enum_len].label|qtLiteral }}{% endif %};
+ ADD VALUE {{r.label|qtLiteral(conn)}} {% if o_enum_len > 0 %}AFTER {{o_data.enum[o_enum_len].label|qtLiteral(conn) }}{% endif %};
{% else %}
{# if first new element then add it after new data enum list#}
{% set p_idx = loop.index - 2 %}
ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- ADD VALUE {{r.label|qtLiteral}} AFTER {{enum.added[p_idx].label|qtLiteral}};
+ ADD VALUE {{r.label|qtLiteral(conn)}} AFTER {{enum.added[p_idx].label|qtLiteral(conn)}};
{% endif %}
{% endfor %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/create.sql
index 691735732..a2c5cec99 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/create.sql
@@ -13,7 +13,7 @@ CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% els
{### Enum Type ###}
{% if data and data.typtype == 'e' %}
CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else %}{{ conn|qtIdent(data.name) }}{% endif %} AS ENUM
- ({% for e in data.enum %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral }}{% endfor %});
+ ({% for e in data.enum %}{% if loop.index != 1 %}, {% endif %}{{ e.label|qtLiteral(conn) }}{% endfor %});
{% endif %}
{### Range Type ###}
{% if data and data.typtype == 'r' %}
@@ -43,11 +43,11 @@ CREATE TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% els
PASSEDBYVALUE{% endif %}{% if data.typalign %},
ALIGNMENT = {{data.typalign}}{% endif %}{% if data.typstorage %},
STORAGE = {{data.typstorage}}{% endif %}{% if data.typcategory %},
- CATEGORY = {{data.typcategory|qtLiteral}}{% endif %}{% if data.typispreferred %},
+ CATEGORY = {{data.typcategory|qtLiteral(conn)}}{% endif %}{% if data.typispreferred %},
PREFERRED = {{data.typispreferred}}{% endif %}{% if data.typdefault %},
- DEFAULT = {{data.typdefault|qtLiteral}}{% endif %}{% if data.element %},
+ DEFAULT = {{data.typdefault|qtLiteral(conn)}}{% endif %}{% if data.element %},
ELEMENT = {{data.element}}{% endif %}{% if data.typdelim %},
- DELIMITER = {{data.typdelim|qtLiteral}}{% endif %}{% if data.is_collatable %},
+ DELIMITER = {{data.typdelim|qtLiteral(conn)}}{% endif %}{% if data.is_collatable %},
COLLATABLE = {{data.is_collatable}}{% endif %}
);
@@ -74,7 +74,7 @@ ALTER TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else
COMMENT ON TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{% else %}{{ conn|qtIdent(data.name) }}{% endif %}
- IS {{data.description|qtLiteral}};
+ IS {{data.description|qtLiteral(conn)}};
{% endif %}
{### ACL ###}
{% if data.typacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_oid.sql
index d5282bc10..1196af4c0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_oid.sql
@@ -6,6 +6,6 @@ FROM pg_catalog.pg_type t
LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=t.oid AND des.classoid='pg_type'::regclass)
WHERE t.typtype != 'd' AND t.typname NOT LIKE E'\\_%' AND t.typnamespace = {{scid}}::oid
{% if data %}
- AND t.typname = {{data.name|qtLiteral}}
+ AND t.typname = {{data.name|qtLiteral(conn)}}
{% endif %}
ORDER BY t.typname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_scid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_scid.sql
index 65d7661d4..8c3c05add 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_scid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_scid.sql
@@ -11,5 +11,5 @@ SELECT
FROM
pg_catalog.pg_namespace ns
WHERE
- ns.nspname = {{schema|qtLiteral}}::text;
+ ns.nspname = {{schema|qtLiteral(conn)}}::text;
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_subtypes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_subtypes.sql
index f8ba524a2..bc788310b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_subtypes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/get_subtypes.sql
@@ -12,7 +12,7 @@ ORDER BY 1
SELECT opc.opcname
FROM pg_catalog.pg_opclass opc
JOIN pg_catalog.pg_type typ ON opc.opcintype=typ.oid
- AND typ.typname = {{ data.typname|qtLiteral }}
+ AND typ.typname = {{ data.typname|qtLiteral(conn) }}
WHERE opc.opcmethod = 403
ORDER BY opcname;
{% endif %}
@@ -21,9 +21,9 @@ ORDER BY opcname;
SELECT opc.opcintype
FROM pg_catalog.pg_opclass opc
JOIN pg_catalog.pg_type typ ON opc.opcintype=typ.oid
- AND typ.typname = {{ data.typname|qtLiteral }}
+ AND typ.typname = {{ data.typname|qtLiteral(conn) }}
WHERE opc.opcmethod = 403
- AND opc.opcname = {{ data.opcname|qtLiteral }}
+ AND opc.opcname = {{ data.opcname|qtLiteral(conn) }}
ORDER BY opcname;
{% endif %}
{### To fill subtype diff function combobox ###}
@@ -41,7 +41,7 @@ ORDER BY proname;
{### To fill canonical combobox ###}
{% if getoid %}
SELECT oid FROM pg_catalog.pg_type
-WHERE typname = {{ data.name|qtLiteral }}
+WHERE typname = {{ data.name|qtLiteral(conn) }}
{% endif %}
{% if canonical and oid %}
SELECT proname, nspname,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/update.sql
index 036ea2a11..fd40a44a0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/types/ppas/sql/default/update.sql
@@ -12,7 +12,7 @@ ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
{# Below will change objects comment #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{#======================================#}
@@ -87,12 +87,12 @@ ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
{% if c_idx == 1 %}
{# if first new element then add it after old data enum list#}
ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- ADD VALUE {{r.label|qtLiteral}} {% if o_enum_len > 0 %}AFTER {{o_data.enum[o_enum_len].label|qtLiteral }}{% endif %};
+ ADD VALUE {{r.label|qtLiteral(conn)}} {% if o_enum_len > 0 %}AFTER {{o_data.enum[o_enum_len].label|qtLiteral(conn) }}{% endif %};
{% else %}
{# if first new element then add it after new data enum list#}
{% set p_idx = loop.index - 2 %}
ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
- ADD VALUE {{r.label|qtLiteral}} AFTER {{enum.added[p_idx].label|qtLiteral}};
+ ADD VALUE {{r.label|qtLiteral(conn)}} AFTER {{enum.added[p_idx].label|qtLiteral(conn)}};
{% endif %}
{% endfor %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/types_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/types_test_data.json
index 220df84a4..127f865b7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/types_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/types_test_data.json
@@ -112,7 +112,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -138,7 +138,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -164,7 +164,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while deleting a type')"
},
"expected_data": {
@@ -190,7 +190,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while deleting a type')"
},
"expected_data": {
@@ -228,7 +228,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching type nodes')"
},
"expected_data": {
@@ -254,7 +254,7 @@
"node": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching type node')"
},
"expected_data": {
@@ -322,7 +322,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error while updating type')"
},
"expected_data": {
@@ -348,7 +348,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a type')"
},
"expected_data": {
@@ -386,7 +386,7 @@
"type_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching type')"
},
"expected_data": {
@@ -413,7 +413,7 @@
"type_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching types')"
},
"expected_data": {
@@ -440,7 +440,7 @@
"type_list": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching subtypes')"
},
"expected_data": {
@@ -478,7 +478,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching collation')"
},
"expected_data": {
@@ -504,7 +504,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error while fetching external function')"
},
"expected_data": {
@@ -530,7 +530,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while fetching a type sql')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/utils.py
index e025acfbf..f5eccdeb5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/utils.py
@@ -55,14 +55,14 @@ def create_type(server, db_name, schema_name, type_name):
server['host'],
server['port'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = 'CREATE TYPE %s.%s AS (one "char", two "char"[]); ' \
'ALTER TYPE %s.%s OWNER TO %s' % (schema_name, type_name,
schema_name, type_name,
server['username'])
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created type
pg_cursor.execute("select oid from pg_catalog.pg_type "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
index 7bb2ee411..92c1205a8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
@@ -559,7 +559,8 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare):
return internal_server_error(errormsg=res)
SQL = render_template("/".join(
- [self.template_path, 'sql/view_id.sql']), data=data)
+ [self.template_path, 'sql/view_id.sql']), data=data,
+ conn=self.conn)
status, view_id = self.conn.execute_scalar(SQL)
if not status:
@@ -604,7 +605,8 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare):
return internal_server_error(errormsg=res)
SQL = render_template("/".join(
- [self.template_path, 'sql/view_id.sql']), data=data)
+ [self.template_path, 'sql/view_id.sql']), data=data,
+ conn=self.conn)
status, res_data = self.conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
@@ -880,7 +882,7 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare):
sql = render_template("/".join(
[self.template_path, self._SQL_PREFIX + self._CREATE_SQL]),
- data=data)
+ data=data, conn=self.conn)
if data['definition']:
sql += "\n"
sql += render_template("/".join(
@@ -1075,7 +1077,8 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare):
SQL = render_template("/".join(
[self.rule_temp_path,
self._SQL_PREFIX + self._CREATE_SQL]),
- data=res, display_comments=display_comments)
+ data=res, display_comments=display_comments,
+ conn=self.conn)
sql_data += '\n'
sql_data += SQL
return sql_data
@@ -1252,7 +1255,7 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare):
# Format arguments
if len(res_rows['custom_tgargs']) > 0:
driver = get_driver(PG_DEFAULT_DRIVER)
- formatted_args = [driver.qtLiteral(arg)
+ formatted_args = [driver.qtLiteral(arg, self.conn)
for arg in res_rows['custom_tgargs']]
res_rows['tgargs'] = ', '.join(formatted_args)
else:
@@ -1921,7 +1924,7 @@ class MViewNode(ViewNode, VacuumSettings):
SQL = render_template("/".join(
[self.template_path, self._SQL_PREFIX + self._CREATE_SQL]),
- data=data)
+ data=data, conn=self.conn)
if data['definition']:
SQL += "\n"
SQL += render_template("/".join(
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/create.sql
index 47a00b053..56b2fcef6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/create.sql
@@ -40,6 +40,6 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.name) }}
{% if data.comment %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/update.sql
index e9e1c4550..a9c742de7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/update.sql
@@ -57,7 +57,7 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if o_data.comment and not data.comment %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ o_data.comment|qtLiteral }};
+ IS {{ o_data.comment|qtLiteral(conn) }};
{% endif %}
{% else %}
{# ======= Alter Tablespace ========= #}
@@ -157,7 +157,7 @@ ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }} RES
{% if (data.comment is defined and (data.comment != old_comment)) %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{# ============= The SQL generated below will change privileges ============= #}
{% if data.datacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/view_id.sql
index fe4c57a0e..29a8a8cfa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_catalog.pg_class c
LEFT OUTER JOIN pg_catalog.pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = {{ data.schema|qtLiteral }};
+WHERE c.relname = {{ data.name|qtLiteral(conn) }} and nsp.nspname = {{ data.schema|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/create.sql
index bfb807a5e..300b5361a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/create.sql
@@ -40,6 +40,6 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.name) }}
{% if data.comment %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/update.sql
index e9e1c4550..a9c742de7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/update.sql
@@ -57,7 +57,7 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if o_data.comment and not data.comment %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ o_data.comment|qtLiteral }};
+ IS {{ o_data.comment|qtLiteral(conn) }};
{% endif %}
{% else %}
{# ======= Alter Tablespace ========= #}
@@ -157,7 +157,7 @@ ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }} RES
{% if (data.comment is defined and (data.comment != old_comment)) %}
COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{# ============= The SQL generated below will change privileges ============= #}
{% if data.datacl %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/view_id.sql
index fe4c57a0e..29a8a8cfa 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_catalog.pg_class c
LEFT OUTER JOIN pg_catalog.pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = {{ data.schema|qtLiteral }};
+WHERE c.relname = {{ data.name|qtLiteral(conn) }} and nsp.nspname = {{ data.schema|qtLiteral(conn) }};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/create.sql
index 940029202..99b8f83c9 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/create.sql
@@ -23,6 +23,6 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.name) }}
{% endif %}
{% if data.comment %}
COMMENT ON VIEW {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/update.sql
index 544ef8e62..a25ddff8b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/update.sql
@@ -49,10 +49,10 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
{% if (data.comment is defined and (data.comment != old_comment)) %}
COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% elif data.del_sql == True and old_comment != '' %}
COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ old_comment|qtLiteral }};
+ IS {{ old_comment|qtLiteral(conn) }};
{% endif %}
{# The SQL generated below will change privileges #}
{% if o_data.acl_sql and o_data.acl_sql != '' %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/view_id.sql
index 8b87a863b..a4565a31a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_catalog.pg_class c
LEFT OUTER JOIN pg_catalog.pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = {{ data.name |qtLiteral }} and nsp.nspname = '{{ data.schema }}';
+WHERE c.relname = {{ data.name |qtLiteral(conn) }} and nsp.nspname = '{{ data.schema }}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/create.sql
index e47da8581..f12e4ecc3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/create.sql
@@ -23,6 +23,6 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(data.schema, data.name) }}
{% endif %}
{% if data.comment %}
COMMENT ON VIEW {{ conn|qtIdent(data.schema, data.name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% endif %}
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/update.sql
index 544ef8e62..a25ddff8b 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/update.sql
@@ -49,10 +49,10 @@ ALTER TABLE IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
{% if (data.comment is defined and (data.comment != old_comment)) %}
COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ data.comment|qtLiteral }};
+ IS {{ data.comment|qtLiteral(conn) }};
{% elif data.del_sql == True and old_comment != '' %}
COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
- IS {{ old_comment|qtLiteral }};
+ IS {{ old_comment|qtLiteral(conn) }};
{% endif %}
{# The SQL generated below will change privileges #}
{% if o_data.acl_sql and o_data.acl_sql != '' %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/view_id.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/view_id.sql
index e1868f5fb..c38976ff7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/view_id.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/view_id.sql
@@ -2,5 +2,5 @@
{% if data %}
SELECT c.oid, c.relname FROM pg_catalog.pg_class c
LEFT OUTER JOIN pg_catalog.pg_namespace nsp on nsp.oid = c.relnamespace
-WHERE c.relname = {{ data.name|qtLiteral }} and nsp.nspname = '{{ data.schema}}';
+WHERE c.relname = {{ data.name|qtLiteral(conn) }} and nsp.nspname = '{{ data.schema}}';
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/utils.py
index 3597a6ba3..03e486fc7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/utils.py
@@ -129,7 +129,7 @@ def create_trigger(server, db_name, schema_name, table_name, trigger_name,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "CREATE TRIGGER %s INSTEAD OF DELETE ON %s.%s FOR EACH ROW " \
"EXECUTE PROCEDURE %s.%s(%s)" % (trigger_name, schema_name,
@@ -137,7 +137,7 @@ def create_trigger(server, db_name, schema_name, table_name, trigger_name,
trigger_func_name,
trigger_func_arg)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
pg_cursor.execute("SELECT oid FROM pg_catalog.pg_trigger "
"where tgname='%s'" % trigger_name)
@@ -177,11 +177,11 @@ def create_view(server, db_name, schema_name, view_name, sql_query=None,
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = eval(sql_query)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created view
pg_cursor.execute("select oid from pg_catalog.pg_class "
@@ -233,7 +233,7 @@ def get_view_id(server, db_name, view_name):
server['host'],
server['port'],
server['sslmode'])
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
# Get 'oid' from newly created view
pg_cursor.execute("select oid from pg_catalog.pg_class "
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/view_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/view_test_data.json
index 9dace550b..d693ad174 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/view_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/view_test_data.json
@@ -250,7 +250,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -270,7 +270,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -309,7 +309,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -401,7 +401,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -421,7 +421,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -533,7 +533,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -782,7 +782,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -819,7 +819,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1069,7 +1069,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_void",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_void",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1091,7 +1091,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1113,7 +1113,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/subscription_test_data.json b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/subscription_test_data.json
index 60a1a1348..37849a8b1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/subscription_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/subscription_test_data.json
@@ -107,7 +107,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -137,7 +137,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, True)(False, 'Mocked Internal Server Error ')"
},
"expected_data": {
@@ -162,7 +162,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -187,7 +187,7 @@
"database_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -230,7 +230,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -267,7 +267,7 @@
"database_nodes": true,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_2darray",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_2darray",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -292,7 +292,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -356,7 +356,7 @@
"id": "PLACE_HOLDER"
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -408,7 +408,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
@@ -421,7 +421,7 @@
"is_positive_test": true,
"mocking_required": false,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/utils.py
index f81e69633..7ad747004 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/tests/utils.py
@@ -59,7 +59,7 @@ def create_subscription(server, db_name, subscription_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = """CREATE SUBSCRIPTION "%s" """ \
"""CONNECTION 'host=192.168.1.50 port=5432 user=foo """ \
@@ -68,7 +68,7 @@ def create_subscription(server, db_name, subscription_name):
"""enabled = false, slot_name=NONE, connect=false);""" % (
subscription_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get role oid of newly added subscription
pg_cursor.execute("select oid from pg_catalog.pg_subscription sub "
@@ -143,12 +143,12 @@ def delete_subscription(server, db_name, subscription_name):
subscription_count = pg_cursor.fetchone()
if subscription_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = "DROP subscription %s" % \
(subscription_name)
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/acl.sql
index 8fe549790..d5dac3b8f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/acl.sql
@@ -27,7 +27,7 @@ FROM
(d).privilege_type AS privilege_type
FROM
(SELECT pg_catalog.aclexplode(db.datacl) AS d FROM pg_catalog.pg_database db
- WHERE db.oid = {{ did|qtLiteral }}::OID) a
+ WHERE db.oid = {{ did|qtLiteral(conn) }}::OID) a
) d
) d
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_offline.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_offline.sql
index 6f2b46129..5cbb9b988 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_offline.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_offline.sql
@@ -9,7 +9,7 @@ ALTER DATABASE {{ conn|qtIdent(data.name) }} OWNER TO {{ conn|qtIdent(data.datow
{# Change the comments/description #}
{% if data.comments is defined %}
COMMENT ON DATABASE {{ conn|qtIdent(data.name) }}
- IS {{ data.comments|qtLiteral }};
+ IS {{ data.comments|qtLiteral(conn) }};
{% endif %}
{# Change the connection limit #}
{% if data.datconnlimit %}
@@ -19,4 +19,4 @@ ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH CONNECTION LIMIT = {{ data.dat
ALTER DATABASE {{ conn|qtIdent(data.name) }} SET TABLESPACE {{ conn|qtIdent(data.spcname) }};
{% endif %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/create.sql
index 11f96cbcb..4e4c2f7e3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/create.sql
@@ -7,11 +7,11 @@ CREATE DATABASE {{ conn|qtIdent(data.name) }}
TEMPLATE = {{ conn|qtIdent(data.template) }}{% endif %}{% if data.encoding %}
- ENCODING = {{ data.encoding|qtLiteral }}{% endif %}{% if data.datcollate %}
+ ENCODING = {{ data.encoding|qtLiteral(conn) }}{% endif %}{% if data.datcollate %}
- LC_COLLATE = {{ data.datcollate|qtLiteral }}{% endif %}{% if data.datctype %}
+ LC_COLLATE = {{ data.datcollate|qtLiteral(conn) }}{% endif %}{% if data.datctype %}
- LC_CTYPE = {{ data.datctype|qtLiteral }}{% endif %}{% if data.spcname %}
+ LC_CTYPE = {{ data.datctype|qtLiteral(conn) }}{% endif %}{% if data.spcname %}
TABLESPACE = {{ conn|qtIdent(data.spcname) }}{% endif %}{% if data.datconnlimit %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/grant.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/grant.sql
index 87e18ee0d..edb867a44 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/grant.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/grant.sql
@@ -9,7 +9,7 @@
{% import 'macros/default_privilege.macros' as DEFAULT_PRIVILEGE %}
{% if data.comments %}
COMMENT ON DATABASE {{ conn|qtIdent(data.name) }}
- IS {{ data.comments|qtLiteral }};
+ IS {{ data.comments|qtLiteral(conn) }};
{% endif %}
{# Change the security labels #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
index fe5acc24d..1566346d1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
@@ -6,7 +6,7 @@ FROM
pg_catalog.pg_database db
LEFT OUTER JOIN pg_catalog.pg_tablespace ta ON db.dattablespace = ta.oid
WHERE {% if did %}
-db.oid = {{ did|qtLiteral }}::OID
+db.oid = {{ did|qtLiteral(conn) }}::OID
{% endif %}
{% if db_restrictions %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
index 7dea8b1d5..52bed80cc 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
@@ -25,7 +25,7 @@ WHERE
db.datistemplate = {{show_user_defined_templates}} AND
{% endif %}
{% if did %}
- db.oid = {{ did|qtLiteral }}::OID
+ db.oid = {{ did|qtLiteral(conn) }}::OID
{% else %}
{% if name %}
db.datname = {{ name|qtLiteral }}::text
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
index f3109b562..b32e6d658 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/stats.sql
@@ -14,8 +14,8 @@ SELECT
FROM
pg_catalog.pg_stat_database db
WHERE {% if did %}
-db.datid = {{ did|qtLiteral }}::OID{% else %}
-db.datid > {{ last_system_oid|qtLiteral }}::OID
+db.datid = {{ did|qtLiteral(conn) }}::OID{% else %}
+db.datid > {{ last_system_oid|qtLiteral(conn) }}::OID
{% endif %}
{% if db_restrictions %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py
index de36ff71d..533208b4a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/utils.py
@@ -84,12 +84,12 @@ def create_database(connection, db_name):
"""This function used to create database"""
try:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
'''CREATE DATABASE "%s" TEMPLATE template0''' % db_name
)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
return pg_cursor
except Exception as exception:
@@ -126,6 +126,18 @@ def connect_database(self, server_group, server_id, db_id):
),
follow_redirects=True
)
+
+ if db_con.status_code != 200:
+ db_con = self.tester.post(
+ '{0}{1}/{2}/{3}'.format(
+ DATABASE_CONNECT_URL,
+ server_group,
+ server_id,
+ db_id
+ ),
+ follow_redirects=True
+ )
+
assert db_con.status_code == 200
db_con = json.loads(db_con.data.decode('utf-8'))
return db_con
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/schedules/tests/schedules_test_data.json b/web/pgadmin/browser/server_groups/servers/pgagent/schedules/tests/schedules_test_data.json
index 6768bd815..60a03fec7 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/schedules/tests/schedules_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/schedules/tests/schedules_test_data.json
@@ -332,7 +332,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -600,7 +600,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/steps/tests/steps_test_data.json b/web/pgadmin/browser/server_groups/servers/pgagent/steps/tests/steps_test_data.json
index 8246e5b2e..6a1648d84 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/steps/tests/steps_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/steps/tests/steps_test_data.json
@@ -46,7 +46,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -168,7 +168,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -217,7 +217,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -317,7 +317,7 @@
"test_data": {},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_exception.macros b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_exception.macros
index 6dd15f586..4722f2b98 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_exception.macros
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_exception.macros
@@ -2,23 +2,23 @@
{# This will be specific macro for pga_exception. #}
{##################################################}
{% macro INSERT(jscid, data) -%}
--- Inserting a schedule exception {% if jscid %}(schedule: {{ jscid|qtLiteral}}){% endif %}
+-- Inserting a schedule exception {% if jscid %}(schedule: {{ jscid|qtLiteral(conn)}}){% endif %}
INSERT INTO pgagent.pga_exception (
jexscid, jexdate, jextime
) VALUES (
- {% if jscid %}{{ jscid|qtLiteral }}{% else %}scid{% endif %}, {% if data.jexdate %}to_date({{ data.jexdate|qtLiteral }}, 'YYYY-MM-DD')::date{% else %}NULL::date{% endif %}, {% if data.jextime %}{{ data.jextime|qtLiteral }}::time without time zone{% else %}NULL::time without time zone{% endif %}
+ {% if jscid %}{{ jscid|qtLiteral(conn) }}{% else %}scid{% endif %}, {% if data.jexdate %}to_date({{ data.jexdate|qtLiteral(conn) }}, 'YYYY-MM-DD')::date{% else %}NULL::date{% endif %}, {% if data.jextime %}{{ data.jextime|qtLiteral(conn) }}::time without time zone{% else %}NULL::time without time zone{% endif %}
);
{%- endmacro %}
{% macro UPDATE(jscid, data) -%}
--- Updating an existing schedule exception (id: {{ data.jexid|qtLiteral }}, schedule: {{ jscid|qtLiteral }})
+-- Updating an existing schedule exception (id: {{ data.jexid|qtLiteral(conn) }}, schedule: {{ jscid|qtLiteral(conn) }})
UPDATE pgagent.pga_exception SET
- {% if 'jexdate' in data %}jexdate={% if data.jexdate %}to_date({{ data.jexdate|qtLiteral }}, 'YYYY-MM-DD')::date{% else %}NULL::date{% endif %}{% endif %}{% if 'jextime' in data%}{% if 'jexdate' in data %}, {% endif %}jextime={% if data.jextime %}{{ data.jextime|qtLiteral }}::time without time zone{% else %}NULL::time without time zone{% endif %}{% endif %}
+ {% if 'jexdate' in data %}jexdate={% if data.jexdate %}to_date({{ data.jexdate|qtLiteral(conn) }}, 'YYYY-MM-DD')::date{% else %}NULL::date{% endif %}{% endif %}{% if 'jextime' in data%}{% if 'jexdate' in data %}, {% endif %}jextime={% if data.jextime %}{{ data.jextime|qtLiteral(conn) }}::time without time zone{% else %}NULL::time without time zone{% endif %}{% endif %}
-WHERE jexid={{ data.jexid|qtLiteral }}::integer AND jexscid={{ jscid|qtLiteral }}::integer;
+WHERE jexid={{ data.jexid|qtLiteral(conn) }}::integer AND jexscid={{ jscid|qtLiteral(conn) }}::integer;
{%- endmacro %}
{% macro DELETE(jscid, data) -%}
--- Deleting a schedule exception (id: {{ data.jexid|qtLiteral }}, schedule: {{ jscid|qtLiteral }})
-DELETE FROM pgagent.pga_exception WHERE jexid={{ data.jexid|qtLiteral }}::integer AND jexscid={{ jscid|qtLiteral }}::integer;
+-- Deleting a schedule exception (id: {{ data.jexid|qtLiteral(conn) }}, schedule: {{ jscid|qtLiteral(conn) }})
+DELETE FROM pgagent.pga_exception WHERE jexid={{ data.jexid|qtLiteral(conn) }}::integer AND jexscid={{ jscid|qtLiteral(conn) }}::integer;
{%- endmacro %}
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_jobstep.macros b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_jobstep.macros
index 7188ef39d..6a8740ded 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_jobstep.macros
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_jobstep.macros
@@ -2,15 +2,15 @@
{# This will be specific macro for pga_jobstep. #}
{################################################}
{% macro INSERT(has_connstr, jid, data) -%}
--- Inserting a step (jobid: {{ jid|qtLiteral }})
+-- Inserting a step (jobid: {{ jid|qtLiteral(conn) }})
INSERT INTO pgagent.pga_jobstep (
jstjobid, jstname, jstenabled, jstkind,
{% if has_connstr %}jstconnstr, {% endif %}jstdbname, jstonerror,
jstcode, jstdesc
) VALUES (
- {% if jid %}{{ jid|qtLiteral }}{% else %}jid{% endif %}, {{ data.jstname|qtLiteral }}::text, {% if data.jstenabled %}true{% else %}false {% endif %}, {% if data.jstkind %}'s'{% else %}'b'{% endif %}::character(1),
- {% if has_connstr %}{% if data.jstconntype %}''{% else %}{{ data.jstconnstr|qtLiteral }}{% endif %}::text, {% if not data.jstconntype or not data.jstkind %}''{% else %}{{ data.jstdbname|qtLiteral }}{% endif %}::name{% else %}{% if not data.jstkind %}''{% else %}{{ data.jstdbname|qtLiteral }}::name{% endif %}{% endif %}, {{ data.jstonerror|qtLiteral }}::character(1),
- {{ data.jstcode|qtLiteral }}::text, {{ data.jstdesc|qtLiteral }}::text
+ {% if jid %}{{ jid|qtLiteral(conn) }}{% else %}jid{% endif %}, {{ data.jstname|qtLiteral(conn) }}::text, {% if data.jstenabled %}true{% else %}false {% endif %}, {% if data.jstkind %}'s'{% else %}'b'{% endif %}::character(1),
+ {% if has_connstr %}{% if data.jstconntype %}''{% else %}{{ data.jstconnstr|qtLiteral(conn) }}{% endif %}::text, {% if not data.jstconntype or not data.jstkind %}''{% else %}{{ data.jstdbname|qtLiteral(conn) }}{% endif %}::name{% else %}{% if not data.jstkind %}''{% else %}{{ data.jstdbname|qtLiteral(conn) }}::name{% endif %}{% endif %}, {{ data.jstonerror|qtLiteral(conn) }}::character(1),
+ {{ data.jstcode|qtLiteral(conn) }}::text, {{ data.jstdesc|qtLiteral(conn) }}::text
) {% if jid %}RETURNING jstid{% endif %};
{%- endmacro %}
{% macro UPDATE(has_connstr, jid, jstid, data) -%}
@@ -19,26 +19,26 @@ INSERT INTO pgagent.pga_jobstep (
{% else %}
{% set is_comma_required = False %}
{% endif %}
--- Updating the existing step (id: {{ jstid|qtLiteral }} jobid: {{ jid|qtLiteral }})
+-- Updating the existing step (id: {{ jstid|qtLiteral(conn) }} jobid: {{ jid|qtLiteral(conn) }})
UPDATE pgagent.pga_jobstep
SET
- {% if has_connstr %}{% if 'jstkind' in data %}{% if data.jstkind %}jstkind='s'::character(1), jstdbname={{ data.jstdbname|qtLiteral }}{% else %}jstkind='b'::character(1), jstdbname='', jstconnstr=''{% endif %}{% if is_comma_required %}, {% endif %}{% elif 'jstconntype' in data %}{% if data.jstconntype %}jstdbname={{ data.jstdbname|qtLiteral }}, jstconnstr=''{% else %}jstdbname='', jstconnstr={{ data.jstconnstr|qtLiteral }}{% endif %}{% if is_comma_required %},{% endif %}{% endif %}{% else %}{% if 'jstdbname' in data %}jstdbname={{ data.jstdbname|qtLiteral }}::name{% endif %}{% if is_comma_required %},{% endif %}{% endif %}{% if 'jstname' in data %}
+ {% if has_connstr %}{% if 'jstkind' in data %}{% if data.jstkind %}jstkind='s'::character(1), jstdbname={{ data.jstdbname|qtLiteral(conn) }}{% else %}jstkind='b'::character(1), jstdbname='', jstconnstr=''{% endif %}{% if is_comma_required %}, {% endif %}{% elif 'jstconntype' in data %}{% if data.jstconntype %}jstdbname={{ data.jstdbname|qtLiteral(conn) }}, jstconnstr=''{% else %}jstdbname='', jstconnstr={{ data.jstconnstr|qtLiteral(conn) }}{% endif %}{% if is_comma_required %},{% endif %}{% endif %}{% else %}{% if 'jstdbname' in data %}jstdbname={{ data.jstdbname|qtLiteral(conn) }}::name{% endif %}{% if is_comma_required %},{% endif %}{% endif %}{% if 'jstname' in data %}
- jstname={{ data.jstname|qtLiteral }}::text{% if 'jstenabled' in data or 'jstdesc' in data or 'jstonerror' in data or 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstenabled' in data %}
+ jstname={{ data.jstname|qtLiteral(conn) }}::text{% if 'jstenabled' in data or 'jstdesc' in data or 'jstonerror' in data or 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstenabled' in data %}
jstenabled={% if data.jstenabled %}true{% else %}false{% endif %}{% if 'jstdesc' in data or 'jstonerror' in data or 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstdesc' in data %}
- jstdesc={{ data.jstdesc|qtLiteral }}{% if 'jstonerror' in data or 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstonerror' in data %}
+ jstdesc={{ data.jstdesc|qtLiteral(conn) }}{% if 'jstonerror' in data or 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstonerror' in data %}
- jstonerror={{ data.jstonerror|qtLiteral }}{% if 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstcode' in data %}
+ jstonerror={{ data.jstonerror|qtLiteral(conn) }}{% if 'jstcode' in data %},{% endif %}{% endif %}{% if 'jstcode' in data %}
- jstcode={{ data.jstcode|qtLiteral }}{% endif %}
+ jstcode={{ data.jstcode|qtLiteral(conn) }}{% endif %}
-WHERE jstid={{ jstid|qtLiteral }}::integer AND jstjobid={{ jid|qtLiteral }}::integer;
+WHERE jstid={{ jstid|qtLiteral(conn) }}::integer AND jstjobid={{ jid|qtLiteral(conn) }}::integer;
{%- endmacro %}
{% macro DELETE(jid, jstid) -%}
--- Deleting a step (id: {{ jstid|qtLiteral }}, jobid: {{ jid|qtLiteral }})
-DELETE FROM pgagent.pga_jobstep WHERE jstid={{ jstid|qtLiteral }}::integer AND jstjobid={{ jid|qtLiteral }}::integer;
+-- Deleting a step (id: {{ jstid|qtLiteral(conn) }}, jobid: {{ jid|qtLiteral(conn) }})
+DELETE FROM pgagent.pga_jobstep WHERE jstid={{ jstid|qtLiteral(conn) }}::integer AND jstjobid={{ jid|qtLiteral(conn) }}::integer;
{%- endmacro %}
{% macro PROPERTIES(has_connstr, jid, jstid) -%}
SELECT
@@ -49,8 +49,8 @@ FROM
pgagent.pga_jobstep
WHERE
{% if jstid %}
- jstid = {{ jstid|qtLiteral }}::integer AND
+ jstid = {{ jstid|qtLiteral(conn) }}::integer AND
{% endif %}
- jstjobid = {{ jid|qtLiteral }}::integer
+ jstjobid = {{ jid|qtLiteral(conn) }}::integer
ORDER BY jstname;
{%- endmacro %}
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_schedule.macros b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_schedule.macros
index d33add20a..017a8ae31 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_schedule.macros
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/macros/pga_schedule.macros
@@ -3,26 +3,26 @@
{#################################################}
{% import 'macros/pga_exception.macros' as EXCEPTIONS %}
{% macro INSERT(jid, data) -%}
--- Inserting a schedule{% if jid %} (jobid: {{ jid|qtLiteral }}){% endif %}
+-- Inserting a schedule{% if jid %} (jobid: {{ jid|qtLiteral(conn) }}){% endif %}
INSERT INTO pgagent.pga_schedule(
jscjobid, jscname, jscdesc, jscenabled,
jscstart, {% if data.jscend %}jscend,{% endif %}
jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths
) VALUES (
- {% if jid %}{{ jid|qtLiteral }}{% else %}jid{% endif %}, {{ data.jscname|qtLiteral }}::text, {{ data.jscdesc|qtLiteral }}::text, {% if data.jscenabled %}true{% else %}false{% endif %},
- {{ data.jscstart|qtLiteral }}::timestamp with time zone, {% if data.jscend %}{{ data.jscend|qtLiteral }}::timestamp with time zone,{% endif %}
+ {% if jid %}{{ jid|qtLiteral(conn) }}{% else %}jid{% endif %}, {{ data.jscname|qtLiteral(conn) }}::text, {{ data.jscdesc|qtLiteral(conn) }}::text, {% if data.jscenabled %}true{% else %}false{% endif %},
+ {{ data.jscstart|qtLiteral(conn) }}::timestamp with time zone, {% if data.jscend %}{{ data.jscend|qtLiteral(conn) }}::timestamp with time zone,{% endif %}
-- Minutes
- {{ data.jscminutes|qtLiteral }}::boolean[],
+ {{ data.jscminutes|qtLiteral(conn) }}::boolean[],
-- Hours
- {{ data.jschours|qtLiteral }}::boolean[],
+ {{ data.jschours|qtLiteral(conn) }}::boolean[],
-- Week days
- {{ data.jscweekdays|qtLiteral }}::boolean[],
+ {{ data.jscweekdays|qtLiteral(conn) }}::boolean[],
-- Month days
- {{ data.jscmonthdays|qtLiteral }}::boolean[],
+ {{ data.jscmonthdays|qtLiteral(conn) }}::boolean[],
-- Months
- {{ data.jscmonths|qtLiteral }}::boolean[]
+ {{ data.jscmonths|qtLiteral(conn) }}::boolean[]
) RETURNING jscid INTO scid;{% if 'jscexceptions' in data %}
{% for exc in data.jscexceptions %}
@@ -31,31 +31,31 @@ INSERT INTO pgagent.pga_schedule(
{% macro UPDATE(jid, jscid, data) -%}
{% if 'jscname' in data or 'jscenabled' in data or 'jscdesc' in data or 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %}
--- Updating the schedule (id: {{ jscid|qtLiteral }}, jobid: {{ jid|qtLiteral }})
+-- Updating the schedule (id: {{ jscid|qtLiteral(conn) }}, jobid: {{ jid|qtLiteral(conn) }})
UPDATE pgagent.pga_schedule
SET{% if 'jscname' in data %}
- jscname={{ data.jscname|qtLiteral }}::text{% if 'jscdesc' in data or 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data or 'jscenabled' in data %},{% endif %}{% endif %}{% if 'jscenabled' in data %}
+ jscname={{ data.jscname|qtLiteral(conn) }}::text{% if 'jscdesc' in data or 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data or 'jscenabled' in data %},{% endif %}{% endif %}{% if 'jscenabled' in data %}
jscenabled={% if data.jscenabled %}true{% else %}false{% endif %}{% if 'jscdesc' in data or 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscdesc' in data %}
- jscdesc={% if data.jscdesc %}{{ data.jscdesc|qtLiteral }}::text{% else %}''::text{% endif %}{% if 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscstart' in data %}
+ jscdesc={% if data.jscdesc %}{{ data.jscdesc|qtLiteral(conn) }}::text{% else %}''::text{% endif %}{% if 'jscstart' in data or 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscstart' in data %}
- jscstart={{ data.jscstart|qtLiteral }}::timestamptz{% if 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscend' in data %}
+ jscstart={{ data.jscstart|qtLiteral(conn) }}::timestamptz{% if 'jscend' in data or 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscend' in data %}
- jscend={% if data.jscend %}{{ data.jscend|qtLiteral }}::timestamptz{% else %}NULL::timestamptz{% endif %}{% if 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscmonths' in data %}
+ jscend={% if data.jscend %}{{ data.jscend|qtLiteral(conn) }}::timestamptz{% else %}NULL::timestamptz{% endif %}{% if 'jscmonths' in data or 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscmonths' in data %}
- jscmonths={{ data.jscmonths|qtLiteral }}::boolean[]{% if 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscminutes' in data %}
+ jscmonths={{ data.jscmonths|qtLiteral(conn) }}::boolean[]{% if 'jscminutes' in data or 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscminutes' in data %}
- jscminutes={{ data.jscminutes|qtLiteral }}::boolean[]{% if 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscmonthdays' in data %}
+ jscminutes={{ data.jscminutes|qtLiteral(conn) }}::boolean[]{% if 'jscmonthdays' in data or 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscmonthdays' in data %}
- jscmonthdays={{ data.jscmonthdays|qtLiteral }}::boolean[]{% if 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jschours' in data %}
+ jscmonthdays={{ data.jscmonthdays|qtLiteral(conn) }}::boolean[]{% if 'jschours' in data or 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jschours' in data %}
- jschours={{ data.jschours|qtLiteral }}::boolean[]{% if 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscweekdays' in data %}
+ jschours={{ data.jschours|qtLiteral(conn) }}::boolean[]{% if 'jscweekdays' in data %},{% endif %}{% endif %}{% if 'jscweekdays' in data %}
- jscweekdays={{ data.jscweekdays|qtLiteral }}::boolean[]{% endif %}
+ jscweekdays={{ data.jscweekdays|qtLiteral(conn) }}::boolean[]{% endif %}
-WHERE jscid={{ jscid|qtLiteral }}::integer AND jscjobid={{ jid|qtLiteral }}::integer;{% endif %}{% if 'jscexceptions' in data %}
+WHERE jscid={{ jscid|qtLiteral(conn) }}::integer AND jscjobid={{ jid|qtLiteral(conn) }}::integer;{% endif %}{% if 'jscexceptions' in data %}
{% if 'added' in data.jscexceptions and data.jscexceptions.added|length > 0 %}
{% for exc in data.jscexceptions.added %}
@@ -77,8 +77,8 @@ WHERE jscid={{ jscid|qtLiteral }}::integer AND jscjobid={{ jid|qtLiteral }}::int
{% endif %}
{%- endmacro %}
{% macro DELETE(jid, jscid) -%}
--- Removing the existing schedule (id: {{ jscid|qtLiteral }}, jobid: {{ jid|qtLiteral }})
-DELETE FROM pgagent.pga_schedule WHERE jscid={{ jscid|qtLiteral }}::integer AND jscjobid={{ jid|qtLiteral }}::integer;
+-- Removing the existing schedule (id: {{ jscid|qtLiteral(conn) }}, jobid: {{ jid|qtLiteral(conn) }})
+DELETE FROM pgagent.pga_schedule WHERE jscid={{ jscid|qtLiteral(conn) }}::integer AND jscjobid={{ jid|qtLiteral(conn) }}::integer;
{%- endmacro %}
{% macro FETCH_CURRENT() -%}
SELECT jscid FROM pgagent.pga_schedule WHERE xmin::text = (txid_current() % (2^32)::bigint)::text;
@@ -101,8 +101,8 @@ FROM
) e ON s.jscid = e.jexscid
WHERE
{% if jscid %}
- s.jscid = {{ jscid|qtLiteral }}::integer AND
+ s.jscid = {{ jscid|qtLiteral(conn) }}::integer AND
{% endif %}
- s.jscjobid = {{ jid|qtLiteral }}::integer
+ s.jscjobid = {{ jid|qtLiteral(conn) }}::integer
ORDER BY jscname;
{%- endmacro %}
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/create.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/create.sql
index 6edcf6f80..911f452b8 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/create.sql
@@ -11,7 +11,7 @@ BEGIN
INSERT INTO pgagent.pga_job(
jobjclid, jobname, jobdesc, jobhostagent, jobenabled
) VALUES (
- {{ data.jobjclid|qtLiteral }}::integer, {{ data.jobname|qtLiteral }}::text, {{ data.jobdesc|qtLiteral }}::text, {{ data.jobhostagent|qtLiteral }}::text, {% if data.jobenabled %}true{% else %}false{% endif %}
+ {{ data.jobjclid|qtLiteral(conn) }}::integer, {{ data.jobname|qtLiteral(conn) }}::text, {{ data.jobdesc|qtLiteral(conn) }}::text, {{ data.jobhostagent|qtLiteral(conn) }}::text, {% if data.jobenabled %}true{% else %}false{% endif %}
) RETURNING jobid INTO jid;{% if 'jsteps' in data and data.jsteps|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/delete.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/delete.sql
index 3e3cd86a0..8c4787987 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/delete.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/delete.sql
@@ -1 +1 @@
-DELETE FROM pgagent.pga_job WHERE jobid = {{ jid|qtLiteral }}::integer;
+DELETE FROM pgagent.pga_job WHERE jobid = {{ jid|qtLiteral(conn) }}::integer;
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/nodes.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/nodes.sql
index fa96eafa4..16ef3c316 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/nodes.sql
@@ -3,6 +3,6 @@ SELECT
FROM
pgagent.pga_job
{% if jid %}
-WHERE jobid = {{ jid|qtLiteral }}::integer
+WHERE jobid = {{ jid|qtLiteral(conn) }}::integer
{% endif %}
ORDER BY jobname;
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/properties.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/properties.sql
index d56d82096..caca61f57 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/properties.sql
@@ -16,6 +16,6 @@ FROM
) sub ON sub.jlgjobid = j.jobid
LEFT JOIN pgagent.pga_jobclass jc ON (j.jobjclid = jc.jclid)
{% if jid %}
-WHERE j.jobid = {{ jid|qtLiteral }}::integer
+WHERE j.jobid = {{ jid|qtLiteral(conn) }}::integer
{% endif %}
ORDER BY j.jobname;
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/run_now.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/run_now.sql
index 9762cc198..50ed500d8 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/run_now.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/run_now.sql
@@ -1,3 +1,3 @@
UPDATE pgagent.pga_job
SET jobnextrun=now()::timestamptz
-WHERE jobid={{ jid|qtLiteral }}::integer
+WHERE jobid={{ jid|qtLiteral(conn) }}::integer
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/stats.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/stats.sql
index afaba724f..25b117803 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/stats.sql
@@ -7,6 +7,6 @@ SELECT
FROM
pgagent.pga_joblog
WHERE
- jlgjobid = {{ jid|qtLiteral }}::integer
+ jlgjobid = {{ jid|qtLiteral(conn) }}::integer
ORDER BY jlgid DESC
LIMIT {{ rows_threshold }};
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/update.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/update.sql
index 91c3797da..48e81c34a 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_job/sql/pre3.4/update.sql
@@ -2,10 +2,10 @@
{% import 'macros/pga_schedule.macros' as SCHEDULE %}
{% if 'jobjclid' in data or 'jobname' in data or 'jobdesc' in data or 'jobhostagent' in data or 'jobenabled' in data %}
UPDATE pgagent.pga_job
-SET {% if 'jobjclid' in data %}jobjclid={{ data.jobjclid|qtLiteral }}::integer{% if 'jobname' in data or 'jobdesc' in data or 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
-{% if 'jobname' in data %}jobname={{ data.jobname|qtLiteral }}::text{%if 'jobdesc' in data or 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
-{% if 'jobdesc' in data %}jobdesc={{ data.jobdesc|qtLiteral }}::text{%if 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
-{%if 'jobhostagent' in data %}jobhostagent={{ data.jobhostagent|qtLiteral }}::text{% if 'jobenabled' in data %}, {% endif %}{% endif %}
+SET {% if 'jobjclid' in data %}jobjclid={{ data.jobjclid|qtLiteral(conn) }}::integer{% if 'jobname' in data or 'jobdesc' in data or 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
+{% if 'jobname' in data %}jobname={{ data.jobname|qtLiteral(conn) }}::text{%if 'jobdesc' in data or 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
+{% if 'jobdesc' in data %}jobdesc={{ data.jobdesc|qtLiteral(conn) }}::text{%if 'jobhostagent' in data or 'jobenabled' in data %}, {% endif %}{% endif %}
+{%if 'jobhostagent' in data %}jobhostagent={{ data.jobhostagent|qtLiteral(conn) }}::text{% if 'jobenabled' in data %}, {% endif %}{% endif %}
{% if 'jobenabled' in data %}jobenabled={% if data.jobenabled %}true{% else %}false{% endif %}{% endif %}
WHERE jobid = {{ jid }};
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/nodes.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/nodes.sql
index e3b6f4c64..8c3143b69 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/nodes.sql
@@ -4,7 +4,7 @@ FROM
pgagent.pga_jobstep
WHERE
{% if jstid %}
- jstid = {{ jstid|qtLiteral }}::integer AND
+ jstid = {{ jstid|qtLiteral(conn) }}::integer AND
{% endif %}
- jstjobid = {{ jid|qtLiteral }}::integer
+ jstjobid = {{ jid|qtLiteral(conn) }}::integer
ORDER BY jstname;
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/stats.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/stats.sql
index 3bd05d742..45b90c8c8 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_jobstep/sql/pre3.4/stats.sql
@@ -9,6 +9,6 @@ SELECT
FROM
pgagent.pga_jobsteplog
WHERE
- jsljstid = {{ jstid|qtLiteral }}::integer
+ jsljstid = {{ jstid|qtLiteral(conn) }}::integer
ORDER BY jslid DESC
LIMIT {{ rows_threshold }};
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_schedule/sql/pre3.4/nodes.sql b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_schedule/sql/pre3.4/nodes.sql
index 5d0f083f1..845119994 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_schedule/sql/pre3.4/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/templates/pga_schedule/sql/pre3.4/nodes.sql
@@ -4,8 +4,8 @@ FROM
pgagent.pga_schedule
WHERE
{% if jscid %}
- jscid = {{ jscid|qtLiteral }}::integer
+ jscid = {{ jscid|qtLiteral(conn) }}::integer
{% else %}
- jscjobid = {{ jid|qtLiteral }}::integer
+ jscjobid = {{ jid|qtLiteral(conn) }}::integer
{% endif %}
ORDER BY jscname;
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/tests/pgagent_test_data.json b/web/pgadmin/browser/server_groups/servers/pgagent/tests/pgagent_test_data.json
index 24b8244a9..074587d8f 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/tests/pgagent_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/tests/pgagent_test_data.json
@@ -587,7 +587,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "[(False,'Mocked Internal Server Error')]"
},
"expected_data": {
@@ -654,7 +654,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -934,7 +934,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1031,7 +1031,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1098,7 +1098,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
@@ -1362,7 +1362,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False,'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/tests/utils.py b/web/pgadmin/browser/server_groups/servers/pgagent/tests/utils.py
index e991f1bd4..5b8dd859f 100644
--- a/web/pgadmin/browser/server_groups/servers/pgagent/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/pgagent/tests/utils.py
@@ -150,7 +150,7 @@ def create_pgagent_job(self, name):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
"""
@@ -162,7 +162,7 @@ def create_pgagent_job(self, name):
""".format(name)
)
job_id = pg_cursor.fetchone()
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
return job_id[0]
@@ -186,13 +186,13 @@ def delete_pgagent_job(self, job_id=None):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
"DELETE FROM pgagent.pga_job "
"WHERE jobid = '%s'::integer;" % job_id
)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
@@ -239,7 +239,7 @@ def create_pgagent_schedule(self, sch_name, jobid):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = """
INSERT INTO pgagent.pga_schedule(
@@ -252,7 +252,7 @@ def create_pgagent_schedule(self, sch_name, jobid):
""".format(sch_name, jobid)
pg_cursor.execute(query)
sch_id = pg_cursor.fetchone()
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
return sch_id[0]
@@ -274,13 +274,13 @@ def delete_pgagent_schedule(self):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
"DELETE FROM pgagent.pga_schedule "
"WHERE jscid = '%s'::integer;" % self.schedule_id
)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
@@ -353,7 +353,7 @@ def create_pgagent_exception(self, schid, date, time):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = """
INSERT INTO pgagent.pga_exception(jexscid, jexdate, jextime
@@ -363,7 +363,7 @@ def create_pgagent_exception(self, schid, date, time):
""".format(schid, date, time)
pg_cursor.execute(query)
excep_id = pg_cursor.fetchone()
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
return excep_id[0]
@@ -385,7 +385,7 @@ def create_pgagent_step(self, step_name, jobid):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
query = """
INSERT INTO pgagent.pga_jobstep(
@@ -397,7 +397,7 @@ def create_pgagent_step(self, step_name, jobid):
""".format(step_name, jobid)
pg_cursor.execute(query)
step_id = pg_cursor.fetchone()
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
return step_id[0]
@@ -419,13 +419,13 @@ def delete_pgagent_step(self):
self.server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
"DELETE FROM pgagent.pga_jobstep "
"WHERE jstid = '%s'::integer;" % self.step_id
)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
index ec44b4233..ce39b4e53 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/templates/resource_groups/sql/default/getoid.sql
@@ -1,4 +1,4 @@
{# ============= Get the resource group oid ============= #}
{% if rgname %}
-SELECT oid FROM edb_resource_group WHERE rgrpname = {{ rgname|qtLiteral }};
-{% endif %}
\ No newline at end of file
+SELECT oid FROM edb_resource_group WHERE rgrpname = {{ rgname|qtLiteral(conn)(conn) }};
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/utils.py b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/utils.py
index c7c7156e0..57bafb01f 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/tests/utils.py
@@ -32,10 +32,10 @@ def create_resource_groups(server, resource_group_name):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute("CREATE RESOURCE GROUP %s" % resource_group_name)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get oid of newly created resource group
pg_cursor.execute("SELECT oid FROM edb_resource_group WHERE "
@@ -84,11 +84,11 @@ def delete_resource_group(connection, resource_group_name):
resource_group_name_count = len(pg_cursor.fetchall())
if resource_group_name_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor.execute("DELETE FROM edb_resource_group where "
"rgrpname='%s'" %
resource_group_name)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception:
diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql
index 7022802f7..4f9fc85e0 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql
@@ -28,9 +28,9 @@ CREATE ROLE {{ conn|qtIdent(data.rolname) }} WITH{% if data.rolcanlogin and data
CONNECTION LIMIT {{ data.rolconnlimit }}{% endif %}{% if data.rolvaliduntil and data.rolvaliduntil is not none %}
- VALID UNTIL {{ data.rolvaliduntil|qtLiteral }} {% endif %}{% if data.rolpassword %}
+ VALID UNTIL {{ data.rolvaliduntil|qtLiteral(conn) }} {% endif %}{% if data.rolpassword %}
- PASSWORD {% if data.rolpassword is none %}NULL{% else %}{% if dummy %}'xxxxxx'{% else %} {{ data.rolpassword | qtLiteral }}{% endif %}{% endif %}{% endif %};{% if data.members and data.members|length > 0 %}
+ PASSWORD {% if data.rolpassword is none %}NULL{% else %}{% if dummy %}'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %};{% if data.members and data.members|length > 0 %}
GRANT {{ conn|qtIdent(data.members)|join(', ') }} TO {{ conn|qtIdent(data.rolname) }};{% endif %}{% if data.admins and data.admins|length > 0 %}
@@ -47,7 +47,7 @@ GRANT {{ conn|qtIdent(data.admins)|join(', ') }} TO {{ conn|qtIdent(data.rolname
{{ VARIABLE.APPLY(conn, var.database, data.rolname, var.name, var.value) }}
{% endfor %}{% endif %}{% if data.description %}
-COMMENT ON ROLE {{ conn|qtIdent(data.rolname) }} IS {{ data.description|qtLiteral }};
+COMMENT ON ROLE {{ conn|qtIdent(data.rolname) }} IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if data.rol_admins and data.rol_admins|length > 0 %}
diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/nodes.sql
index 1f450b07e..79911c029 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/nodes.sql
@@ -3,6 +3,6 @@ SELECT
FROM
pg_catalog.pg_roles r
{% if rid %}
-WHERE r.oid = {{ rid|qtLiteral }}::oid
+WHERE r.oid = {{ rid|qtLiteral(conn) }}::oid
{% endif %}
ORDER BY r.rolcanlogin, r.rolname
diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/properties.sql
index 8e7091b79..a860aa94a 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/properties.sql
@@ -16,12 +16,12 @@ SELECT
CASE WHEN pg.admin_option THEN '1' ELSE '0' END || pg.usename
FROM
(SELECT pg_roles.rolname AS usename, pg_auth_members.admin_option AS admin_option FROM pg_roles
- JOIN pg_auth_members ON pg_roles.oid=pg_auth_members.member AND pg_auth_members.roleid={{ rid|qtLiteral }}::oid) pg
+ JOIN pg_auth_members ON pg_roles.oid=pg_auth_members.member AND pg_auth_members.roleid={{ rid|qtLiteral(conn) }}::oid) pg
) rolmembers
{% endif %}
FROM
pg_catalog.pg_roles r
{% if rid %}
-WHERE r.oid = {{ rid|qtLiteral }}::oid
+WHERE r.oid = {{ rid|qtLiteral(conn) }}::oid
{% endif %}
ORDER BY r.rolcanlogin, r.rolname
diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql
index 7a234ef1f..8f552151f 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql
@@ -38,10 +38,10 @@ ALTER ROLE {{ conn|qtIdent(rolname) }}{% if 'rolcanlogin' in data %}
CONNECTION LIMIT {{ data.rolconnlimit }}
{% endif %}{% if 'rolvaliduntil' in data %}
- VALID UNTIL {% if data.rolvaliduntil %}{{ data.rolvaliduntil|qtLiteral }}{% else %}'infinity'
+ VALID UNTIL {% if data.rolvaliduntil %}{{ data.rolvaliduntil|qtLiteral(conn) }}{% else %}'infinity'
{% endif %}{% endif %}{% if 'rolpassword' in data %}
- PASSWORD{% if data.rolpassword is none %} NULL{% else %}{% if dummy %} 'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral }}{% endif %}{% endif %}{% endif %};{% endif %}
+ PASSWORD{% if data.rolpassword is none %} NULL{% else %}{% if dummy %} 'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %};{% endif %}
{% if 'revoked_admins' in data and
data.revoked_admins|length > 0
@@ -97,7 +97,7 @@ GRANT {{ conn|qtIdent(data.members)|join(', ') }} TO {{ conn|qtIdent(rolname) }}
{% if 'description' in data %}
-COMMENT ON ROLE {{ conn|qtIdent(rolname) }} IS {{ data.description|qtLiteral }};
+COMMENT ON ROLE {{ conn|qtIdent(rolname) }} IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{% if 'rol_revoked_admins' in data and
diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/variables.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/variables.sql
index 2226cd8e1..a20bb9947 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/variables.sql
+++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/variables.sql
@@ -6,7 +6,7 @@ FROM
FROM
pg_catalog.pg_roles
WHERE
- oid={{ rid|qtLiteral }}::OID
+ oid={{ rid|qtLiteral(conn) }}::OID
) r
UNION ALL
@@ -19,7 +19,7 @@ FROM
(SELECT *
FROM pg_catalog.pg_db_role_setting dr
WHERE
- dr.setrole={{ rid|qtLiteral }}::OID AND dr.setdatabase!=0
+ dr.setrole={{ rid|qtLiteral(conn) }}::OID AND dr.setdatabase!=0
) c
LEFT JOIN pg_catalog.pg_database d ON (d.oid = c.setdatabase)
) a;
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json b/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json
index 8c50a20b0..94a9ca6f3 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json
@@ -10,7 +10,7 @@
},
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.connect",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.connect",
"return_value": "(False, 'Mocked Internal Server Error while checking db connect.')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/utils.py b/web/pgadmin/browser/server_groups/servers/roles/tests/utils.py
index c30c69d84..643c9d676 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/utils.py
@@ -145,10 +145,10 @@ def delete_role(connection, role_names):
role_count = pg_cursor.fetchone()
if role_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute("DROP ROLE %s" % role_name)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception as exception:
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/acl.sql
index e38fd3025..6446ec749 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/acl.sql
@@ -12,14 +12,14 @@ FROM
(SELECT ts.spcacl
FROM pg_catalog.pg_tablespace ts
{% if tsid %}
- WHERE ts.oid={{ tsid|qtLiteral }}::OID
+ WHERE ts.oid={{ tsid|qtLiteral(conn) }}::OID
{% endif %}
) acl,
(SELECT (d).grantee AS grantee, (d).grantor AS grantor, (d).is_grantable
AS is_grantable, (d).privilege_type AS privilege_type FROM (SELECT
pg_catalog.aclexplode(ts.spcacl) as d FROM pg_catalog.pg_tablespace ts
{% if tsid %}
- WHERE ts.oid={{ tsid|qtLiteral }}::OID
+ WHERE ts.oid={{ tsid|qtLiteral(conn) }}::OID
{% endif %}
) a) d
) d
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/alter.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/alter.sql
index a93793b27..f1bbe7e07 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/alter.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/alter.sql
@@ -12,7 +12,7 @@ ALTER TABLESPACE {{ conn|qtIdent(data.name) }}
{### Comments on tablespace ###}
{% if data.description %}
COMMENT ON TABLESPACE {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{### Security Labels on tablespace ###}
@@ -37,5 +37,5 @@ COMMENT ON TABLESPACE {{ conn|qtIdent(data.name) }}
{% endif %}
{# ======== The SQl Below will fetch id for given dataspace ======== #}
{% if tablespace %}
-SELECT ts.oid FROM pg_catalog.pg_tablespace ts WHERE spcname = {{tablespace|qtLiteral}};
+SELECT ts.oid FROM pg_catalog.pg_tablespace ts WHERE spcname = {{tablespace|qtLiteral(conn)}};
{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/create.sql
index 06efd0057..cb854cd05 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/create.sql
@@ -4,6 +4,6 @@ CREATE TABLESPACE {{ conn|qtIdent(data.name) }}
{% if data.spcuser %}
OWNER {{ conn|qtIdent(data.spcuser) }}
{% endif %}
- LOCATION {{ data.spclocation|qtLiteral }};
+ LOCATION {{ data.spclocation|qtLiteral(conn) }};
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql
index 637415ac6..3ce452600 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql
@@ -4,6 +4,6 @@ FROM
pg_catalog.pg_tablespace ts
{% if tsid %}
WHERE
- ts.oid={{ tsid|qtLiteral }}::OID
+ ts.oid={{ tsid|qtLiteral(conn) }}::OID
{% endif %}
ORDER BY name;
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/properties.sql
index 1c57e95cb..f5afbdd29 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/properties.sql
@@ -11,6 +11,6 @@ SELECT
FROM
pg_catalog.pg_tablespace ts
{% if tsid %}
-WHERE ts.oid={{ tsid|qtLiteral }}::OID
+WHERE ts.oid={{ tsid|qtLiteral(conn) }}::OID
{% endif %}
ORDER BY name
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
index 408644a79..fa41c2ded 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/stats.sql
@@ -1,6 +1,6 @@
{### SQL to fetch tablespace object stats ###}
{% if tsid %}
-SELECT pg_catalog.pg_tablespace_size({{ tsid|qtLiteral }}::OID) AS {{ conn|qtIdent(_('Size')) }}
+SELECT pg_catalog.pg_tablespace_size({{ tsid|qtLiteral(conn) }}::OID) AS {{ conn|qtIdent(_('Size')) }}
{% else %}
SELECT ts.spcname AS {{ conn|qtIdent(_('Name')) }},
pg_catalog.pg_tablespace_size(ts.oid) AS {{ conn|qtIdent(_('Size')) }}
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/update.sql
index 19cd3b00b..877bf1424 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/update.sql
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/update.sql
@@ -18,7 +18,7 @@ ALTER TABLESPACE {{ conn|qtIdent(data.name) }}
{# ==== To update tablespace comments ==== #}
{% if data.description is defined and data.description != o_data.description %}
COMMENT ON TABLESPACE {{ conn|qtIdent(data.name) }}
- IS {{ data.description|qtLiteral }};
+ IS {{ data.description|qtLiteral(conn) }};
{% endif %}
{# ==== To update tablespace variables ==== #}
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/utils.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/utils.py
index 5a74b65a2..7d8eec7e7 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/utils.py
@@ -52,13 +52,13 @@ def create_tablespace(server, test_tablespace_name, test_tablespace_dir=None):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
if test_tablespace_dir is None:
test_tablespace_dir = server['tablespace_path']
pg_cursor.execute("CREATE TABLESPACE %s LOCATION '%s'" %
(test_tablespace_name, test_tablespace_dir))
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created tablespace
@@ -112,9 +112,9 @@ def delete_tablespace(connection, test_tablespace_name):
tablespace_count = len(pg_cursor.fetchall())
if tablespace_count:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor.execute("DROP TABLESPACE %s" % test_tablespace_name)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
except Exception as exception:
diff --git a/web/pgadmin/browser/server_groups/servers/templates/depends/pg/9.1_plus/role_dependencies.sql b/web/pgadmin/browser/server_groups/servers/templates/depends/pg/9.1_plus/role_dependencies.sql
index 65e25e26e..5f9f4794c 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/depends/pg/9.1_plus/role_dependencies.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/depends/pg/9.1_plus/role_dependencies.sql
@@ -2,7 +2,7 @@ SELECT rolname AS refname, refclassid, deptype
FROM pg_catalog.pg_shdepend dep
LEFT JOIN pg_catalog.pg_roles r ON refclassid=1260 AND refobjid=r.oid
{{where_clause}}
-{% if db_name %}
- AND dep.dbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = {{ db_name|qtLiteral }})
+{% if conn and conn.db %}
+ AND dep.dbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = {{ conn.db|qtLiteral(conn) }})
{% endif %}
ORDER BY 1
diff --git a/web/pgadmin/browser/server_groups/servers/templates/depends/ppas/9.1_plus/role_dependencies.sql b/web/pgadmin/browser/server_groups/servers/templates/depends/ppas/9.1_plus/role_dependencies.sql
index 65e25e26e..40d95537a 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/depends/ppas/9.1_plus/role_dependencies.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/depends/ppas/9.1_plus/role_dependencies.sql
@@ -2,7 +2,7 @@ SELECT rolname AS refname, refclassid, deptype
FROM pg_catalog.pg_shdepend dep
LEFT JOIN pg_catalog.pg_roles r ON refclassid=1260 AND refobjid=r.oid
{{where_clause}}
-{% if db_name %}
- AND dep.dbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = {{ db_name|qtLiteral }})
+{% if conn and conn.db %}
+ AND dep.dbid = (SELECT oid FROM pg_catalog.pg_database WHERE datname = {{ conn.db|qtLiteral(conn) }})
{% endif %}
ORDER BY 1
diff --git a/web/pgadmin/browser/server_groups/servers/templates/macros/security.macros b/web/pgadmin/browser/server_groups/servers/templates/macros/security.macros
index 4350f9aea..c9d40ce04 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/macros/security.macros
+++ b/web/pgadmin/browser/server_groups/servers/templates/macros/security.macros
@@ -1,5 +1,5 @@
{% macro APPLY(conn, type, name, provider, label) -%}
-SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(name) }} IS {{ label|qtLiteral }};
+SECURITY LABEL{% if provider and provider != '' %} FOR {{ conn|qtIdent(provider) }}{% endif %} ON {{ type }} {{ conn|qtIdent(name) }} IS {{ label|qtLiteral(conn) }};
{%- endmacro %}
{% macro DROP(conn, type, name, provider) -%}
SECURITY LABEL FOR {{ conn|qtIdent(provider) }} ON {{ type }} {{ conn|qtIdent(name) }} IS NULL;
diff --git a/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros b/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros
index 28746a70a..effbda921 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros
+++ b/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros
@@ -5,7 +5,7 @@
{% set exclude_quoting = ['search_path'] %}
ALTER {% if role %}ROLE {{ self.conn|qtIdent(role) }}{% if database %} IN DATABASE {{ conn|qtIdent(database) }}{% endif %}{% else %}DATABASE {{ conn|qtIdent(database) }}{% endif %}
- SET {{ conn|qtIdent(param) }} TO {% if param in exclude_quoting %}{{ value }}{% else %}{{ value|qtLiteral }}{% endif %};
+ SET {{ conn|qtIdent(param) }} TO {% if param in exclude_quoting %}{{ value }}{% else %}{{ value|qtLiteral(conn) }}{% endif %};
{%- endmacro %}
{% macro RESET(conn, database, role, param) -%}
ALTER {% if role %}ROLE {{ self.conn|qtIdent(role) }}{% if database %} IN DATABASE {{ conn|qtIdent(database) }}{% endif %}{% else %}DATABASE {{ conn|qtIdent(database) }}{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/change_password.sql b/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/change_password.sql
index dcf0ec1e8..fe8aa3c35 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/change_password.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/change_password.sql
@@ -1,2 +1,2 @@
{# Change database server password #}
-ALTER USER {{conn|qtIdent(user)}} WITH ENCRYPTED PASSWORD {{encrypted_password|qtLiteral}};
+ALTER USER {{conn|qtIdent(user)}} WITH ENCRYPTED PASSWORD {{encrypted_password|qtLiteral(conn)}};
diff --git a/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/stats.sql b/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/stats.sql
index b244ca72c..170d291ef 100644
--- a/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/stats.sql
+++ b/web/pgadmin/browser/server_groups/servers/templates/servers/sql/default/stats.sql
@@ -39,10 +39,16 @@ SELECT
ELSE
'localhost:' || client_port
END AS {{ conn|qtIdent(_('Client')) }},
+<<<<<<< Updated upstream
{{ _('Streaming Replication')|qtLiteral }} AS {{ conn|qtIdent(_('Application')) }},
null AS {{ conn|qtIdent(_('Wait event type')) }},
null AS {{ conn|qtIdent(_('Wait event name')) }},
state || ' [sync (state: ' || COALESCE(sync_state, '') || ', priority: ' || sync_priority::text || ')] (' || sent_lsn || ' sent, ' || write_lsn || ' written, ' || flush_lsn || ' flushed, ' || replay_lsn || ' applied)' AS {{ conn|qtIdent(_('Query')) }},
+=======
+ {{ _('Streaming Replication')|qtLiteral(conn) }} AS {{ conn|qtIdent(_('Application')) }},
+ null AS {{ conn|qtIdent(_('Waiting?')) }},
+ state || ' [sync (state: ' || COALESCE(sync_state, '') || ', priority: ' || sync_priority::text || ')] (' || sent_location || ' sent, ' || write_location || ' written, ' || flush_location || ' flushed, ' || replay_location || ' applied)' AS {{ conn|qtIdent(_('Query')) }},
+>>>>>>> Stashed changes
null AS {{ conn|qtIdent(_('Query start')) }},
null AS {{ conn|qtIdent(_('Xact start')) }}
FROM
diff --git a/web/pgadmin/browser/server_groups/servers/tests/servers_test_data.json b/web/pgadmin/browser/server_groups/servers/tests/servers_test_data.json
index 9a1262d34..d372a6b33 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/servers_test_data.json
+++ b/web/pgadmin/browser/server_groups/servers/tests/servers_test_data.json
@@ -515,7 +515,7 @@
"mocking_required": false,
"recovery_state": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while get recovery_state for server.')"
},
"expected_data": {
@@ -662,7 +662,7 @@
"mocking_required": true,
"pause": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -676,7 +676,7 @@
"mocking_required": true,
"pause": false,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_scalar",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_scalar",
"return_value": "(True, {'rows': []})"
},
"expected_data": {
@@ -743,7 +743,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(True, 'Mocked Internal Server Error')"
},
"expected_data": {
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_check_recovery.py b/web/pgadmin/browser/server_groups/servers/tests/test_check_recovery.py
index b31fcc195..8934d5572 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_check_recovery.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_check_recovery.py
@@ -20,7 +20,7 @@ class TestCheckRecovery(BaseTestGenerator):
self.server['sslmode']).cursor()
if cursor is not None and cursor.connection is not None:
- server_version = cursor.connection.server_version
+ server_version = test_utils.get_server_version(cursor.connection)
if server_version >= 100000:
version = '10_plus'
elif server_version >= 90000:
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_dependencies_sql.py b/web/pgadmin/browser/server_groups/servers/tests/test_dependencies_sql.py
index dda3acdb4..03b63e992 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_dependencies_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_dependencies_sql.py
@@ -30,15 +30,20 @@ class TestDependenciesSql(SQLTemplateTestBase):
"WHERE pg_class.relname='test_table'")
self.table_id = cursor.fetchone()[0]
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"depends", self.server['type'])
- template_file = self.get_template_file(version, file_path,
- "dependencies.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "dependencies.sql"
+ )
template = file_as_template(template_file)
sql = template.render(
where_clause="WHERE dep.objid=%s::oid" % self.table_id,
- object_id=self.table_id)
+ object_id=self.table_id,
+ conn=connection
+ )
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_dependents_sql.py b/web/pgadmin/browser/server_groups/servers/tests/test_dependents_sql.py
index aedee5af2..331e6c443 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_dependents_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_dependents_sql.py
@@ -30,14 +30,17 @@ class TestDependentsSql(SQLTemplateTestBase):
"WHERE pg_class.relname='test_table'")
self.table_id = cursor.fetchone()[0]
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"depends", self.server['type'])
- template_file = self.get_template_file(version, file_path,
- "dependents.sql")
+ template_file = self.get_template_file(
+ self.get_server_version(connection),
+ file_path,
+ "dependents.sql")
template = file_as_template(template_file)
sql = template.render(
- where_clause="WHERE dep.objid=%s::oid" % self.table_id)
+ where_clause="WHERE dep.objid=%s::oid" % self.table_id,
+ conn=connection)
return sql
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_role_dependencies_sql.py b/web/pgadmin/browser/server_groups/servers/tests/test_role_dependencies_sql.py
index e744aa345..e809a4d86 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_role_dependencies_sql.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_role_dependencies_sql.py
@@ -54,7 +54,7 @@ class TestRoleDependenciesSql(SQLTemplateTestBase):
"WHERE pg_class.relname='test_new_role_table'")
self.table_id = cursor.fetchone()[0]
- sql = self.generate_sql(connection.server_version)
+ sql = self.generate_sql(connection)
cursor.execute(sql)
fetch_result = cursor.fetchall()
@@ -66,15 +66,18 @@ class TestRoleDependenciesSql(SQLTemplateTestBase):
cursor.execute("DROP ROLE %s" % self.role_name)
connection.commit()
- def generate_sql(self, version):
+ def generate_sql(self, connection):
file_path = os.path.join(os.path.dirname(__file__), "..", "templates",
"depends", self.server['type'])
- template_file = self.get_template_file(version, file_path,
+ template_file = self.get_template_file(connection.info.version,
+ file_path,
"role_dependencies.sql")
- jinja2.filters.FILTERS['qtLiteral'] = lambda value: "NULL"
+ jinja2.filters.FILTERS['qtLiteral'] = lambda conn, value: "NULL"
template = file_as_template(template_file)
sql = template.render(
- where_clause="WHERE dep.objid=%s::oid" % self.table_id)
+ where_clause="WHERE dep.objid=%s::oid" % self.table_id,
+ conn=connection
+ )
return sql
diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py
index 76abaafb5..07f8e923e 100644
--- a/web/pgadmin/browser/utils.py
+++ b/web/pgadmin/browser/utils.py
@@ -486,11 +486,12 @@ class PGChildNodeView(NodeView):
dependencies = self.__fetch_dependency(
conn, query, show_system_objects, is_schema_diff)
+ import psycopg
# fetch role dependencies
if where_clause.find('subid') < 0:
sql = render_template(
"/".join([sql_path, 'role_dependencies.sql']),
- where_clause=where_clause, db_name=conn.db)
+ where_clause=where_clause, conn=conn)
status, result = conn.execute_dict(sql)
if not status:
diff --git a/web/pgadmin/dashboard/__init__.py b/web/pgadmin/dashboard/__init__.py
index d13b8bdeb..ca07159a1 100644
--- a/web/pgadmin/dashboard/__init__.py
+++ b/web/pgadmin/dashboard/__init__.py
@@ -414,8 +414,8 @@ def dashboard_stats(sid=None, did=None):
status, res = g.conn.execute_dict(sql)
for chart_row in res['rows']:
- resp_data[chart_row['chart_name']] = \
- json.loads(chart_row['chart_data'])
+ resp_data[chart_row['chart_name']] = json.loads(
+ chart_row['chart_data'])
return ajax_response(
response=resp_data,
diff --git a/web/pgadmin/feature_tests/pg_datatype_validation_test.py b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
index f039bae75..a1ad9d036 100644
--- a/web/pgadmin/feature_tests/pg_datatype_validation_test.py
+++ b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
@@ -70,7 +70,7 @@ class PGDataypeFeatureTest(BaseFeatureTest):
else:
self.timezone_hh_mm = '+{}'.format(self.timezone_hh_mm)
- self.database_version = connection.server_version
+ self.database_version = test_utils.get_server_version(connection)
# For this test case we need to set "Insert bracket pairs?"
# SQL Editor preference to 'false' to avoid codemirror
diff --git a/web/pgadmin/feature_tests/query_tool_tests.py b/web/pgadmin/feature_tests/query_tool_tests.py
index d3102a1d0..515f06a0f 100644
--- a/web/pgadmin/feature_tests/query_tool_tests.py
+++ b/web/pgadmin/feature_tests/query_tool_tests.py
@@ -615,7 +615,7 @@ SELECT 1, pg_sleep(300)"""
self.server['port'],
self.server['sslmode']
)
- return connection.server_version > 90100
+ return test_utils.get_server_version(connection) > 90100
def _query_tool_notify_statements(self):
print("\n\tListen on an event... ", file=sys.stderr, end="")
@@ -669,7 +669,8 @@ SELECT 1, pg_sleep(300)"""
pass
connection.close()
- return connection.server_version >= 110000 and jit_enabled
+ return test_utils.get_server_version(connection
+ ) >= 110000 and jit_enabled
def _query_tool_explain_check_jit_stats(self):
diff --git a/web/pgadmin/feature_tests/view_data_dml_queries.py b/web/pgadmin/feature_tests/view_data_dml_queries.py
index f52275726..736e99a5c 100644
--- a/web/pgadmin/feature_tests/view_data_dml_queries.py
+++ b/web/pgadmin/feature_tests/view_data_dml_queries.py
@@ -96,7 +96,7 @@ CREATE TABLE public.nonintpkey
def before(self):
with test_utils.Database(self.server) as (connection, _):
- if connection.server_version < 90100:
+ if test_utils.get_server_version(connection) < 90100:
self.skipTest(
"COLLATE is not present in PG versions below v9.1"
)
diff --git a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
index 3c0025f61..75264616c 100644
--- a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
@@ -29,7 +29,7 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
def before(self):
with test_utils.Database(self.server) as (connection, _):
- if connection.server_version < 90100:
+ if test_utils.get_server_version(connection) < 90100:
self.skipTest(
"Functions tree node is not present in pgAdmin below "
"PG v9.1"
diff --git a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
index 94fc856c5..bb8fc5d84 100644
--- a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
@@ -30,7 +30,7 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
def before(self):
with test_utils.Database(self.server) as (connection, _):
- if connection.server_version < 90100:
+ if test_utils.get_server_version(connection) < 90100:
self.skipTest(
"Membership is not present in Postgres below PG v9.1")
diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py
index 683f3e997..2af4af261 100644
--- a/web/pgadmin/tools/debugger/__init__.py
+++ b/web/pgadmin/tools/debugger/__init__.py
@@ -245,13 +245,27 @@ def index():
def execute_dict_search_path(conn, sql, search_path):
- sql = "SET search_path={0};".format(search_path) + sql
+ sql_search = "SET search_path={0};".format(search_path)
+ status, res = conn.execute_void(sql_search)
+
+ if not status:
+ current_app.logger.debug(
+ "Error setting the search path.")
+ return False, res
+
status, res = conn.execute_dict(sql)
return status, res
def execute_async_search_path(conn, sql, search_path):
- sql = "SET search_path={0};".format(search_path) + sql
+ sql_search = "SET search_path={0};".format(search_path)
+ status, res = conn.execute_void(sql_search)
+
+ if not status:
+ current_app.logger.debug(
+ "Error setting the search path.")
+ return False, res
+
status, res = conn.execute_async(sql)
return status, res
@@ -650,12 +664,16 @@ def get_debugger_version(conn, search_path):
:return:
"""
debugger_version = 0
+ status, res = conn.execute_void("SET search_path={0};".format(search_path))
+
+ if not status:
+ return False, internal_server_error(errormsg=res)
+
status, rid = conn.execute_scalar(
- "SET search_path={0};"
"SELECT COUNT(*) FROM pg_catalog.pg_proc p"
" LEFT JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid"
" WHERE n.nspname = ANY(current_schemas(false)) AND"
- " p.proname = 'pldbg_get_proxy_info';".format(search_path)
+ " p.proname = 'pldbg_get_proxy_info';"
)
if not status:
@@ -1083,7 +1101,8 @@ def start_debugger_listener(trans_id):
ret_type=de_inst.function_data['return_type'],
data=debugger_args_values,
arg_type=arg_type,
- args_mode=arg_mode
+ args_mode=arg_mode,
+ conn=conn
)
else:
str_query = render_template(
@@ -1092,13 +1111,15 @@ def start_debugger_listener(trans_id):
is_func=de_inst.function_data['is_func'],
ret_type=de_inst.function_data['return_type'],
data=debugger_args_values,
- is_ppas_database=de_inst.function_data['is_ppas_database']
+ is_ppas_database=de_inst.function_data['is_ppas_database'],
+ conn=conn
)
status, result = execute_async_search_path(
conn, str_query, de_inst.debugger_data['search_path'])
- if not status:
- return internal_server_error(errormsg=result)
+
+ # if not status:
+ # return internal_server_error(errormsg=result)
else:
sql = render_template(
@@ -1148,17 +1169,18 @@ def start_debugger_listener(trans_id):
session_id=int_session_id
)
- status, res = execute_async_search_path(
- conn, sql, de_inst.debugger_data['search_path'])
- if not status:
- return internal_server_error(errormsg=res)
-
de_inst.debugger_data['exe_conn_id'] = \
de_inst.debugger_data['conn_id']
de_inst.debugger_data['restart_debug'] = 1
de_inst.debugger_data['frame_id'] = 0
de_inst.debugger_data['session_id'] = int_session_id
de_inst.update_session()
+
+ status, res = execute_async_search_path(
+ conn, sql, de_inst.debugger_data['search_path'])
+ if not status:
+ return internal_server_error(errormsg=res)
+
return make_json_response(
data={'status': status, 'result': res}
)
@@ -1276,7 +1298,6 @@ def messages(trans_id):
trans_id
- unique transaction id.
"""
-
de_inst = DebuggerInstance(trans_id)
if de_inst.debugger_data is None:
return make_json_response(
@@ -1296,7 +1317,7 @@ def messages(trans_id):
if conn.connected():
status = 'Busy'
- _, result = conn.poll()
+ # _, result = conn.poll()
notify = conn.messages()
if notify:
# In notice message we need to find "PLDBGBREAK" string to find
@@ -1616,7 +1637,7 @@ def deposit_parameter_value(trans_id):
"/".join([template_path, "deposit_value.sql"]),
session_id=de_inst.debugger_data['session_id'],
var_name=data[0]['name'], line_number=-1,
- val=data[0]['value']
+ val=data[0]['value'], conn=conn
)
status, result = execute_dict_search_path(
diff --git a/web/pgadmin/tools/debugger/static/js/components/DebuggerComponent.jsx b/web/pgadmin/tools/debugger/static/js/components/DebuggerComponent.jsx
index 826609ecc..3b88d6a59 100644
--- a/web/pgadmin/tools/debugger/static/js/components/DebuggerComponent.jsx
+++ b/web/pgadmin/tools/debugger/static/js/components/DebuggerComponent.jsx
@@ -360,6 +360,8 @@ export default function DebuggerComponent({ pgAdmin, selectedNodeInfo, panel, ev
}
})
.catch(raiseJSONError);
+ enableToolbarButtons();
+ pollResult(params.transId);
} else if (params.transId != undefined) {
// Make api call to execute the and start the target for execution
baseUrl = url_for('debugger.start_listener', {
@@ -376,6 +378,7 @@ export default function DebuggerComponent({ pgAdmin, selectedNodeInfo, panel, ev
}
})
.catch(raiseJSONError);
+ messages(params.transId);
}
}, []);
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/execute_edbspl.sql b/web/pgadmin/tools/debugger/templates/debugger/sql/execute_edbspl.sql
index 3c0cd78da..1f08d16f9 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/execute_edbspl.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/execute_edbspl.sql
@@ -36,7 +36,7 @@
{% if arg_mode == 'b' %}
{### Handle Null parameters received from client ###}
{% if data[input_value_index]['type'] == 'text' and data[input_value_index]['value'] != 'NULL' %}
-{% set tmp_val = data[input_value_index]['value']|qtLiteral %}
+{% set tmp_val = data[input_value_index]['value']|qtLiteral(conn) %}
{% set str_declare = str_declare ~ " := " ~ strParam ~ " " ~ tmp_val ~ "::" ~ data[input_value_index]['type'] %}
{% else %}
{% set str_declare = str_declare ~ " := " ~ strParam ~ " " ~ data[input_value_index]['value'] ~ "::" ~ data[input_value_index]['type'] %}
@@ -63,7 +63,7 @@
{### Handle Null parameters received from client ###}
{% if data[input_value_index]['type'] == 'text' and data[input_value_index]['value'] != 'NULL' %}
-{% set tmp_var = data[input_value_index]['value']|qtLiteral %}
+{% set tmp_var = data[input_value_index]['value']|qtLiteral(conn) %}
{% set str_statement = str_statement ~ tmp_var ~ "::" ~ data[input_value_index]['type'] %}
{% else %}
{% set str_statement = str_statement ~ data[input_value_index]['value'] ~ "::" ~ data[input_value_index]['type'] %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/execute_plpgsql.sql b/web/pgadmin/tools/debugger/templates/debugger/sql/execute_plpgsql.sql
index 6e90ef83d..3d625dc29 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/execute_plpgsql.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/execute_plpgsql.sql
@@ -6,13 +6,12 @@
{% elif ret_type == 'record' %}
SELECT {{ func_name }} (
{% else %}
- SELECT * FROM {{ func_name }} (
-{% endif %}
+ SELECT * FROM {{ func_name }} ({% endif %}
{% if data %}
{% for dict_item in data %}
{% if 'type' in dict_item and 'value' in dict_item %}
{% if ('NULL:' not in dict_item['value']|string and dict_item['value'] != 'NULL' and '[]' not in dict_item['type']) %}
-{{ dict_item['value']|qtLiteral }}::{{ dict_item['type'] }}{% if not loop.last %}, {% endif %}
+{{ dict_item['value']|qtLiteral(conn) }}::{{ dict_item['type'] }}{% if not loop.last %}, {% endif %}
{% elif dict_item['value'] == 'NULL' or 'NULL:' in dict_item['value'] %}
{{ dict_item['value'] }}::{{ dict_item['type'] }}{% if not loop.last %}, {% endif %}
{% else %}
@@ -20,7 +19,7 @@
ARRAY[
{% for dict_list in dict_item['value'] %}
{% if 'value' in dict_list %}
-{{ dict_list['value']|qtLiteral }}{% if not loop.last %}, {% endif %}
+{{ dict_list['value']|qtLiteral(conn) }}{% if not loop.last %}, {% endif %}
{% endif %}
{% endfor %}
]::{{ dict_item['type'] }}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/deposit_value.sql b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/deposit_value.sql
index 93db6c6ff..b0cd3798c 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/deposit_value.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/deposit_value.sql
@@ -1,4 +1,4 @@
{### Change the variable value and submit during debugging ###}
{% if session_id %}
-SELECT * FROM pldbg_deposit_value({{session_id}}::int, {{var_name|qtLiteral}}, {{line_number}}, {{val|qtLiteral}})
-{% endif %}
\ No newline at end of file
+SELECT * FROM pldbg_deposit_value({{session_id}}::int, {{var_name|qtLiteral(conn)}}, {{line_number}}, {{val|qtLiteral(conn)}})
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v3/deposit_value.sql b/web/pgadmin/tools/debugger/templates/debugger/sql/v3/deposit_value.sql
index c2f4c1f07..8f3f2c854 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v3/deposit_value.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v3/deposit_value.sql
@@ -1,4 +1,4 @@
{### Change the variable value and submit during debugging ###}
{% if session_id %}
-SELECT * FROM pldbg_deposit_value({{session_id}}::int, {{var_name|qtLiteral }}, {{line_number}}, {{val|qtLiteral}})
-{% endif %}
\ No newline at end of file
+SELECT * FROM pldbg_deposit_value({{session_id}}::int, {{var_name|qtLiteral(conn) }}, {{line_number}}, {{val|qtLiteral(conn)}})
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py b/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py
index 125dbddf6..901e33383 100644
--- a/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py
+++ b/web/pgadmin/tools/debugger/tests/test_debugger_clear_all_breakpoint.py
@@ -18,6 +18,7 @@ from pgadmin.browser.server_groups.servers.databases.schemas.functions \
.tests import utils as funcs_utils
from pgadmin.browser.server_groups.servers.databases.tests import \
utils as db_utils
+import asyncio
class DebuggerClearAllBreakpoint(BaseTestGenerator):
@@ -51,10 +52,23 @@ class DebuggerClearAllBreakpoint(BaseTestGenerator):
if self.init_target:
debugger_utils.initialize_target(self, utils)
- debugger_utils.start_listener(self, utils, db_utils)
- self.port_no = debugger_utils.messages(self, utils, db_utils)
- debugger_utils.start_execution(self, utils, db_utils)
- breakpoint = debugger_utils.set_breakpoint(self)
+ self._start_debugger()
+
+ def _start_debugger(self):
+ asyncio.run(self.start_debugger())
+
+ async def messages_test(self):
+ self.port_no = debugger_utils.messages(self, utils, db_utils)
+ debugger_utils.start_execution(self, utils, db_utils)
+ breakpoint = debugger_utils.set_breakpoint(self)
+
+ async def start_debugger(self):
+ # Schedule three calls *concurrently*:
+ await asyncio.gather(
+ debugger_utils.start_listener(self, utils, db_utils),
+ asyncio.sleep(15),
+ self.messages_test()
+ )
def clear_all_breakpoint(self):
if hasattr(self, 'no_breakpoint') and self.no_breakpoint:
diff --git a/web/pgadmin/tools/debugger/tests/utils.py b/web/pgadmin/tools/debugger/tests/utils.py
index a56f3665f..fff96acdd 100644
--- a/web/pgadmin/tools/debugger/tests/utils.py
+++ b/web/pgadmin/tools/debugger/tests/utils.py
@@ -126,7 +126,7 @@ def initialize_target(self, utils, close_debugger_instance=True):
'for indirect debugging.')
-def start_listener(self, utils, db_utils):
+async def start_listener(self, utils, db_utils):
response = self.tester.get(
'debugger/start_listener/' + str(self.trans_id),
content_type='application/json')
diff --git a/web/pgadmin/tools/grant_wizard/tests/grant_wizard_test_data.json b/web/pgadmin/tools/grant_wizard/tests/grant_wizard_test_data.json
index 195c03f24..4a84b4d09 100644
--- a/web/pgadmin/tools/grant_wizard/tests/grant_wizard_test_data.json
+++ b/web/pgadmin/tools/grant_wizard/tests/grant_wizard_test_data.json
@@ -110,7 +110,7 @@
]
},
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while grant permissions.')"
},
"expected_data": {
@@ -137,7 +137,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while getting list of object for grant wizard.')"
},
"expected_data": {
@@ -164,7 +164,7 @@
"is_positive_test": false,
"mocking_required": true,
"mock_data": {
- "function_name": "pgadmin.utils.driver.psycopg2.connection.Connection.execute_dict",
+ "function_name": "pgadmin.utils.driver.psycopg3.connection.Connection.execute_dict",
"return_value": "(False, 'Mocked Internal Server Error while getting list of object for grant wizard.')"
},
"expected_data": {
diff --git a/web/pgadmin/tools/import_export/templates/import_export/sql/cmd.sql b/web/pgadmin/tools/import_export/templates/import_export/sql/cmd.sql
index b4cb8a600..71ba00374 100644
--- a/web/pgadmin/tools/import_export/templates/import_export/sql/cmd.sql
+++ b/web/pgadmin/tools/import_export/templates/import_export/sql/cmd.sql
@@ -1 +1 @@
-\copy {{ conn|qtIdent(data.schema, data.table) }} {% if columns %} {{ columns }} {% endif %} {% if data.is_import %}FROM{% else %}TO{% endif %} {{ data.filename|qtLiteral }} {% if data.oid %} OIDS {% endif %}{% if data.delimiter is defined and data.delimiter == '' and (data.format == 'csv' or data.format == 'text') %} {% elif data.delimiter and data.format != 'binary' and data.delimiter == '[tab]' %} DELIMITER E'\t' {% elif data.format != 'binary' and data.delimiter %} DELIMITER {{ data.delimiter|qtLiteral }}{% endif %}{% if data.format == 'csv' %} CSV {% endif %} {% if data.format == 'csv' and data.header %} HEADER {% endif %}{% if data.encoding %} ENCODING {{ data.encoding|qtLiteral }}{% endif %}{% if data.format == 'csv' and data.quote %} QUOTE {{ data.quote|qtLiteral }}{% endif %}{% if data.format != 'binary' and data.null_string %} NULL {{ data.null_string|qtLiteral }}{% endif %}{% if data.format == 'csv' and data.escape %} ESCAPE {{ data.escape|qtLiteral }}{% endif %}{% if data.format == 'csv' and data.is_import and ignore_column_list %} FORCE NOT NULL {{ ignore_column_list }} {% endif %};
+\copy {{ conn|qtIdent(data.schema, data.table) }} {% if columns %} {{ columns }} {% endif %} {% if data.is_import %}FROM{% else %}TO{% endif %} {{ data.filename|qtLiteral(conn) }} {% if data.oid %} OIDS {% endif %}{% if data.delimiter is defined and data.delimiter == '' and (data.format == 'csv' or data.format == 'text') %} {% elif data.delimiter and data.format != 'binary' and data.delimiter == '[tab]' %} DELIMITER E'\t' {% elif data.format != 'binary' and data.delimiter %} DELIMITER {{ data.delimiter|qtLiteral(conn) }}{% endif %}{% if data.format == 'csv' %} CSV {% endif %} {% if data.format == 'csv' and data.header %} HEADER {% endif %}{% if data.encoding %} ENCODING {{ data.encoding|qtLiteral(conn) }}{% endif %}{% if data.format == 'csv' and data.quote %} QUOTE {{ data.quote|qtLiteral(conn) }}{% endif %}{% if data.format != 'binary' and data.null_string %} NULL {{ data.null_string|qtLiteral(conn) }}{% endif %}{% if data.format == 'csv' and data.escape %} ESCAPE {{ data.escape|qtLiteral(conn) }}{% endif %}{% if data.format == 'csv' and data.is_import and ignore_column_list %} FORCE NOT NULL {{ ignore_column_list }} {% endif %};
diff --git a/web/pgadmin/tools/schema_diff/tests/utils.py b/web/pgadmin/tools/schema_diff/tests/utils.py
index ef71fe8cf..7323b4409 100644
--- a/web/pgadmin/tools/schema_diff/tests/utils.py
+++ b/web/pgadmin/tools/schema_diff/tests/utils.py
@@ -35,13 +35,13 @@ def restore_schema(server, db_name, schema_name, sql_path):
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
with open(sql_path, 'r') as content_file:
sql = content_file.read()
pg_cursor.execute(sql)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
SQL = """SELECT
@@ -95,10 +95,10 @@ def create_table(server, db_name, schema_id, table_name, query):
server['port'],
server['sslmode'])
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ utils.set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ utils.set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created table
pg_cursor.execute("SELECT oid "
diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py
index 673d76eb2..e70898fb2 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -399,7 +399,7 @@ def _connect(conn, **kwargs):
status, msg = conn.connect(user=user, role=role,
password=password)
else:
- status, msg = conn.connect()
+ status, msg = conn.connect(**kwargs)
return status, msg, is_ask_password, user, role, password
@@ -426,7 +426,11 @@ def _init_sqleditor(trans_id, connect, sgid, sid, did, **kwargs):
use_binary_placeholder=True,
array_to_string=True)
+ pref = Preferences.module('sqleditor')
if connect:
+ kwargs['auto_commit'] = pref.preference('auto_commit').get()
+ kwargs['auto_rollback'] = pref.preference('auto_rollback').get()
+
status, msg, is_ask_password, user, role, password = _connect(
conn, **kwargs)
if not status:
@@ -462,7 +466,6 @@ def _init_sqleditor(trans_id, connect, sgid, sid, did, **kwargs):
sql_grid_data = session['gridData']
# Set the value of auto commit and auto rollback specified in Preferences
- pref = Preferences.module('sqleditor')
command_obj.set_auto_commit(pref.preference('auto_commit').get())
command_obj.set_auto_rollback(pref.preference('auto_rollback').get())
@@ -1167,7 +1170,7 @@ def fetch_pg_types(columns_info, trans_obj):
if oids:
status, res = default_conn.execute_dict(
"SELECT oid, pg_catalog.format_type(oid, NULL) AS typname FROM "
- "pg_catalog.pg_type WHERE oid IN %s ORDER BY oid;", [tuple(oids)]
+ "pg_catalog.pg_type WHERE oid = ANY(%s) ORDER BY oid;", [oids]
)
if not status:
@@ -1338,7 +1341,7 @@ def append_filter_inclusive(trans_id):
else:
filter_sql = driver.qtIdent(
conn, column_name
- ) + ' = ' + driver.qtLiteral(column_value)
+ ) + ' = ' + driver.qtLiteral(column_value, conn)
trans_obj.append_filter(filter_sql)
@@ -1912,7 +1915,7 @@ def start_query_download_tool(trans_id):
# This returns generator of records.
status, gen, conn_obj = \
- sync_conn.execute_on_server_as_csv(records=2000)
+ sync_conn.execute_on_server_as_csv(records=10)
if not status:
return make_json_response(
@@ -1927,8 +1930,7 @@ def start_query_download_tool(trans_id):
quote=blueprint.csv_quoting.get(),
quote_char=blueprint.csv_quote_char.get(),
field_separator=blueprint.csv_field_separator.get(),
- replace_nulls_with=blueprint.replace_nulls_with.get()
- ),
+ replace_nulls_with=blueprint.replace_nulls_with.get()),
mimetype='text/csv' if
blueprint.csv_field_separator.get() == ','
else 'text/plain'
@@ -1999,7 +2001,6 @@ def query_tool_status(trans_id):
if status is not None:
# Check for the asynchronous notifies statements.
- conn.check_notifies(True)
notifies = conn.get_notifies()
return make_json_response(
diff --git a/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSet.jsx b/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSet.jsx
index 54476d41a..bf560f8f2 100644
--- a/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSet.jsx
+++ b/web/pgadmin/tools/sqleditor/static/js/components/sections/ResultSet.jsx
@@ -780,7 +780,7 @@ export function ResultSet() {
setSelectedRows(new Set());
setSelectedColumns(new Set());
setLoaderText(gettext('Waiting for the query to complete...'));
- let goForPoll = await rsu.current.startExecution(
+ await rsu.current.startExecution(
query, explainObject,
()=>{
setColumns([]);
@@ -788,32 +788,33 @@ export function ResultSet() {
},
{isQueryTool: queryToolCtx.params.is_query_tool, external: external, reconnect: reconnect}
);
- if(goForPoll) {
- rsu.current.pollForResult(
- (procQueryData, procColumns, procRows)=>{
- setRowsResetKey((prev)=>prev+1);
- setQueryData(procQueryData);
- setColumns(procColumns);
- setRows(procRows);
- },
- (planJson)=>{
- /* No need to open if plan is empty */
- if(!LayoutHelper.isTabOpen(queryToolCtx.docker, PANELS.EXPLAIN) && !planJson) {
- return;
- }
- LayoutHelper.openTab(queryToolCtx.docker, {
- id: PANELS.EXPLAIN,
- title: gettext('Explain'),
- content: ,
- closable: true,
- }, PANELS.MESSAGES, 'after-tab', true);
- },
- ()=>{
- setColumns([]);
- setRows([]);
+ };
+
+ const pollCallback = async ()=>{
+ rsu.current.pollForResult(
+ (procQueryData, procColumns, procRows)=>{
+ setRowsResetKey((prev)=>prev+1);
+ setQueryData(procQueryData);
+ setColumns(procColumns);
+ setRows(procRows);
+ },
+ (planJson)=>{
+ /* No need to open if plan is empty */
+ if(!LayoutHelper.isTabOpen(queryToolCtx.docker, PANELS.EXPLAIN) && !planJson) {
+ return;
}
- );
- }
+ LayoutHelper.openTab(queryToolCtx.docker, {
+ id: PANELS.EXPLAIN,
+ title: gettext('Explain'),
+ content: ,
+ closable: true,
+ }, PANELS.MESSAGES, 'after-tab', true);
+ },
+ ()=>{
+ setColumns([]);
+ setRows([]);
+ }
+ );
};
if(isDataChanged()) {
@@ -827,6 +828,7 @@ export function ResultSet() {
);
} else {
yesCallback();
+ pollCallback();
}
};
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/delete.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/delete.sql
index 953c4eebf..25ddf6487 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/delete.sql
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/delete.sql
@@ -7,7 +7,7 @@ DELETE FROM {{ conn|qtIdent(nsp_name, object_name) }}
WHERE ({% for each_label in primary_key_labels %}{{ conn|qtIdent(each_label) }}{% if not loop.last %}, {% endif %}{% endfor %}) IN
{% endif %}
{### Rows to delete ###}
- ({% for obj in data %}{% if no_of_keys == 1 %}{{ obj[primary_key_labels[0]]|qtLiteral }}{% elif no_of_keys > 1 %}
+ ({% for obj in data %}{% if no_of_keys == 1 %}{{ obj[primary_key_labels[0]]|qtLiteral(conn) }}{% elif no_of_keys > 1 %}
{### Here we need to make tuple for each row ###}
-({% for each_label in primary_key_labels %}{{ obj[each_label]|qtLiteral }}{% if not loop.last %}, {% endif %}{% endfor %}){% endif %}{% if not loop.last %}, {% endif %}
+({% for each_label in primary_key_labels %}{{ obj[each_label]|qtLiteral(conn) }}{% if not loop.last %}, {% endif %}{% endfor %}){% endif %}{% if not loop.last %}, {% endif %}
{% endfor %});
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/update.sql b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/update.sql
index 43b0ee7a7..08ac1c5f4 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/update.sql
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/sql/default/update.sql
@@ -4,4 +4,4 @@ UPDATE {{ conn|qtIdent(nsp_name, object_name) | replace("%", "%%") }} SET
{% if not loop.first %}, {% endif %}{{ conn|qtIdent(col) | replace("%", "%%") }} = %({{ pgadmin_alias[col] }})s{% if type_cast_required[col] %}::{{ data_type[col] }}{% endif %}{% endfor %}
WHERE
{% for pk in primary_keys %}
-{% if not loop.first %} AND {% endif %}{{ conn|qtIdent(pk) | replace("%", "%%") }} = {{ primary_keys[pk]|qtLiteral }}{% endfor %};
+{% if not loop.first %} AND {% endif %}{{ conn|qtIdent(pk) | replace("%", "%%") }} = {{ primary_keys[pk]|qtLiteral(conn) }}{% endfor %};
diff --git a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
index fe1e59e9e..1827940bc 100644
--- a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
+++ b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
@@ -97,13 +97,14 @@ class TestSQLASCIIEncoding(BaseTestGenerator):
)
old_isolation_level = db_con.isolation_level
- db_con.set_isolation_level(0)
- db_con.set_client_encoding(self.db_encoding)
+ test_utils.set_isolation_level(db_con, 0)
+ # db_con.set_client_encoding(self.db_encoding)
pg_cursor = db_con.cursor()
+ pg_cursor.execute("SET client_encoding='{0}'".format(self.db_encoding))
query = """INSERT INTO {0} VALUES('{1}')""".format(
self.table_name, self.test_str)
pg_cursor.execute(query)
- db_con.set_isolation_level(old_isolation_level)
+ test_utils.set_isolation_level(db_con, old_isolation_level)
db_con.commit()
query = """SELECT * FROM {0}""".format(self.table_name)
diff --git a/web/pgadmin/tools/sqleditor/utils/get_column_types.py b/web/pgadmin/tools/sqleditor/utils/get_column_types.py
index ee4991575..b2087b368 100644
--- a/web/pgadmin/tools/sqleditor/utils/get_column_types.py
+++ b/web/pgadmin/tools/sqleditor/utils/get_column_types.py
@@ -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)
diff --git a/web/pgadmin/tools/sqleditor/utils/save_changed_data.py b/web/pgadmin/tools/sqleditor/utils/save_changed_data.py
index 1e4c4a142..ae1e9f350 100644
--- a/web/pgadmin/tools/sqleditor/utils/save_changed_data.py
+++ b/web/pgadmin/tools/sqleditor/utils/save_changed_data.py
@@ -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,
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 b998e92cc..35a3f4382 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
@@ -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)
diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py
index 7c8a61054..8bce1e3fc 100644
--- a/web/pgadmin/utils/driver/psycopg2/__init__.py
+++ b/web/pgadmin/utils/driver/psycopg2/__init__.py
@@ -251,7 +251,7 @@ class Driver(BaseDriver):
mgr.release()
@staticmethod
- def qtLiteral(value, force_quote=False):
+ def qtLiteral(value, conn, force_quote=False):
adapted = adapt(value)
# Not all adapted objects have encoding
diff --git a/web/pgadmin/utils/driver/psycopg2/connection.py b/web/pgadmin/utils/driver/psycopg2/connection.py
index 450573d02..a59e384e2 100644
--- a/web/pgadmin/utils/driver/psycopg2/connection.py
+++ b/web/pgadmin/utils/driver/psycopg2/connection.py
@@ -1976,8 +1976,7 @@ Failed to reset the connection to the server due to following error:
:return:
"""
enc_password = None
- if psycopg2.__libpq_version__ >= 100000 and \
- hasattr(psycopg2.extensions, 'encrypt_password'):
+ if psycopg2.__libpq_version__ >= 100000:
if self.connected():
status, enc_algorithm = \
self.execute_scalar("SHOW password_encryption")
diff --git a/web/pgadmin/utils/driver/psycopg3/__init__.py b/web/pgadmin/utils/driver/psycopg3/__init__.py
new file mode 100644
index 000000000..67d89ef7e
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/__init__.py
@@ -0,0 +1,409 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""
+Implementation of Driver class
+It is a wrapper around the actual psycopg3 driver, and connection
+object.
+
+"""
+import datetime
+import re
+from flask import session
+from flask_login import current_user
+from werkzeug.exceptions import InternalServerError
+import psycopg
+from threading import Lock
+
+import config
+from pgadmin.model import Server
+from .keywords import scan_keyword
+from ..abstract import BaseDriver
+from .connection import Connection
+from .server_manager import ServerManager
+
+connection_restore_lock = Lock()
+
+
+class Driver(BaseDriver):
+ """
+ class Driver(BaseDriver):
+
+ This driver acts as a wrapper around psycopg3 connection driver
+ implementation. We will be using psycopg3 for makeing connection with
+ the PostgreSQL/EDB Postgres Advanced Server (EnterpriseDB).
+
+ Properties:
+ ----------
+
+ * Version (string):
+ Version of psycopg3 driver
+
+ Methods:
+ -------
+ * get_connection(sid, database, conn_id, auto_reconnect)
+ - It returns a Connection class object, which may/may not be connected
+ to the database server for this sesssion
+
+ * release_connection(seid, database, conn_id)
+ - It releases the connection object for the given conn_id/database for this
+ session.
+
+ * connection_manager(sid, reset)
+ - It returns the server connection manager for this session.
+ """
+
+ def __init__(self, **kwargs):
+ self.managers = dict()
+
+ super(Driver, self).__init__()
+
+ def _restore_connections_from_session(self):
+ """
+ Used internally by connection_manager to restore connections
+ from sessions.
+ """
+ if session.sid not in self.managers:
+ self.managers[session.sid] = managers = dict()
+ if '__pgsql_server_managers' in session:
+ session_managers = \
+ session['__pgsql_server_managers'].copy()
+ for server in \
+ Server.query.filter_by(
+ user_id=current_user.id):
+ manager = managers[str(server.id)] = \
+ ServerManager(server)
+ if server.id in session_managers:
+ manager._restore(session_managers[server.id])
+ manager.update_session()
+ return managers
+
+ return {}
+
+ def connection_manager(self, sid=None):
+ """
+ connection_manager(...)
+
+ Returns the ServerManager object for the current session. It will
+ create new ServerManager object (if necessary).
+
+ Parameters:
+ sid
+ - Server ID
+ """
+ assert (sid is not None and isinstance(sid, int))
+ managers = None
+
+ server_data = Server.query.filter_by(id=sid).first()
+ if server_data is None:
+ return None
+
+ if session.sid not in self.managers:
+ with connection_restore_lock:
+ # The wait is over but the object might have been loaded
+ # by some other thread check again
+ managers = self._restore_connections_from_session()
+ else:
+ managers = self.managers[session.sid]
+ if str(sid) in managers:
+ manager = managers[str(sid)]
+ with connection_restore_lock:
+ manager._restore_connections()
+ manager.update_session()
+
+ managers['pinged'] = datetime.datetime.now()
+ if str(sid) not in managers:
+ s = Server.query.filter_by(id=sid).first()
+
+ if not s:
+ return None
+
+ managers[str(sid)] = ServerManager(s)
+
+ return managers[str(sid)]
+
+ return managers[str(sid)]
+
+ def version(self):
+ """
+ version(...)
+
+ Returns the current version of psycopg3 driver
+ """
+ _version = getattr(psycopg, '__version__', None)
+
+ if _version:
+ return _version
+
+ raise InternalServerError(
+ "Driver Version information for psycopg3 is not available!"
+ )
+
+ def libpq_version(self):
+ """
+ Returns the loaded libpq version
+ """
+ version = getattr(psycopg, '__libpq_version__', None)
+ if version:
+ return version
+
+ raise InternalServerError(
+ "libpq version information is not available!"
+ )
+
+ def get_connection(
+ self, sid, database=None, conn_id=None, auto_reconnect=True
+ ):
+ """
+ get_connection(...)
+
+ Returns the connection object for the certain connection-id/database
+ for the specific server, identified by sid. Create a new Connection
+ object (if require).
+
+ Parameters:
+ sid
+ - Server ID
+ database
+ - Database, on which the connection needs to be made
+ If provided none, maintenance_db for the server will be used,
+ while generating new Connection object.
+ conn_id
+ - Identification String for the Connection This will be used by
+ certain tools, which will require a dedicated connection for it.
+ i.e. Debugger, Query Tool, etc.
+ auto_reconnect
+ - This parameters define, if we should attempt to reconnect the
+ database server automatically, when connection has been lost for
+ any reason. Certain tools like Debugger will require a permenant
+ connection, and it stops working on disconnection.
+
+ """
+ manager = self.connection_manager(sid)
+
+ return manager.connection(database=database, conn_id=conn_id,
+ auto_reconnect=auto_reconnect)
+
+ def release_connection(self, sid, database=None, conn_id=None):
+ """
+ Release the connection for the given connection-id/database in this
+ session.
+ """
+ return self.connection_manager(sid).release(database, conn_id)
+
+ def delete_manager(self, sid):
+ """
+ Delete manager for given server id.
+ """
+ manager = self.connection_manager(sid)
+ if manager is not None:
+ manager.release()
+ if session.sid in self.managers and \
+ str(sid) in self.managers[session.sid]:
+ del self.managers[session.sid][str(sid)]
+
+ def gc_timeout(self):
+ """
+ Release the connections for the sessions, which have not pinged the
+ server for more than config.MAX_SESSION_IDLE_TIME.
+ """
+
+ # Minimum session idle is 20 minutes
+ max_idle_time = max(config.MAX_SESSION_IDLE_TIME or 60, 20)
+ session_idle_timeout = datetime.timedelta(minutes=max_idle_time)
+
+ curr_time = datetime.datetime.now()
+
+ for sess in self.managers:
+ sess_mgr = self.managers[sess]
+
+ if sess == session.sid:
+ sess_mgr['pinged'] = curr_time
+ continue
+ if curr_time - sess_mgr['pinged'] >= session_idle_timeout:
+ for mgr in [
+ m for m in sess_mgr.values() if isinstance(m,
+ ServerManager)
+ ]:
+ mgr.release()
+
+ def gc_own(self):
+ """
+ Release the connections for current session
+ This is useful when (eg. logout) we want to release all
+ connections (except dedicated connections created by utilities
+ like backup, restore etc) of all servers for current user.
+ """
+
+ sess_mgr = self.managers.get(session.sid, None)
+
+ if sess_mgr:
+ for mgr in (
+ m for m in sess_mgr.values() if isinstance(m, ServerManager)
+ ):
+ mgr.release()
+
+ @staticmethod
+ def qtLiteral(value, conn, force_quote=False):
+ res = value
+
+ if conn:
+ try:
+ if type(conn) != psycopg.Connection:
+ conn = conn.conn
+ res = psycopg.sql.Literal(value).as_string(conn)
+ except Exception:
+ print("Exception", value)
+
+ if force_quote is True:
+ # Convert the input to the string to use the startsWith(...)
+ res = str(res)
+ if not res.startswith("'"):
+ return "'" + res + "'"
+
+ return res
+
+ @staticmethod
+ def ScanKeywordExtraLookup(key):
+ # UNRESERVED_KEYWORD 0
+ # COL_NAME_KEYWORD 1
+ # TYPE_FUNC_NAME_KEYWORD 2
+ # RESERVED_KEYWORD 3
+ extra_keywords = {
+ 'connect': 3,
+ 'convert': 3,
+ 'distributed': 0,
+ 'exec': 3,
+ 'log': 0,
+ 'long': 3,
+ 'minus': 3,
+ 'nocache': 3,
+ 'number': 3,
+ 'package': 3,
+ 'pls_integer': 3,
+ 'raw': 3,
+ 'return': 3,
+ 'smalldatetime': 3,
+ 'smallfloat': 3,
+ 'smallmoney': 3,
+ 'sysdate': 3,
+ 'systimestap': 3,
+ 'tinyint': 3,
+ 'tinytext': 3,
+ 'varchar2': 3
+ }
+
+ return extra_keywords.get(key, None) or scan_keyword(key)
+
+ @staticmethod
+ def needsQuoting(key, for_types):
+ value = key
+ val_noarray = value
+
+ # check if the string is number or not
+ if isinstance(value, int):
+ return True
+ # certain types should not be quoted even though it contains a space.
+ # Evilness.
+ elif for_types and value[-2:] == "[]":
+ val_noarray = value[:-2]
+
+ if for_types and val_noarray.lower() in [
+ 'bit varying',
+ '"char"',
+ 'character varying',
+ 'double precision',
+ 'timestamp without time zone',
+ 'timestamp with time zone',
+ 'time without time zone',
+ 'time with time zone',
+ '"trigger"',
+ '"unknown"'
+ ]:
+ return False
+
+ # If already quoted?, If yes then do not quote again
+ if for_types and val_noarray and \
+ (val_noarray.startswith('"') or val_noarray.endswith('"')):
+ return False
+
+ if '0' <= val_noarray[0] <= '9':
+ return True
+
+ if re.search('[^a-z_0-9]+', val_noarray):
+ return True
+
+ # check string is keywaord or not
+ category = Driver.ScanKeywordExtraLookup(value)
+
+ if category is None:
+ return False
+
+ # UNRESERVED_KEYWORD
+ if category == 0:
+ return False
+
+ # COL_NAME_KEYWORD
+ if for_types and category == 1:
+ return False
+
+ return True
+
+ @staticmethod
+ def qtTypeIdent(conn, *args):
+ # We're not using the conn object at the moment, but - we will
+ # modify the
+ # logic to use the server version specific keywords later.
+ res = None
+ value = None
+
+ for val in args:
+ # DataType doesn't have len function then convert it to string
+ if not hasattr(val, '__len__'):
+ val = str(val)
+
+ if len(val) == 0:
+ continue
+ value = val
+
+ if Driver.needsQuoting(val, True):
+ value = value.replace("\"", "\"\"")
+ value = "\"" + value + "\""
+
+ res = ((res and res + '.') or '') + value
+
+ return res
+
+ @staticmethod
+ def qtIdent(conn, *args):
+ # We're not using the conn object at the moment, but - we will
+ # modify the logic to use the server version specific keywords later.
+ res = None
+ value = None
+
+ for val in args:
+ if isinstance(val, list):
+ return map(lambda w: Driver.qtIdent(conn, w), val)
+
+ # DataType doesn't have len function then convert it to string
+ if not hasattr(val, '__len__'):
+ val = str(val)
+
+ if len(val) == 0:
+ continue
+
+ value = val
+
+ if Driver.needsQuoting(val, False):
+ value = value.replace("\"", "\"\"")
+ value = "\"" + value + "\""
+
+ res = ((res and res + '.') or '') + value
+
+ return res
diff --git a/web/pgadmin/utils/driver/psycopg3/connection.py b/web/pgadmin/utils/driver/psycopg3/connection.py
new file mode 100644
index 000000000..4eb496fd5
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/connection.py
@@ -0,0 +1,1929 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""
+Implementation of Connection.
+It is a wrapper around the actual psycopg3 driver, and connection
+object.
+"""
+
+import random
+import datetime
+import asyncio
+from collections import deque
+import psycopg
+from flask import g, current_app
+from flask_babel import gettext
+from flask_security import current_user
+from pgadmin.utils.crypto import decrypt, encrypt
+from psycopg._encodings import py_codecs as encodings
+
+import config
+from pgadmin.model import User
+from pgadmin.utils.exception import ConnectionLost, CryptKeyMissing
+from pgadmin.utils import get_complete_file_path
+from ..abstract import BaseConnection
+from .cursor import DictCursor, AsyncDictCursor
+from .typecast import register_global_typecasters,\
+ register_string_typecasters, register_binary_typecasters, \
+ register_array_to_string_typecasters, ALL_JSON_TYPES
+from .encoding import get_encoding, configure_driver_encodings
+from pgadmin.utils import csv
+from pgadmin.utils.master_password import get_crypt_key
+from io import StringIO
+from pgadmin.utils.locker import ConnectionLocker
+
+
+_ = gettext
+
+# Register global type caster which will be applicable to all connections.
+register_global_typecasters()
+configure_driver_encodings(encodings)
+
+
+class Connection(BaseConnection):
+ """
+ class Connection(object)
+
+ A wrapper class, which wraps the psycopg3 connection object, and
+ delegate the execution to the actual connection object, when required.
+
+ Methods:
+ -------
+ * connect(**kwargs)
+ - Connect the PostgreSQL/EDB Postgres Advanced Server using the psycopg3
+ driver
+
+ * execute_scalar(query, params, formatted_exception_msg)
+ - Execute the given query and returns single datum result
+
+ * execute_async(query, params, formatted_exception_msg)
+ - Execute the given query asynchronously and returns result.
+
+ * execute_void(query, params, formatted_exception_msg)
+ - Execute the given query with no result.
+
+ * execute_2darray(query, params, formatted_exception_msg)
+ - Execute the given query and returns the result as a 2 dimensional
+ array.
+
+ * execute_dict(query, params, formatted_exception_msg)
+ - Execute the given query and returns the result as an array of dict
+ (column name -> value) format.
+
+ * connected()
+ - Get the status of the connection.
+ Returns True if connected, otherwise False.
+
+ * reset()
+ - Reconnect the database server (if possible)
+
+ * transaction_status()
+ - Transaction Status
+
+ * ping()
+ - Ping the server.
+
+ * _release()
+ - Release the connection object of psycopg3
+
+ * _reconnect()
+ - Attempt to reconnect to the database
+
+ * _wait(conn)
+ - This method is used to wait for asynchronous connection. This is a
+ blocking call.
+
+ * _wait_timeout(conn)
+ - This method is used to wait for asynchronous connection with timeout.
+ This is a non blocking call.
+
+ * poll(formatted_exception_msg)
+ - This method is used to poll the data of query running on asynchronous
+ connection.
+
+ * status_message()
+ - Returns the status message returned by the last command executed on
+ the server.
+
+ * rows_affected()
+ - Returns the no of rows affected by the last command executed on
+ the server.
+
+ * cancel_transaction(conn_id, did=None)
+ - This method is used to cancel the transaction for the
+ specified connection id and database id.
+
+ * messages()
+ - Returns the list of messages/notices sends from the PostgreSQL database
+ server.
+
+ * _formatted_exception_msg(exception_obj, formatted_msg)
+ - This method is used to parse the psycopg.Error object and returns the
+ formatted error message if flag is set to true else return
+ normal error message.
+
+ * check_notifies(required_polling)
+ - Check for the notify messages by polling the connection or after
+ execute is there in notifies.
+
+ * get_notifies()
+ - This function will returns list of notifies received from database
+ server.
+
+ * pq_encrypt_password_conn()
+ - This function will return the encrypted password for database server
+ - greater than or equal to 10.
+ """
+ UNAUTHORIZED_REQUEST = gettext("Unauthorized request.")
+ CURSOR_NOT_FOUND = \
+ gettext("Cursor could not be found for the async connection.")
+ ARGS_STR = "{0}#{1}"
+
+ def __init__(self, manager, conn_id, db, **kwargs):
+ assert (manager is not None)
+ assert (conn_id is not None)
+
+ auto_reconnect = kwargs.get('auto_reconnect', True)
+ async_ = kwargs.get('async_', 0)
+ use_binary_placeholder = kwargs.get('use_binary_placeholder', False)
+ array_to_string = kwargs.get('array_to_string', False)
+
+ self.conn_id = conn_id
+ self.manager = manager
+ self.db = db if db is not None else manager.db
+ self.conn = None
+ self.auto_reconnect = auto_reconnect
+ self.async_ = async_
+ self.__async_cursor = None
+ self.__async_query_id = None
+ self.__backend_pid = None
+ self.execution_aborted = False
+ self.row_count = 0
+ self.__notices = None
+ self.__notifies = None
+ self.password = None
+ # This flag indicates the connection status (connected/disconnected).
+ self.wasConnected = False
+ # This flag indicates the connection reconnecting status.
+ self.reconnecting = False
+ self.use_binary_placeholder = use_binary_placeholder
+ self.array_to_string = array_to_string
+ super(Connection, self).__init__()
+
+ def as_dict(self):
+ """
+ Returns the dictionary object representing this object.
+ """
+ # In case, it cannot be auto reconnectable, or already been released,
+ # then we will return None.
+ if not self.auto_reconnect and not self.conn:
+ return None
+
+ res = dict()
+ res['conn_id'] = self.conn_id
+ res['database'] = self.db
+ res['async_'] = self.async_
+ res['wasConnected'] = self.wasConnected
+ res['auto_reconnect'] = self.auto_reconnect
+ res['use_binary_placeholder'] = self.use_binary_placeholder
+ res['array_to_string'] = self.array_to_string
+
+ return res
+
+ def __repr__(self):
+ return "PG Connection: {0} ({1}) -> {2} (ajax:{3})".format(
+ self.conn_id, self.db,
+ 'Connected' if self.conn and not self.conn.closed else
+ "Disconnected",
+ self.async_
+ )
+
+ def __str__(self):
+ return self.__repr__()
+
+ def _check_user_password(self, kwargs):
+ """
+ Check user and password.
+ """
+ password = None
+ encpass = None
+ is_update_password = True
+
+ if 'user' in kwargs and kwargs['password']:
+ password = kwargs['password']
+ kwargs.pop('password')
+ is_update_password = False
+ else:
+ encpass = kwargs['password'] if 'password' in kwargs else None
+
+ return password, encpass, is_update_password
+
+ def _decode_password(self, encpass, manager, password, crypt_key):
+ if encpass:
+ # Fetch Logged in User Details.
+ user = User.query.filter_by(id=current_user.id).first()
+
+ if user is None:
+ return True, self.UNAUTHORIZED_REQUEST, password
+
+ try:
+ password = decrypt(encpass, crypt_key)
+ # password is in bytes, for python3 we need it in string
+ if isinstance(password, bytes):
+ password = password.decode()
+ except Exception as e:
+ manager.stop_ssh_tunnel()
+ current_app.logger.exception(e)
+ return True, \
+ _(
+ "Failed to decrypt the saved password.\nError: {0}"
+ ).format(str(e))
+ return False, '', password
+
+ def connect(self, **kwargs):
+ if self.conn:
+ if self.conn.closed:
+ self.conn = None
+ else:
+ return True, None
+
+ pg_conn = None
+ passfile = None
+ manager = self.manager
+ crypt_key_present, crypt_key = get_crypt_key()
+
+ password, encpass, is_update_password = self._check_user_password(
+ kwargs)
+
+ passfile = kwargs['passfile'] if 'passfile' in kwargs else None
+ tunnel_password = kwargs['tunnel_password'] if 'tunnel_password' in \
+ kwargs else ''
+
+ # Check SSH Tunnel needs to be created
+ if manager.use_ssh_tunnel == 1 and not manager.tunnel_created:
+ status, error = manager.create_ssh_tunnel(tunnel_password)
+ if not status:
+ return False, error
+
+ # Check SSH Tunnel is alive or not.
+ if manager.use_ssh_tunnel == 1:
+ manager.check_ssh_tunnel_alive()
+
+ if is_update_password:
+ if encpass is None:
+ encpass = self.password or getattr(manager, 'password', None)
+
+ self.password = encpass
+
+ # Reset the existing connection password
+ if self.reconnecting is not False:
+ self.password = None
+
+ if not crypt_key_present:
+ raise CryptKeyMissing()
+
+ is_error, errmsg, password = self._decode_password(encpass, manager,
+ password, crypt_key)
+ if is_error:
+ return False, errmsg
+
+ # If no password credential is found then connect request might
+ # come from Query tool, ViewData grid, debugger etc tools.
+ # we will check for pgpass file availability from connection manager
+ # if it's present then we will use it
+ if not password and not encpass and not passfile:
+ passfile = manager.passfile if manager.passfile else None
+
+ try:
+ database = self.db
+ if 'user' in kwargs and kwargs['user']:
+ user = kwargs['user']
+ else:
+ user = manager.user
+ conn_id = self.conn_id
+
+ import os
+ os.environ['PGAPPNAME'] = '{0} - {1}'.format(
+ config.APP_NAME, conn_id)
+
+ with ConnectionLocker(manager.kerberos_conn):
+ if self.async_:
+ autocommit = True
+ if 'auto_commit' in kwargs:
+ autocommit = kwargs['auto_commit']
+
+ async def connectdbserver():
+ return await psycopg.AsyncConnection.connect(
+ host=manager.local_bind_host if
+ manager.use_ssh_tunnel
+ else manager.host,
+ hostaddr=manager.local_bind_host if
+ manager.use_ssh_tunnel
+ else manager.hostaddr,
+ port=manager.local_bind_port if
+ manager.use_ssh_tunnel
+ else manager.port,
+ dbname=database,
+ user=user,
+ password=password,
+ passfile=get_complete_file_path(passfile),
+ sslmode=manager.ssl_mode,
+ sslcert=get_complete_file_path(manager.sslcert),
+ sslkey=get_complete_file_path(manager.sslkey),
+ sslrootcert=get_complete_file_path(
+ manager.sslrootcert),
+ sslcrl=get_complete_file_path(manager.sslcrl),
+ sslcompression=True if manager.sslcompression else
+ False,
+ service=manager.service,
+ connect_timeout=manager.connect_timeout,
+ cursor_factory=AsyncDictCursor,
+ autocommit=autocommit)
+ pg_conn = asyncio.run(connectdbserver())
+ else:
+ pg_conn = psycopg.Connection.connect(
+ host=manager.local_bind_host if manager.use_ssh_tunnel
+ else manager.host,
+ hostaddr=manager.local_bind_host if
+ manager.use_ssh_tunnel
+ else manager.hostaddr,
+ port=manager.local_bind_port if manager.use_ssh_tunnel
+ else manager.port,
+ dbname=database,
+ user=user,
+ password=password,
+ passfile=get_complete_file_path(passfile),
+ sslmode=manager.ssl_mode,
+ sslcert=get_complete_file_path(manager.sslcert),
+ sslkey=get_complete_file_path(manager.sslkey),
+ sslrootcert=get_complete_file_path(
+ manager.sslrootcert),
+ sslcrl=get_complete_file_path(manager.sslcrl),
+ sslcompression=True if manager.sslcompression else
+ False,
+ service=manager.service,
+ connect_timeout=manager.connect_timeout,
+ cursor_factory=DictCursor
+ )
+
+ except psycopg.Error as e:
+ manager.stop_ssh_tunnel()
+ if hasattr(e, 'pgerror'):
+ msg = e.pgerror
+ elif e.diag.message_detail:
+ msg = e.diag.message_detail
+ else:
+ msg = str(e)
+ current_app.logger.info(
+ "Failed to connect to the database server(#{server_id}) for "
+ "connection ({conn_id}) with error message as below"
+ ":{msg}".format(
+ server_id=self.manager.sid,
+ conn_id=conn_id,
+ msg=msg
+ )
+ )
+ return False, msg
+
+ # Overwrite connection notice attr to support
+ # more than 50 notices at a time
+ pg_conn.notices = deque([], self.ASYNC_NOTICE_MAXLENGTH)
+ pg_conn.add_notify_handler(self.check_notifies)
+ pg_conn.add_notice_handler(self.get_notices)
+
+ self.conn = pg_conn
+ self.wasConnected = True
+ try:
+ status, msg = self._initialize(conn_id, **kwargs)
+ except Exception as e:
+ manager.stop_ssh_tunnel()
+ current_app.logger.exception(e)
+ self.conn = None
+ if not self.reconnecting:
+ self.wasConnected = False
+ raise e
+
+ if status and is_update_password:
+ manager._update_password(encpass)
+ else:
+ if not self.reconnecting and is_update_password:
+ self.wasConnected = False
+
+ return status, msg
+
+ def _set_auto_commit(self, kwargs):
+ """
+ autocommit flag does not work with asynchronous connections.
+ By default asynchronous connection runs in autocommit mode.
+ :param kwargs:
+ :return:
+ """
+ if self.async_ == 0:
+ if 'autocommit' in kwargs and kwargs['autocommit'] is False:
+ self.conn.autocommit = False
+ else:
+ self.conn.autocommit = True
+
+ def _set_role(self, manager, cur, conn_id, **kwargs):
+ """
+ Set role
+ :param manager:
+ :param cur:
+ :param conn_id:
+ :return:
+ """
+ is_set_role = False
+ role = None
+
+ if 'role' in kwargs and kwargs['role']:
+ is_set_role = True
+ role = kwargs['role']
+ elif manager.role:
+ is_set_role = True
+ role = manager.role
+
+ if is_set_role:
+ status = self._execute(cur, "SET ROLE TO %s", [role])
+
+ if status is not None:
+ self.conn.close()
+ self.conn = None
+ current_app.logger.error(
+ "Connect to the database server (#{server_id}) for "
+ "connection ({conn_id}), but - failed to setup the role "
+ "with error message as below:{msg}".format(
+ server_id=self.manager.sid,
+ conn_id=conn_id,
+ msg=status
+ )
+ )
+ return True, \
+ _(
+ "Failed to setup the role with error message:\n{0}"
+ ).format(status)
+ return False, ''
+
+ def _execute(self, cur, query, params=None):
+ formatted_exception_msg = self._formatted_exception_msg
+ try:
+ self.__internal_blocking_execute(cur, query, params)
+ except psycopg.Error as pe:
+ cur.close()
+ return formatted_exception_msg(pe, False)
+ return None
+
+ def _initialize(self, conn_id, **kwargs):
+ self.execution_aborted = False
+ self.__backend_pid = self.conn.info.backend_pid
+
+ setattr(g, self.ARGS_STR.format(
+ self.manager.sid,
+ self.conn_id.encode('utf-8')
+ ), None)
+
+ register_string_typecasters(self.conn)
+
+ status, cur = self.__cursor()
+
+ manager = self.manager
+
+ # autocommit flag does not work with asynchronous connections.
+ # By default asynchronous connection runs in autocommit mode.
+ self._set_auto_commit(kwargs)
+
+ if self.array_to_string:
+ print("ARRAY to string")
+ register_array_to_string_typecasters(self.conn)
+
+ # Register type casters for binary data only after registering array to
+ # string type casters.
+ if self.use_binary_placeholder:
+ register_binary_typecasters(self.conn)
+ #
+ postgres_encoding, self.python_encoding, typecast_encoding = \
+ get_encoding(self.conn.info.encoding)
+ # print("init")
+ # print(postgres_encoding)
+
+ # Note that we use 'UPDATE pg_settings' for setting bytea_output as a
+ # convenience hack for those running on old, unsupported versions of
+ # PostgreSQL 'cos we're nice like that.
+ status = self._execute(
+ cur,
+ "SET DateStyle=ISO; "
+ "SET client_min_messages=notice; "
+ "SELECT set_config('bytea_output','hex',false) FROM pg_settings"
+ " WHERE name = 'bytea_output'; "
+ "SET client_encoding='{0}';".format(postgres_encoding)
+ )
+
+ if status is not None:
+ self.conn.close()
+ self.conn = None
+
+ return False, status
+
+ is_error, errmsg = self._set_role(manager, cur, conn_id, **kwargs)
+ if is_error:
+ return False, errmsg
+
+ # Check database version every time on reconnection
+ status = self._execute(cur, "SELECT version()")
+
+ if status is not None:
+ self.conn.close()
+ self.conn = None
+ self.wasConnected = False
+ current_app.logger.error(
+ "Failed to fetch the version information on the "
+ "established connection to the database server "
+ "(#{server_id}) for '{conn_id}' with below error "
+ "message:{msg}".format(
+ server_id=self.manager.sid,
+ conn_id=conn_id,
+ msg=status)
+ )
+ return False, status
+
+ if cur.rowcount > 0:
+ row = cur.fetchmany(1)[0]
+ manager.ver = row['version']
+ manager.sversion = self.conn.info.server_version
+
+ status = self._execute(cur, """
+SELECT
+ db.oid as did, db.datname, db.datallowconn,
+ pg_encoding_to_char(db.encoding) AS serverencoding,
+ has_database_privilege(db.oid, 'CREATE') as cancreate,
+ datistemplate
+FROM
+ pg_catalog.pg_database db
+WHERE db.datname = current_database()""")
+
+ if status is None:
+ manager.db_info = manager.db_info or dict()
+ if cur.rowcount > 0:
+ res = cur.fetchmany(1)[0]
+ manager.db_info[res['did']] = res.copy()
+
+ # We do not have database oid for the maintenance database.
+ if len(manager.db_info) == 1:
+ manager.did = res['did']
+
+ if manager.sversion >= 120000:
+ status = self._execute(cur, """
+ SELECT
+ gss_authenticated, encrypted
+ FROM
+ pg_catalog.pg_stat_gssapi
+ WHERE pid = pg_backend_pid()""")
+ if status is None and cur.get_rowcount() > 0:
+ res_enc = cur.fetchmany(1)[0]
+ manager.db_info[res['did']]['gss_authenticated'] =\
+ res_enc['gss_authenticated']
+ manager.db_info[res['did']]['gss_encrypted'] = \
+ res_enc['encrypted']
+
+ if len(manager.db_info) == 1:
+ manager.gss_authenticated = \
+ res_enc['gss_authenticated']
+ manager.gss_encrypted = res_enc['encrypted']
+
+ self._set_user_info(cur, manager, **kwargs)
+
+ self._set_server_type_and_password(kwargs, manager)
+
+ manager.update_session()
+
+ return True, None
+
+ def _set_user_info(self, cur, manager, **kwargs):
+ """
+ Set user info.
+ :param cur:
+ :param manager:
+ :return:
+ """
+ status = self._execute(cur, """
+ SELECT
+ roles.oid as id, roles.rolname as name,
+ roles.rolsuper as is_superuser,
+ CASE WHEN roles.rolsuper THEN true ELSE roles.rolcreaterole END as
+ can_create_role,
+ CASE WHEN roles.rolsuper THEN true
+ ELSE roles.rolcreatedb END as can_create_db,
+ CASE WHEN 'pg_signal_backend'=ANY(ARRAY(WITH RECURSIVE cte AS (
+ SELECT pg_roles.oid,pg_roles.rolname FROM pg_roles
+ WHERE pg_roles.oid = roles.oid
+ UNION ALL
+ SELECT m.roleid,pgr.rolname FROM cte cte_1
+ JOIN pg_auth_members m ON m.member = cte_1.oid
+ JOIN pg_roles pgr ON pgr.oid = m.roleid)
+ SELECT rolname FROM cte)) THEN True
+ ELSE False END as can_signal_backend
+ FROM
+ pg_catalog.pg_roles as roles
+ WHERE
+ rolname = current_user""")
+
+ if status is None and 'user' not in kwargs:
+ manager.user_info = dict()
+ if cur.get_rowcount() > 0:
+ manager.user_info = cur.fetchmany(1)[0]
+
+ def _set_server_type_and_password(self, kwargs, manager):
+ """
+ Set server type
+ :param kwargs:
+ :param manager:
+ :return:
+ """
+ if 'password' in kwargs:
+ manager.password = kwargs['password']
+
+ server_types = None
+ if 'server_types' in kwargs and isinstance(
+ kwargs['server_types'], list):
+ server_types = manager.server_types = kwargs['server_types']
+
+ if server_types is None:
+ from pgadmin.browser.server_groups.servers.types import ServerType
+ server_types = ServerType.types()
+
+ for st in server_types:
+ if st.instance_of(manager.ver):
+ manager.server_type = st.stype
+ manager.server_cls = st
+ break
+
+ def __cursor(self, server_cursor=False, scrollable=False):
+
+ if not get_crypt_key()[0]:
+ raise CryptKeyMissing()
+
+ # Check SSH Tunnel is alive or not. If used by the database
+ # server for the connection.
+ if self.manager.use_ssh_tunnel == 1:
+ self.manager.check_ssh_tunnel_alive()
+
+ if self.wasConnected is False:
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+ cur = getattr(g, self.ARGS_STR.format(
+ self.manager.sid,
+ self.conn_id.encode('utf-8')
+ ), None)
+
+ if self.connected() and cur and not cur.closed and \
+ (not server_cursor or (server_cursor and cur.name)):
+ return True, cur
+
+ if not self.connected():
+ errmsg = ""
+
+ current_app.logger.warning(
+ "Connection to database server (#{server_id}) for the "
+ "connection - '{conn_id}' has been lost.".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id
+ )
+ )
+
+ if self.auto_reconnect and not self.reconnecting:
+ self.__attempt_execution_reconnect(None)
+ else:
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+
+ try:
+ if server_cursor:
+ # Providing name to cursor will create server side cursor.
+ cursor_name = "CURSOR:{0}".format(self.conn_id)
+ cur = self.conn.cursor(
+ name=cursor_name
+ )
+ else:
+ cur = self.conn.cursor(scrollable=scrollable)
+ except psycopg.Error as pe:
+ current_app.logger.exception(pe)
+ errmsg = gettext(
+ "Failed to create cursor for psycopg3 connection with error "
+ "message for the server#{1}:{2}:\n{0}"
+ ).format(
+ str(pe), self.manager.sid, self.db
+ )
+
+ current_app.logger.error(errmsg)
+ if self.conn.closed:
+ self.conn = None
+ if self.auto_reconnect and not self.reconnecting:
+ current_app.logger.info(
+ gettext(
+ "Attempting to reconnect to the database server "
+ "(#{server_id}) for the connection - '{conn_id}'."
+ ).format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id
+ )
+ )
+ return self.__attempt_execution_reconnect(
+ self.__cursor, server_cursor
+ )
+ else:
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:'
+ else self.conn_id[5:]
+ )
+
+ setattr(
+ g, self.ARGS_STR.format(
+ self.manager.sid, self.conn_id.encode('utf-8')
+ ), cur
+ )
+
+ return True, cur
+
+ def reset_cursor_at(self, position):
+ """
+ This function is used to reset the cursor at the given position
+ """
+ cur = self.__async_cursor
+ if not cur:
+ current_app.logger.log(
+ 25,
+ 'Cursor not found in reset_cursor_at method')
+
+ try:
+ cur.scroll(position, mode='absolute')
+ except psycopg.Error:
+ # bypassing the error as cursor tried to scroll on the
+ # specified position, but end of records found
+ current_app.logger.log(
+ 25,
+ 'Failed to reset cursor in reset_cursor_at method')
+
+ def escape_params_sqlascii(self, params):
+ # The data is unescaped using string_typecasters when selected
+ # We need to esacpe the data so that it does not fail when
+ # it is encoded with python ascii
+ # unicode_escape helps in escaping and unescaping
+ if self.conn and \
+ self.conn.info.encoding in ('SQL_ASCII', 'SQLASCII',
+ 'MULE_INTERNAL', 'MULEINTERNAL'
+ ) and params is not None\
+ and isinstance(params, dict):
+ for key, val in params.items():
+ modified_val = val
+ # "unicode_escape" will convert single backslash to double
+ # backslash, so we will have to replace/revert them again
+ # to store the correct value into the database.
+ if isinstance(val, str):
+ modified_val = val.encode('unicode_escape')\
+ .decode('raw_unicode_escape')\
+ .replace("\\\\", "\\")
+
+ params[key] = modified_val
+
+ return params
+
+ def __internal_blocking_execute(self, cur, query, params):
+ """
+ This function executes the query using cursor's execute function,
+ but in case of asynchronous connection we need to wait for the
+ transaction to be completed. If self.async_ is 1 then it is a
+ blocking call.
+
+ Args:
+ cur: Cursor object
+ query: SQL query to run.
+ params: Extra parameters
+ """
+
+ query = query.encode(self.python_encoding)
+
+ params = self.escape_params_sqlascii(params)
+ cur.execute(query, params)
+
+ def execute_on_server_as_csv(self, params=None,
+ formatted_exception_msg=False, records=2000):
+ """
+ To fetch query result and generate CSV output
+
+ Args:
+ params: Additional parameters
+ formatted_exception_msg: For exception
+ records: Number of initial records
+ Returns:
+ Generator response
+ """
+ cur = self.__async_cursor
+ if not cur:
+ return False, self.CURSOR_NOT_FOUND
+
+ if self.conn.pgconn.connect_poll() != 3:
+ return False, gettext(
+ "Asynchronous query execution/operation underway."
+ )
+
+ encoding = self.python_encoding
+ query = None
+ try:
+ query = str(cur.query, encoding) \
+ if cur and cur.query is not None else None
+ except Exception:
+ current_app.logger.warning('Error encoding query')
+
+ current_app.logger.log(
+ 25,
+ "Execute (with server cursor) by {pga_user} on "
+ "{db_user}@{db_host}/{db_name} #{server_id} - "
+ "{conn_id} (Query-id: {query_id}):\n{query}".format(
+ pga_user=current_user.email,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query,
+ query_id=self.__async_query_id
+ )
+ )
+ try:
+ if self.async_ == 1:
+ self._wait(cur.connection)
+ except psycopg.Error as pe:
+ cur.close()
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "failed to execute query ((with server cursor) "
+ "for the server #{server_id} - {conn_id} "
+ "(query-id: {query_id}):\n"
+ "error message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ errmsg=errmsg,
+ query_id=self.__async_query_id
+ )
+ )
+ return False, errmsg
+
+ # http://initd.org/psycopg/docs/cursor.html#cursor.description
+ # to avoid no-op
+ if cur.description is None:
+ return False, \
+ gettext('The query executed did not return any data.')
+
+ def handle_null_values(results, replace_nulls_with):
+ """
+ This function is used to replace null values with the given string
+
+ :param results:
+ :param replace_nulls_with: null values will be replaced by this
+ string.
+ :return: modified result
+ """
+
+ temp_results = []
+ for row in results:
+ res = dict()
+ for k, v in row.items():
+ if v is None:
+ res[k] = replace_nulls_with
+ else:
+ res[k] = v
+ temp_results.append(res)
+ results = temp_results
+
+ return results
+
+ def gen(conn_obj, trans_obj, quote='strings', quote_char="'",
+ field_separator=',', replace_nulls_with=None):
+
+ cur.scroll(0, mode='absolute')
+ results = cur.fetchmany(records)
+ if not results:
+ yield gettext('The query executed did not return any data.')
+ return
+
+ header = []
+ json_columns = []
+
+ for c in cur.ordered_description():
+ # This is to handle the case in which column name is non-ascii
+ column_name = c.to_dict()['name']
+ header.append(column_name)
+ if c.to_dict()['type_code'] in ALL_JSON_TYPES:
+ json_columns.append(column_name)
+
+ res_io = StringIO()
+
+ if quote == 'strings':
+ quote = csv.QUOTE_NONNUMERIC
+ elif quote == 'all':
+ quote = csv.QUOTE_ALL
+ else:
+ quote = csv.QUOTE_NONE
+
+ csv_writer = csv.DictWriter(
+ res_io, fieldnames=header, delimiter=field_separator,
+ quoting=quote,
+ quotechar=quote_char,
+ replace_nulls_with=replace_nulls_with
+ )
+
+ csv_writer.writeheader()
+ # Replace the null values with given string if configured.
+ if replace_nulls_with is not None:
+ results = handle_null_values(results, replace_nulls_with)
+ csv_writer.writerows(results)
+
+ yield res_io.getvalue()
+
+ while True:
+ results = cur.fetchmany(records)
+
+ if not results:
+ break
+ res_io = StringIO()
+
+ csv_writer = csv.DictWriter(
+ res_io, fieldnames=header, delimiter=field_separator,
+ quoting=quote,
+ quotechar=quote_char,
+ replace_nulls_with=replace_nulls_with
+ )
+
+ # Replace the null values with given string if configured.
+ if replace_nulls_with is not None:
+ results = handle_null_values(results, replace_nulls_with)
+ csv_writer.writerows(results)
+ yield res_io.getvalue()
+
+ try:
+ # try to reset the cursor scroll back to where it was,
+ # bypass error, if cannot scroll back
+ rows_fetched_from = trans_obj.get_fetched_row_cnt()
+ cur.scroll(rows_fetched_from, mode='absolute')
+ except psycopg.Error:
+ # bypassing the error as cursor tried to scroll on the
+ # specified position, but end of records found
+ pass
+ except Exception:
+ pass
+
+ # Registering back type caster for large size data types to string
+ # which was unregistered at starting
+ register_string_typecasters(self.conn)
+ return True, gen, self
+
+ def execute_scalar(self, query, params=None,
+ formatted_exception_msg=False):
+ status, cur = self.__cursor()
+ self.row_count = 0
+
+ if not status:
+ return False, str(cur)
+ query_id = random.randint(1, 9999999)
+
+ current_app.logger.log(
+ 25,
+ "Execute (scalar) by {pga_user} on "
+ "{db_user}@{db_host}/{db_name} #{server_id} - "
+ "{conn_id} (Query-id: {query_id}):\n{query}".format(
+ pga_user=current_user.email,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query,
+ query_id=query_id
+ )
+ )
+ try:
+ self.__internal_blocking_execute(cur, query, params)
+ except psycopg.Error as pe:
+ cur.close()
+ if not self.connected():
+ if self.auto_reconnect and not self.reconnecting:
+ return self.__attempt_execution_reconnect(
+ self.execute_scalar, query, params,
+ formatted_exception_msg
+ )
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "Failed to execute query (execute_scalar) for the server "
+ "#{server_id} - {conn_id} (Query-id: {query_id}):\n"
+ "Error Message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ errmsg=errmsg,
+ query_id=query_id
+ )
+ )
+ return False, errmsg
+ except Exception:
+ print("EXCEPTION.....")
+
+ self.row_count = cur.get_rowcount()
+ if cur.get_rowcount() > 0:
+ res = cur.fetchone()
+ if len(res) > 0:
+ return True, res[0]
+
+ return True, None
+
+ def execute_async(self, query, params=None, formatted_exception_msg=True):
+ """
+ This function executes the given query asynchronously and returns
+ result.
+
+ Args:
+ query: SQL query to run.
+ params: extra parameters to the function
+ formatted_exception_msg: if True then function return the
+ formatted exception message
+ """
+
+ # Convert the params based on python_encoding
+ params = self.escape_params_sqlascii(params)
+
+ self.__async_cursor = None
+ status, cur = self.__cursor(scrollable=True)
+
+ if not status:
+ return False, str(cur)
+ query_id = random.randint(1, 9999999)
+
+ encoding = self.python_encoding
+
+ query = query.encode(encoding)
+
+ self.__async_cursor = cur
+ self.__async_query_id = query_id
+
+ current_app.logger.log(
+ 25,
+ "Execute (async) by {pga_user} on {db_user}@{db_host}/{db_name} "
+ "#{server_id} - {conn_id} (Query-id: "
+ "{query_id}):\n{query}".format(
+ pga_user=current_user.username,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query.decode(encoding),
+ query_id=query_id
+ )
+ )
+
+ try:
+ self.__notices = []
+ self.__notifies = []
+ self.execution_aborted = False
+ cur.execute(query, params)
+ except psycopg.Error as pe:
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "Failed to execute query (execute_async) for the server "
+ "#{server_id} - {conn_id}(Query-id: {query_id}):\n"
+ "Error Message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ errmsg=errmsg,
+ query_id=query_id
+ )
+ )
+
+ if self.is_disconnected(pe):
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+ return False, errmsg
+
+ return True, None
+
+ def execute_void(self, query, params=None, formatted_exception_msg=False):
+ """
+ This function executes the given query with no result.
+
+ Args:
+ query: SQL query to run.
+ params: extra parameters to the function
+ formatted_exception_msg: if True then function return the
+ formatted exception message
+ """
+ status, cur = self.__cursor()
+
+ if not status:
+ return False, str(cur)
+ query_id = random.randint(1, 9999999)
+
+ current_app.logger.log(
+ 25,
+ "Execute (void) by {pga_user} on "
+ "{db_user}@{db_host}/{db_name} #{server_id} - "
+ "{conn_id} (Query-id: {query_id}):\n{query}".format(
+ pga_user=current_user.email,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query,
+ query_id=query_id
+ )
+ )
+
+ try:
+ self.__internal_blocking_execute(cur, query, params)
+ except psycopg.Error as pe:
+ cur.close()
+ if not self.connected():
+ if self.auto_reconnect and not self.reconnecting:
+ return self.__attempt_execution_reconnect(
+ self.execute_void, query, params,
+ formatted_exception_msg
+ )
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "Failed to execute query (execute_void) for the server "
+ "#{server_id} - {conn_id}(Query-id: {query_id}):\n"
+ "Error Message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ errmsg=errmsg,
+ query_id=query_id
+ )
+ )
+ return False, errmsg
+
+ return True, None
+
+ def __attempt_execution_reconnect(self, fn, *args, **kwargs):
+ self.reconnecting = True
+ setattr(g, self.ARGS_STR.format(
+ self.manager.sid,
+ self.conn_id.encode('utf-8')
+ ), None)
+ try:
+ status, res = self.connect()
+ if status:
+ if fn:
+ status, res = fn(*args, **kwargs)
+ self.reconnecting = False
+ return status, res
+ except Exception as e:
+ current_app.logger.exception(e)
+ self.reconnecting = False
+
+ current_app.logger.warning(
+ "Failed to reconnect the database server "
+ "(Server #{server_id}, Connection #{conn_id})".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id
+ )
+ )
+ self.reconnecting = False
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+
+ def execute_2darray(self, query, params=None,
+ formatted_exception_msg=False):
+ status, cur = self.__cursor()
+ self.row_count = 0
+
+ if not status:
+ return False, str(cur)
+
+ query_id = random.randint(1, 9999999)
+ current_app.logger.log(
+ 25,
+ "Execute (2darray) by {pga_user} on "
+ "{db_user}@{db_host}/{db_name} #{server_id} - "
+ "{conn_id} (Query-id: {query_id}):\n{query}".format(
+ pga_user=current_user.email,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query,
+ query_id=query_id
+ )
+ )
+ try:
+ self.__internal_blocking_execute(cur, query, params)
+ except psycopg.Error as pe:
+ cur.close()
+ if not self.connected() and self.auto_reconnect and \
+ not self.reconnecting:
+ return self.__attempt_execution_reconnect(
+ self.execute_2darray, query, params,
+ formatted_exception_msg
+ )
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "Failed to execute query (execute_2darray) for the server "
+ "#{server_id} - {conn_id} (Query-id: {query_id}):\n"
+ "Error Message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ errmsg=errmsg,
+ query_id=query_id
+ )
+ )
+ return False, errmsg
+
+ # Get Resultset Column Name, Type and size
+ columns = cur.description and [
+ desc.to_dict() for desc in cur.ordered_description()
+ ] or []
+
+ rows = []
+ self.row_count = cur.get_rowcount()
+ if cur.get_rowcount() > 0:
+ rows = cur.fetchall()
+
+ return True, {'columns': columns, 'rows': rows}
+
+ def execute_dict(self, query, params=None, formatted_exception_msg=False):
+ status, cur = self.__cursor()
+ self.row_count = 0
+
+ if not status:
+ return False, str(cur)
+ query_id = random.randint(1, 9999999)
+ current_app.logger.log(
+ 25,
+ "Execute (dict) by {pga_user} on "
+ "{db_user}@{db_host}/{db_name} #{server_id} - "
+ "{conn_id} (Query-id: {query_id}):\n{query}".format(
+ pga_user=current_user.email,
+ db_user=self.conn.info.user,
+ db_host=self.conn.info.host,
+ db_name=self.conn.info.dbname,
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query=query,
+ query_id=query_id
+ )
+ )
+ try:
+ self.__internal_blocking_execute(cur, query, params)
+ except psycopg.Error as pe:
+ cur.close()
+ if not self.connected():
+ if self.auto_reconnect and not self.reconnecting:
+ return self.__attempt_execution_reconnect(
+ self.execute_dict, query, params,
+ formatted_exception_msg
+ )
+ raise ConnectionLost(
+ self.manager.sid,
+ self.db,
+ None if self.conn_id[0:3] == 'DB:' else self.conn_id[5:]
+ )
+ errmsg = self._formatted_exception_msg(pe, formatted_exception_msg)
+ current_app.logger.error(
+ "Failed to execute query (execute_dict) for the server "
+ "#{server_id}- {conn_id} (Query-id: {query_id}):\n"
+ "Error Message:{errmsg}".format(
+ server_id=self.manager.sid,
+ conn_id=self.conn_id,
+ query_id=query_id,
+ errmsg=errmsg
+ )
+ )
+ return False, errmsg
+
+ # Get Resultset Column Name, Type and size
+ columns = cur.description and [
+ desc.to_dict() for desc in cur.ordered_description()
+ ] or []
+
+ rows = []
+ self.row_count = cur.get_rowcount()
+
+ if cur.get_rowcount() > 0:
+ rows = cur.fetchall()
+
+ return True, {'columns': columns, 'rows': rows}
+
+ def async_fetchmany_2darray(self, records=2000,
+ formatted_exception_msg=False):
+ """
+ User should poll and check if status is ASYNC_OK before calling this
+ function
+ Args:
+ records: no of records to fetch. use -1 to fetchall.
+ formatted_exception_msg:
+ for_download: if True, will fetch all records and reset the cursor
+
+ Returns:
+
+ """
+ cur = self.__async_cursor
+ if not cur:
+ return False, self.CURSOR_NOT_FOUND
+
+ if self.conn.pgconn.is_busy():
+ return False, gettext(
+ "Asynchronous query execution/operation underway."
+ )
+
+ if self.row_count > 0:
+ result = []
+ # For DDL operation, we may not have result.
+ #
+ # Because - there is not direct way to differentiate DML and
+ # DDL operations, we need to rely on exception to figure
+ # that out at the moment.
+ try:
+ if records == -1:
+ res = cur.fetchall()
+ else:
+ res = cur.fetchmany(records)
+ for row in res:
+ new_row = []
+ for col in self.column_info:
+ new_row.append(row[col['name']])
+ result.append(new_row)
+ except psycopg.ProgrammingError:
+ result = None
+ else:
+ # User performed operation which dose not produce record/s as
+ # result.
+ # for eg. DDL operations.
+ return True, None
+
+ return True, result
+
+ def connected(self):
+ if self.conn:
+ if not self.conn.closed:
+ return True
+ self.conn = None
+ return False
+
+ def _decrypt_password(self, manager):
+ """
+ Decrypt password
+ :param manager: Manager for get password.
+ :return:
+ """
+ password = getattr(manager, 'password', None)
+ if password:
+ # Fetch Logged in User Details.
+ user = User.query.filter_by(id=current_user.id).first()
+
+ if user is None:
+ return False, self.UNAUTHORIZED_REQUEST, password
+
+ crypt_key_present, crypt_key = get_crypt_key()
+ if not crypt_key_present:
+ return False, crypt_key, password
+
+ password = decrypt(password, crypt_key).decode()
+ return True, '', password
+
+ def reset(self):
+ if self.conn and self.conn.closed:
+ self.conn = None
+ pg_conn = None
+ manager = self.manager
+
+ is_return, return_value, password = self._decrypt_password(manager)
+ if is_return:
+ return False, return_value
+
+ try:
+ with ConnectionLocker(manager.kerberos_conn):
+ pg_conn = psycopg.connect(
+ host=manager.local_bind_host if manager.use_ssh_tunnel
+ else manager.host,
+ hostaddr=manager.local_bind_host if manager.use_ssh_tunnel
+ else manager.hostaddr,
+ port=manager.local_bind_port if manager.use_ssh_tunnel
+ else manager.port,
+ dbname=self.db,
+ user=manager.user,
+ password=password,
+ passfile=get_complete_file_path(manager.passfile),
+ sslmode=manager.ssl_mode,
+ sslcert=get_complete_file_path(manager.sslcert),
+ sslkey=get_complete_file_path(manager.sslkey),
+ sslrootcert=get_complete_file_path(manager.sslrootcert),
+ sslcrl=get_complete_file_path(manager.sslcrl),
+ sslcompression=True if manager.sslcompression else False,
+ service=manager.service,
+ connect_timeout=manager.connect_timeout,
+ cursor_factory=DictCursor
+ )
+
+ except psycopg.Error as e:
+ if hasattr(e, 'pgerror'):
+ msg = e.pgerror
+ elif hasattr(e, 'message'):
+ msg = e.message
+ elif e.diag.message_detail:
+ msg = e.diag.message_detail
+ else:
+ msg = str(e)
+
+ current_app.logger.error(
+ gettext(
+ """
+Failed to reset the connection to the server due to following error:
+{0}"""
+ ).Format(msg)
+ )
+ return False, msg
+
+ pg_conn.notices = deque([], self.ASYNC_NOTICE_MAXLENGTH)
+ self.conn = pg_conn
+ self.__backend_pid = pg_conn.info.backend_pid
+
+ return True, None
+
+ def transaction_status(self):
+ if self.conn:
+ return self.conn.info.transaction_status
+ return None
+
+ def ping(self):
+ return self.execute_scalar('SELECT 1')
+
+ def _release(self):
+ if self.wasConnected:
+ if self.conn:
+ if self.async_ == 0:
+ self.conn.close()
+ elif self.async_ == 1:
+ self._close_async()
+ self.conn = None
+ self.password = None
+ self.wasConnected = False
+
+ def _close_async(self):
+ async def _close_conn(conn):
+ if conn:
+ await conn.close()
+ asyncio.run(_close_conn(self.conn))
+
+ def _wait(self, conn):
+ pass
+
+ def _wait_timeout(self, conn):
+ pass
+
+ def poll(self, formatted_exception_msg=False, no_result=False):
+ cur = self.__async_cursor
+
+ if self.conn.pgconn.is_busy():
+ status = 3
+ else:
+ status = 1
+
+ if not cur:
+ return False, self.CURSOR_NOT_FOUND
+
+ result = None
+ self.row_count = 0
+ self.column_info = None
+
+ current_app.logger.log(
+ 25,
+ "Polling result for (Query-id: {query_id})".format(
+ query_id=self.__async_query_id
+ )
+ )
+ if not self.conn.pgconn.is_busy():
+ if cur.description is not None:
+ self.column_info = [
+ desc.to_dict() for desc in cur.ordered_description()
+ ]
+
+ pos = 0
+ for col in self.column_info:
+ col['pos'] = pos
+ pos += 1
+
+ self.row_count = cur.get_rowcount()
+ if not no_result and cur.get_rowcount() > 0:
+ result = []
+ # For DDL operation, we may not have result.
+ #
+ # Because - there is not direct way to differentiate DML
+ # and DDL operations, we need to rely on exception to
+ # figure that out at the moment.
+ try:
+ result = cur.fetchalltupple()
+
+ except psycopg.ProgrammingError:
+ result = None
+ except psycopg.Error:
+ result = None
+
+ return status, result
+
+ def status_message(self):
+ """
+ This function will return the status message returned by the last
+ command executed on the server.
+ """
+ cur = self.__async_cursor
+ if not cur:
+ return self.CURSOR_NOT_FOUND
+
+ current_app.logger.log(
+ 25,
+ "Status message for (Query-id: {query_id})".format(
+ query_id=self.__async_query_id
+ )
+ )
+
+ return cur.statusmessage
+
+ def rows_affected(self):
+ """
+ This function will return the no of rows affected by the last command
+ executed on the server.
+ """
+
+ return self.row_count
+
+ def get_column_info(self):
+ """
+ This function will returns list of columns for last async sql command
+ executed on the server.
+ """
+
+ return self.column_info
+
+ def cancel_transaction(self, conn_id, did=None):
+ """
+ This function is used to cancel the running transaction
+ of the given connection id and database id using
+ PostgreSQL's pg_cancel_backend.
+
+ Args:
+ conn_id: Connection id
+ did: Database id (optional)
+ """
+ cancel_conn = self.manager.connection(did=did, conn_id=conn_id)
+ query = """SELECT pg_cancel_backend({0});""".format(
+ cancel_conn.__backend_pid)
+
+ status = True
+ msg = ''
+
+ # if backend pid is same then create a new connection
+ # to cancel the query and release it.
+ if cancel_conn.__backend_pid == self.__backend_pid:
+ password = getattr(self.manager, 'password', None)
+ if password:
+ # Fetch Logged in User Details.
+ user = User.query.filter_by(id=current_user.id).first()
+ if user is None:
+ return False, self.UNAUTHORIZED_REQUEST
+
+ crypt_key_present, crypt_key = get_crypt_key()
+ if not crypt_key_present:
+ return False, crypt_key
+
+ password = decrypt(password, crypt_key)\
+ .decode()
+
+ try:
+ with ConnectionLocker(self.manager.kerberos_conn):
+ pg_conn = psycopg.connect(
+ host=self.manager.local_bind_host if
+ self.manager.use_ssh_tunnel else self.manager.host,
+ hostaddr=self.manager.local_bind_host if
+ self.manager.use_ssh_tunnel else
+ self.manager.hostaddr,
+ port=self.manager.local_bind_port if
+ self.manager.use_ssh_tunnel else self.manager.port,
+ dbname=self.db,
+ user=self.manager.user,
+ password=password,
+ passfile=get_complete_file_path(self.manager.passfile),
+ sslmode=self.manager.ssl_mode,
+ sslcert=get_complete_file_path(self.manager.sslcert),
+ sslkey=get_complete_file_path(self.manager.sslkey),
+ sslrootcert=get_complete_file_path(
+ self.manager.sslrootcert
+ ),
+ sslcrl=get_complete_file_path(self.manager.sslcrl),
+ sslcompression=True if self.manager.sslcompression
+ else False,
+ service=self.manager.service,
+ connect_timeout=self.manager.connect_timeout,
+ cursor_factory=DictCursor
+ )
+
+ # Get the cursor and run the query
+ cur = pg_conn.cursor()
+ cur.execute(query)
+
+ # Close the connection
+ pg_conn.close()
+ pg_conn = None
+
+ except psycopg.Error as e:
+ status = False
+ if hasattr(e, 'pgerror'):
+ msg = e.pgerror
+ elif e.diag.message_detail:
+ msg = e.diag.message_detail
+ else:
+ msg = str(e)
+ return status, msg
+ else:
+ if self.connected():
+ status, msg = self.execute_void(query)
+
+ if status:
+ cancel_conn.execution_aborted = True
+ else:
+ status = False
+ msg = gettext("Not connected to the database server.")
+
+ return status, msg
+
+ def messages(self):
+ """
+ Returns the list of the messages/notices send from the database server.
+ """
+ resp = []
+
+ if self.__notices is not None:
+ while self.__notices:
+ resp.append(self.__notices.pop(0))
+
+ if self.__notifies is None:
+ return resp
+
+ for notify in self.__notifies:
+ if notify.payload is not None and notify.payload != '':
+ notify_msg = gettext(
+ "Asynchronous notification \"{0}\" with payload \"{1}\" "
+ "received from server process with PID {2}\n"
+ ).format(notify.channel, notify.payload, notify.pid)
+
+ else:
+ notify_msg = gettext(
+ "Asynchronous notification \"{0}\" received from "
+ "server process with PID {1}\n"
+ ).format(notify.channel, notify.pid)
+ resp.append(notify_msg)
+
+ return resp
+
+ def _formatted_exception_msg(self, exception_obj, formatted_msg):
+ """
+ This method is used to parse the psycopg.Error object and returns the
+ formatted error message if flag is set to true else return
+ normal error message.
+
+ Args:
+ exception_obj: exception object
+ formatted_msg: if True then function return the formatted exception
+ message
+
+ """
+ if hasattr(exception_obj, 'pgerror'):
+ errmsg = exception_obj.pgerror
+ elif hasattr(exception_obj, 'diag') and \
+ hasattr(exception_obj.diag, 'message_detail') and\
+ exception_obj.diag.message_detail is not None:
+ errmsg = exception_obj.diag.message_detail + \
+ exception_obj.diag.message_primary
+ else:
+ errmsg = str(exception_obj)
+
+ # if formatted_msg is false then return from the function
+ if not formatted_msg:
+ notices = self.get_notices()
+ return errmsg if notices == '' else notices + '\n' + errmsg
+
+ # Do not append if error starts with `ERROR:` as most pg related
+ # error starts with `ERROR:`
+ if not errmsg.startswith('ERROR:'):
+ errmsg = gettext('ERROR: ') + errmsg + '\n\n'
+
+ if exception_obj.diag.severity is not None \
+ and exception_obj.diag.message_primary is not None:
+ ex_diag_message = "{0}: {1}".format(
+ exception_obj.diag.severity,
+ exception_obj.diag.message_primary
+ )
+ # If both errors are different then only append it
+ if errmsg and ex_diag_message and \
+ ex_diag_message.strip().strip('\n').lower() not in \
+ errmsg.strip().strip('\n').lower():
+ errmsg += ex_diag_message
+ elif exception_obj.diag.message_primary is not None:
+ message_primary = exception_obj.diag.message_primary
+ if message_primary.lower() not in errmsg.lower():
+ errmsg += message_primary
+
+ if exception_obj.diag.sqlstate is not None:
+ if not errmsg.endswith('\n'):
+ errmsg += '\n'
+ errmsg += gettext('SQL state: ')
+ errmsg += exception_obj.diag.sqlstate
+
+ if exception_obj.diag.message_detail is not None and \
+ 'Detail:'.lower() not in errmsg.lower():
+ if not errmsg.endswith('\n'):
+ errmsg += '\n'
+ errmsg += gettext('Detail: ')
+ errmsg += exception_obj.diag.message_detail
+
+ if exception_obj.diag.message_hint is not None and \
+ 'Hint:'.lower() not in errmsg.lower():
+ if not errmsg.endswith('\n'):
+ errmsg += '\n'
+ errmsg += gettext('Hint: ')
+ errmsg += exception_obj.diag.message_hint
+
+ if exception_obj.diag.statement_position is not None and \
+ 'Character:'.lower() not in errmsg.lower():
+ if not errmsg.endswith('\n'):
+ errmsg += '\n'
+ errmsg += gettext('Character: ')
+ errmsg += exception_obj.diag.statement_position
+
+ if exception_obj.diag.context is not None and \
+ 'Context:'.lower() not in errmsg.lower():
+ if not errmsg.endswith('\n'):
+ errmsg += '\n'
+ errmsg += gettext('Context: ')
+ errmsg += exception_obj.diag.context
+
+ notices = self.get_notices()
+ return errmsg if notices == '' else notices + '\n' + errmsg
+
+ #####
+ # As per issue reported on pgsycopg2 github repository link is shared below
+ # conn.closed is not reliable enough to identify the disconnection from the
+ # database server for some unknown reasons.
+ #
+ # (https://github.com/psycopg/psycopg2/issues/263)
+ #
+ # In order to resolve the issue, sqlalchamey follows the below logic to
+ # identify the disconnection. It relies on exception message to identify
+ # the error.
+ #
+ # Reference (MIT license):
+ # https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/dialects/postgresql/psycopg2.py
+ #
+ def is_disconnected(self, err):
+ if not self.conn.closed:
+ # checks based on strings. in the case that .closed
+ # didn't cut it, fall back onto these.
+ str_e = str(err).partition("\n")[0]
+ for msg in [
+ # these error messages from libpq: interfaces/libpq/fe-misc.c
+ # and interfaces/libpq/fe-secure.c.
+ 'terminating connection',
+ 'closed the connection',
+ 'connection not open',
+ 'could not receive data from server',
+ 'could not send data to server',
+ # psycopg2 client errors, psycopg2/conenction.h,
+ # psycopg2/cursor.h
+ 'connection already closed',
+ 'cursor already closed',
+ # not sure where this path is originally from, it may
+ # be obsolete. It really says "losed", not "closed".
+ 'losed the connection unexpectedly',
+ # these can occur in newer SSL
+ 'connection has been closed unexpectedly',
+ 'SSL SYSCALL error: Bad file descriptor',
+ 'SSL SYSCALL error: EOF detected',
+ ]:
+ idx = str_e.find(msg)
+ if idx >= 0 and '"' not in str_e[:idx]:
+ return True
+
+ return False
+ return True
+
+ def check_notifies(self, n=None):
+ """
+ Check for the notify messages by polling the connection or after
+ execute is there in notifies.
+ """
+
+ if n:
+ if self.__notifies is None:
+ self.__notifies = []
+ self.__notifies.append(n)
+
+ def get_notifies(self):
+ """
+ This function will returns list of notifies received from database
+ server.
+ """
+ notifies = None
+ # Convert list of Notify objects into list of Dict.
+ if self.__notifies is not None and len(self.__notifies) > 0:
+ notifies = [{'recorded_time': str(datetime.datetime.now()),
+ 'channel': notify.channel,
+ 'payload': notify.payload,
+ 'pid': notify.pid
+ } for notify in self.__notifies
+ ]
+ self.__notifies = None
+ return notifies
+
+ def get_notices(self, diag=None):
+ """
+ This function will returns the notices as string.
+ :return:
+ """
+ notices = ''
+ # Check for notices.
+ if diag and hasattr(diag, 'message_primary'):
+ if self.__notices is None:
+ self.__notices = []
+ self.__notices.append(f"{diag.severity}:"
+ f" {diag.message_primary}\n")
+
+ if diag is None:
+ while self.__notices:
+ notices += self.__notices.pop(0)
+
+ return notices
+
+ def pq_encrypt_password_conn(self, password, user):
+ """
+ This function will return the encrypted password for database server
+ :param password: password to be encrypted
+ :param user: user of the database server
+ :return:
+ """
+ enc_password = None
+ if self.connected():
+ status, enc_algorithm = \
+ self.execute_scalar("SHOW password_encryption")
+ if status:
+ encoding = self.conn.info.encoding
+ enc_password = self.conn.pgconn.encrypt_password(
+ password.encode(encoding), user.encode(encoding),
+ enc_algorithm.encode(encoding)
+ ).decode()
+
+ return enc_password
+
+ def mogrify(self, query, parameters):
+ """
+ This function will return the sql query after parameters binding
+ :param query: sql query before parameters (variables) binding
+ :param parameters: query parameters / variables
+ :return:
+ """
+ status, cursor = self.__cursor()
+ if not status:
+ return None
+ else:
+
+ if parameters:
+ return psycopg.sql.SQL(query.format(parameters)
+ ).as_string(self.conn)
+ else:
+ return query
diff --git a/web/pgadmin/utils/driver/psycopg3/cursor.py b/web/pgadmin/utils/driver/psycopg3/cursor.py
new file mode 100644
index 000000000..c73774d9c
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/cursor.py
@@ -0,0 +1,372 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""
+Implementation of an extended cursor, which returns ordered dictionary when
+fetching results from it, and also takes care of the duplicate column name in
+result.
+"""
+
+import asyncio
+from collections import OrderedDict
+import psycopg
+from psycopg import Cursor as _cursor, AsyncCursor as _async_cursor
+from typing import Any, Sequence
+from psycopg.rows import dict_row, tuple_row
+from psycopg._encodings import py_codecs as encodings
+
+
+from .encoding import configure_driver_encodings
+
+configure_driver_encodings(encodings)
+
+
+class _WrapperColumn(object):
+ """
+ class _WrapperColumn(object)
+
+ A wrapper class, which wraps the individual description column object,
+ to allow identify the duplicate column name, created by PostgreSQL database
+ server implicitly during query execution.
+
+ Methods:
+ -------
+ * __init__(_col, _name)
+ - Initialize the wrapper around the description column object, which will
+ present the dummy name when available instead of the duplicate name.
+
+ * __getattribute__(name)
+ - Get attributes from the original column description (which is a named
+ tuple) except for few of the attributes of this object (i.e. orig_col,
+ dummy_name, __class__, to_dict) are part of this object.
+
+ * __getitem__(idx)
+ - Get the item from the original object except for the 0th index item,
+ which is for 'name'.
+
+ * __setitem__(idx, value)
+ * __delitem__(idx)
+ - Override them to make the operations on original object.
+
+ * to_dict()
+ - Converts original objects data as OrderedDict (except the name will same
+ as dummy name (if available), and one more parameter as 'display_name'.
+ """
+
+ def __init__(self, _col, _name):
+ """Initializer for _WrapperColumn"""
+ self.orig_col = _col
+ self.dummy_name = _name
+
+ def __getattribute__(self, name):
+ """Getting the attributes from the original object. (except few)"""
+ if (name == 'orig_col' or name == 'dummy_name' or
+ name == '__class__' or name == 'to_dict'):
+ return object.__getattribute__(self, name)
+ elif name == 'name':
+ res = object.__getattribute__(self, 'dummy_name')
+ if res is not None:
+ return res
+ return self.orig_col.__getattribute__(name)
+
+ def __getitem__(self, idx):
+ """Overrides __getitem__ to fetch item from original object"""
+ if idx == 0 and self.dummy_name is not None:
+ return self.dummy_name
+ return self.orig_col.__getitem__(idx)
+
+ def __setitem__(self, *args, **kwargs):
+ """Orverrides __setitem__ to do the operations on original object."""
+ return self.orig_col.__setitem__(*args, **kwargs)
+
+ def __delitem__(self, *args, **kwargs):
+ """Orverrides __delitem__ to do the operations on original object."""
+ return self.orig_col.__delitem__(*args, **kwargs)
+
+ def to_dict(self):
+ """
+ Generates an OrderedDict from the fields of the original objects
+ with avoiding the duplicate name.
+ """
+
+ ores = OrderedDict()
+ ores['name'] = self.orig_col.name
+ ores['type_code'] = self.orig_col.type_code
+ ores['display_size'] = self.orig_col.display_size
+ ores['internal_size'] = self.orig_col.internal_size
+ ores['precision'] = self.orig_col.precision
+ ores['scale'] = self.orig_col.scale
+ ores['null_ok'] = self.orig_col.null_ok
+ ores['table_oid'] = self.orig_col.table_oid
+ ores['table_column'] = self.orig_col.table_column
+
+ name = ores['name']
+ if self.dummy_name:
+ ores['name'] = self.dummy_name
+ ores['display_name'] = name
+ return ores
+
+
+class DictCursor(_cursor):
+ """
+ DictCursor
+
+ A class to generate the dictionary from the tuple, and also takes care of
+ the duplicate column name in result description.
+
+ Methods:
+ -------
+ * __init__()
+ - Initialize the cursor object
+
+ * _dict_tuple(tuple)
+ - Generate a dictionary object from a tuple, based on the column
+ description.
+
+ * _ordered_description()
+ - Generates the _WrapperColumn object from the description column, and
+ identifies duplicate column name
+ """
+
+ def __init__(self, *args, **kwargs):
+ self._odt_desc = None
+ _cursor.__init__(self, *args, row_factory=dict_row)
+
+ def _dict_tuple(self, tup):
+ """
+ Transform the tuple into a dictionary object.
+ """
+ if self._odt_desc is None:
+ self._ordered_description()
+ return dict((k[0], v) for k, v in zip(self._odt_desc, tup))
+
+ def _ordered_description(self):
+ """
+ Transform the regular description to wrapper object, which handles
+ duplicate column name.
+ """
+ self._odt_desc = _cursor.__getattribute__(self, 'description')
+ pgresult = _cursor.__getattribute__(self, 'pgresult')
+ desc = self._odt_desc
+
+ if desc is None or len(desc) == 0:
+ return
+
+ res = list()
+ od = dict((d[0], 0) for d in desc)
+ col_count = 0
+ for d in desc:
+ dummy = None
+ idx = od[d.name]
+ if idx == 0:
+ od[d.name] = 1
+ else:
+ name = d.name
+ while name in od:
+ idx += 1
+ name = ("%s-%s" % (d.name, idx))
+ od[d.name] = idx
+ dummy = name
+ if pgresult:
+ d.table_oid = pgresult.ftable(col_count)
+ d.table_column = pgresult.ftablecol(col_count)
+ res.append(_WrapperColumn(d, dummy))
+ self._odt_desc = tuple(res)
+
+ def ordered_description(self):
+ """
+ Use this to fetch the description
+ """
+ if self._odt_desc is None:
+ self._ordered_description()
+ return self._odt_desc
+
+ def execute(self, query, params=None):
+ """
+ Execute function
+ """
+ self._odt_desc = None
+ if params is not None and len(params) == 0:
+ params = None
+
+ return _cursor.execute(self, query, params)
+
+ def fetchone(self):
+ """
+ Execute function
+ """
+ self.row_factory = tuple_row
+ res = _cursor.fetchone(self)
+ self.row_factory = dict_row
+ return res
+
+ def get_rowcount(self):
+ return self.pgresult.ntuples
+
+
+class AsyncDictCursor(_async_cursor):
+
+ def __init__(self, *args, **kwargs):
+ self._odt_desc = None
+ _async_cursor.__init__(self, *args, row_factory=dict_row)
+
+ def _dict_tuple(self, tup):
+ """
+ Transform the tuple into a dictionary object.
+ """
+ if self._odt_desc is None:
+ self._ordered_description()
+ return dict((k[0], v) for k, v in zip(self._odt_desc, tup))
+
+ def _ordered_description(self):
+ """
+ Transform the regular description to wrapper object, which handles
+ duplicate column name.
+ """
+ self._odt_desc = _async_cursor.__getattribute__(self, 'description')
+ pgresult = _async_cursor.__getattribute__(self, 'pgresult')
+ desc = self._odt_desc
+
+ if desc is None or len(desc) == 0:
+ return
+
+ res = list()
+ od = dict((d[0], 0) for d in desc)
+ col_count = 0
+ for d in desc:
+ dummy = None
+ idx = od[d.name]
+ if idx == 0:
+ od[d.name] = 1
+ else:
+ name = d.name
+ while name in od:
+ idx += 1
+ name = ("%s-%s" % (d.name, idx))
+ od[d.name] = idx
+ dummy = name
+ if pgresult:
+ d.table_oid = pgresult.ftable(col_count)
+ d.table_column = pgresult.ftablecol(col_count)
+ col_count += 1
+
+ res.append(_WrapperColumn(d, dummy))
+ self._odt_desc = tuple(res)
+
+ def ordered_description(self):
+ """
+ Use this to fetch the description
+ """
+ if self._odt_desc is None:
+ self._ordered_description()
+ return self._odt_desc
+
+ def execute(self, query, params=None):
+ """
+ Execute function
+ """
+ return asyncio.run(self._execute(query, params))
+
+ async def _execute(self, query, params=None):
+ """
+ Execute function
+ """
+ self._odt_desc = None
+ if params is not None and len(params) == 0:
+ params = None
+
+ return await _async_cursor.execute(self, query, params)
+
+ def executemany(self, query, params=None):
+ """
+ Execute many function of regular cursor.
+ """
+ self._odt_desc = None
+ return _async_cursor.executemany(self, query, params)
+
+ def fetchmany(self, size=None):
+ """
+ Fetch many tuples as ordered dictionary list.
+ """
+ return asyncio.run(self._fetchmany(size))
+
+ async def _fetchmany(self, size=None):
+ """
+ Fetch many tuples as ordered dictionary list.
+ """
+ return await _async_cursor.fetchmany(self, size)
+
+ async def _fetchall(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return await _async_cursor.fetchall(self)
+
+ def fetchall(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return asyncio.run(self._fetchall())
+
+ async def _fetchalltupple(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return await _async_cursor.fetchall(self)
+
+ def fetchalltupple(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ self.row_factory = tuple_row
+ res = asyncio.run(self._fetchalltupple())
+ self.row_factory = dict_row
+ return res
+
+ async def _fetchone(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return await _async_cursor.fetchone(self)
+
+ def fetchone(self):
+ """
+ Execute function
+ """
+ self.row_factory = tuple_row
+ res = asyncio.run(self._fetchone())
+ self.row_factory = dict_row
+ return res
+
+ async def _scrollcur(self, position, mode):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return await _async_cursor.scroll(self, position, mode=mode)
+
+ def scroll(self, position, mode="absolute"):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return asyncio.run(self._scrollcur(position, mode))
+
+ def get_rowcount(self):
+ if self.pgresult:
+ return self.pgresult.ntuples
+ else:
+ return -1
+
+ async def _closecur(self):
+ """
+ Fetch all tuples as ordered dictionary list.
+ """
+ return await _async_cursor.close(self)
+
+ async def close(self):
+ return asyncio.run(self._closecur())
diff --git a/web/pgadmin/utils/driver/psycopg3/encoding.py b/web/pgadmin/utils/driver/psycopg3/encoding.py
new file mode 100644
index 000000000..35fcfcd3e
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/encoding.py
@@ -0,0 +1,58 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+# Get Postgres and Python encoding
+
+import psycopg
+
+encode_dict = {
+ 'MULE_INTERNAL': ['MULE_INTERNAL', 'raw_unicode_escape', 'unicode_escape'],
+ 'SQL_ASCII': ['SQL_ASCII', 'raw-unicode-escape', 'unicode_-escape'],
+ # EUC_TW Not availble in Python,
+ # so psycopg3 do not support it, we are on our own
+ 'EUC_TW': ['BIG5', 'big5', 'big5']
+}
+
+
+def get_encoding(key):
+ """
+ :param key: Database Encoding
+ :return:
+ [Postgres_encoding, Python_encoding, typecast_encoding] -
+ Postgres encoding, Python encoding, type cast encoding
+ """
+ #
+ # Reference: https://www.postgresql.org/docs/11/multibyte.html
+
+ postgres_encoding = psycopg._encodings.py2pgenc(key).decode()
+
+ python_encoding = psycopg._encodings._py_codecs.get(postgres_encoding,
+ 'utf-8')
+
+ return encode_dict.get(postgres_encoding.upper(),
+ [postgres_encoding,
+ python_encoding,
+ python_encoding])
+
+
+def configure_driver_encodings(encodings):
+ # Replace the python encoding for original name and renamed encodings
+ # psycopg removes the underscore in conn.encoding
+ # Setting the encodings dict value will only help for select statements
+ # because for parameterized DML, param values are converted based on
+ # python encoding of pyscopg's internal encodings dict.
+
+ for key, val in encode_dict.items():
+ postgres_encoding, python_encoding, typecast_encoding = val
+ psycopg._encodings._py_codecs[key] = python_encoding
+
+ encodings.update((k.encode(), v
+ ) for k, v in psycopg._encodings._py_codecs.items())
+ psycopg._encodings.pg_codecs = {
+ v: k.encode() for k, v in psycopg._encodings._py_codecs.items()}
diff --git a/web/pgadmin/utils/driver/psycopg3/generate_keywords.py b/web/pgadmin/utils/driver/psycopg3/generate_keywords.py
new file mode 100644
index 000000000..77e3a0957
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/generate_keywords.py
@@ -0,0 +1,63 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# This allows us to generate to keywords.py for PostgreSQL for used by
+# qtIdent and qtTypeIdent functions for scanning the keywords type.
+#
+# In order to generate keywords.py for specific version of PostgreSQL, put
+# pg_config executable in the PATH.
+#
+##########################################################################
+
+import os
+import re
+
+if __name__ == '__main__':
+ include_dir = os.popen('pg_config --includedir').read().rstrip()
+ version = os.popen('pg_config --version').read().rstrip()
+
+ keywords_file = open('keywords.py', 'w')
+
+ keywords_file.write("""##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+""")
+ keywords_file.write('# ScanKeyword function for ' + version)
+ keywords_file.write('\n\ndef ScanKeyword(key):')
+ keywords_file.write('\n keywordDict = {\n')
+
+ idx = 0
+
+ with open(include_dir + "/postgresql/server/parser/kwlist.h", "rb") as ins:
+
+ pattern = re.compile(r'"([^"]+)",\s*[^,]*\s*,\s*(.*)$')
+ keyword_types = [
+ 'UNRESERVED_KEYWORD', 'COL_NAME_KEYWORD',
+ 'TYPE_FUNC_NAME_KEYWORD', 'RESERVED_KEYWORD'
+ ]
+
+ for line in ins:
+ line = line.decode().rstrip()
+ if line[0:11] == 'PG_KEYWORD(' and line[-1] == ')':
+ match = pattern.match(line[11:-1])
+ if idx != 0:
+ keywords_file.write(", ")
+ else:
+ keywords_file.write(" ")
+ keywords_file.write(
+ '"' + match.group(1) + '": ' +
+ str(keyword_types.index(match.group(2)))
+ )
+ idx += 1
+ keywords_file.write('\n }\n')
+ keywords_file.write(
+ ' return (key in keywordDict and keywordDict[key]) or None')
diff --git a/web/pgadmin/utils/driver/psycopg3/keywords.py b/web/pgadmin/utils/driver/psycopg3/keywords.py
new file mode 100644
index 000000000..067b3d9cb
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/keywords.py
@@ -0,0 +1,432 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+# ScanKeyword function for PostgreSQL 9.5rc1
+
+
+def scan_keyword(key):
+ keywords = {
+ 'abort': 0,
+ 'absolute': 0,
+ 'access': 0,
+ 'action': 0,
+ 'add': 0,
+ 'admin': 0,
+ 'after': 0,
+ 'aggregate': 0,
+ 'all': 3,
+ 'also': 0,
+ 'alter': 0,
+ 'always': 0,
+ 'analyze': 3,
+ 'and': 3,
+ 'any': 3,
+ 'array': 3,
+ 'as': 3,
+ 'asc': 3,
+ 'assertion': 0,
+ 'assignment': 0,
+ 'asymmetric': 3,
+ 'at': 0,
+ 'attribute': 0,
+ 'authorization': 2,
+ 'backward': 0,
+ 'before': 0,
+ 'begin': 0,
+ 'between': 1,
+ 'bigint': 1,
+ 'binary': 2,
+ 'bit': 1,
+ 'boolean': 1,
+ 'both': 3,
+ 'by': 0,
+ 'cache': 0,
+ 'called': 0,
+ 'cascade': 0,
+ 'cascaded': 0,
+ 'case': 3,
+ 'cast': 3,
+ 'catalog': 0,
+ 'chain': 0,
+ 'char': 1,
+ 'character': 1,
+ 'characteristics': 0,
+ 'check': 3,
+ 'checkpoint': 0,
+ 'class': 0,
+ 'close': 0,
+ 'cluster': 0,
+ 'coalesce': 1,
+ 'collate': 3,
+ 'collation': 2,
+ 'column': 3,
+ 'comment': 0,
+ 'comments': 0,
+ 'commit': 0,
+ 'committed': 0,
+ 'concurrently': 2,
+ 'configuration': 0,
+ 'conflict': 0,
+ 'connection': 0,
+ 'constraint': 3,
+ 'constraints': 0,
+ 'content': 0,
+ 'continue': 0,
+ 'conversion': 0,
+ 'copy': 0,
+ 'cost': 0,
+ 'create': 3,
+ 'cross': 2,
+ 'csv': 0,
+ 'cube': 0,
+ 'current': 0,
+ 'current_catalog': 3,
+ 'current_date': 3,
+ 'current_role': 3,
+ 'current_schema': 2,
+ 'current_time': 3,
+ 'current_timestamp': 3,
+ 'current_user': 3,
+ 'cursor': 0,
+ 'cycle': 0,
+ 'data': 0,
+ 'database': 0,
+ 'day': 0,
+ 'deallocate': 0,
+ 'dec': 1,
+ 'decimal': 1,
+ 'declare': 0,
+ 'default': 3,
+ 'defaults': 0,
+ 'deferrable': 3,
+ 'deferred': 0,
+ 'definer': 0,
+ 'delete': 0,
+ 'delimiter': 0,
+ 'delimiters': 0,
+ 'desc': 3,
+ 'dictionary': 0,
+ 'disable': 0,
+ 'discard': 0,
+ 'distinct': 3,
+ 'do': 3,
+ 'document': 0,
+ 'domain': 0,
+ 'double': 0,
+ 'drop': 0,
+ 'each': 0,
+ 'else': 3,
+ 'enable': 0,
+ 'encoding': 0,
+ 'encrypted': 0,
+ 'end': 3,
+ 'enum': 0,
+ 'escape': 0,
+ 'event': 0,
+ 'except': 3,
+ 'exclude': 0,
+ 'excluding': 0,
+ 'exclusive': 0,
+ 'execute': 0,
+ 'exists': 1,
+ 'explain': 0,
+ 'extension': 0,
+ 'external': 0,
+ 'extract': 1,
+ 'false': 3,
+ 'family': 0,
+ 'fetch': 3,
+ 'filter': 0,
+ 'first': 0,
+ 'float': 1,
+ 'following': 0,
+ 'for': 3,
+ 'force': 0,
+ 'foreign': 3,
+ 'forward': 0,
+ 'freeze': 2,
+ 'from': 3,
+ 'full': 2,
+ 'function': 0,
+ 'functions': 0,
+ 'global': 0,
+ 'grant': 3,
+ 'granted': 0,
+ 'greatest': 1,
+ 'group': 3,
+ 'grouping': 1,
+ 'handler': 0,
+ 'having': 3,
+ 'header': 0,
+ 'hold': 0,
+ 'hour': 0,
+ 'identity': 0,
+ 'if': 0,
+ 'ilike': 2,
+ 'immediate': 0,
+ 'immutable': 0,
+ 'implicit': 0,
+ 'import': 0,
+ 'in': 3,
+ 'including': 0,
+ 'increment': 0,
+ 'index': 0,
+ 'indexes': 0,
+ 'inherit': 0,
+ 'inherits': 0,
+ 'initially': 3,
+ 'inline': 0,
+ 'inner': 2,
+ 'inout': 1,
+ 'input': 0,
+ 'insensitive': 0,
+ 'insert': 0,
+ 'instead': 0,
+ 'int': 1,
+ 'integer': 1,
+ 'intersect': 3,
+ 'interval': 1,
+ 'into': 3,
+ 'invoker': 0,
+ 'is': 2,
+ 'isnull': 2,
+ 'isolation': 0,
+ 'join': 2,
+ 'key': 0,
+ 'label': 0,
+ 'language': 0,
+ 'large': 0,
+ 'last': 0,
+ 'lateral': 3,
+ 'leading': 3,
+ 'leakproof': 0,
+ 'least': 1,
+ 'left': 2,
+ 'level': 0,
+ 'like': 2,
+ 'limit': 3,
+ 'listen': 0,
+ 'load': 0,
+ 'local': 0,
+ 'localtime': 3,
+ 'localtimestamp': 3,
+ 'location': 0,
+ 'lock': 0,
+ 'locked': 0,
+ 'logged': 0,
+ 'mapping': 0,
+ 'match': 0,
+ 'materialized': 0,
+ 'maxvalue': 0,
+ 'minute': 0,
+ 'minvalue': 0,
+ 'mode': 0,
+ 'month': 0,
+ 'move': 0,
+ 'name': 0,
+ 'names': 0,
+ 'national': 1,
+ 'natural': 2,
+ 'nchar': 1,
+ 'next': 0,
+ 'no': 0,
+ 'none': 1,
+ 'not': 3,
+ 'nothing': 0,
+ 'notify': 0,
+ 'notnull': 2,
+ 'nowait': 0,
+ 'null': 3,
+ 'nullif': 1,
+ 'nulls': 0,
+ 'numeric': 1,
+ 'object': 0,
+ 'of': 0,
+ 'off': 0,
+ 'offset': 3,
+ 'oids': 0,
+ 'on': 3,
+ 'only': 3,
+ 'operator': 0,
+ 'option': 0,
+ 'options': 0,
+ 'or': 3,
+ 'order': 3,
+ 'ordinality': 0,
+ 'out': 1,
+ 'outer': 2,
+ 'over': 0,
+ 'overlaps': 2,
+ 'overlay': 1,
+ 'owned': 0,
+ 'owner': 0,
+ 'parser': 0,
+ 'partial': 0,
+ 'partition': 0,
+ 'passing': 0,
+ 'password': 0,
+ 'placing': 3,
+ 'plans': 0,
+ 'policy': 0,
+ 'position': 1,
+ 'preceding': 0,
+ 'precision': 1,
+ 'prepare': 0,
+ 'prepared': 0,
+ 'preserve': 0,
+ 'primary': 3,
+ 'prior': 0,
+ 'privileges': 0,
+ 'procedural': 0,
+ 'procedure': 0,
+ 'program': 0,
+ 'quote': 0,
+ 'range': 0,
+ 'read': 0,
+ 'real': 1,
+ 'reassign': 0,
+ 'recheck': 0,
+ 'recursive': 0,
+ 'ref': 0,
+ 'references': 3,
+ 'refresh': 0,
+ 'reindex': 0,
+ 'relative': 0,
+ 'release': 0,
+ 'rename': 0,
+ 'repeatable': 0,
+ 'replace': 0,
+ 'replica': 0,
+ 'reset': 0,
+ 'restart': 0,
+ 'restrict': 0,
+ 'returning': 3,
+ 'returns': 0,
+ 'revoke': 0,
+ 'right': 2,
+ 'role': 0,
+ 'rollback': 0,
+ 'rollup': 0,
+ 'row': 1,
+ 'rows': 0,
+ 'rule': 0,
+ 'savepoint': 0,
+ 'schema': 0,
+ 'scroll': 0,
+ 'search': 0,
+ 'second': 0,
+ 'security': 0,
+ 'select': 3,
+ 'sequence': 0,
+ 'sequences': 0,
+ 'serializable': 0,
+ 'server': 0,
+ 'session': 0,
+ 'session_user': 3,
+ 'set': 0,
+ 'setof': 1,
+ 'sets': 0,
+ 'share': 0,
+ 'show': 0,
+ 'similar': 2,
+ 'simple': 0,
+ 'skip': 0,
+ 'smallint': 1,
+ 'snapshot': 0,
+ 'some': 3,
+ 'sql': 0,
+ 'stable': 0,
+ 'standalone': 0,
+ 'start': 0,
+ 'statement': 0,
+ 'statistics': 0,
+ 'stdin': 0,
+ 'stdout': 0,
+ 'storage': 0,
+ 'strict': 0,
+ 'strip': 0,
+ 'substring': 1,
+ 'symmetric': 3,
+ 'sysid': 0,
+ 'system': 0,
+ 'table': 3,
+ 'tables': 0,
+ 'tablesample': 2,
+ 'tablespace': 0,
+ 'temp': 0,
+ 'template': 0,
+ 'temporary': 0,
+ 'text': 0,
+ 'then': 3,
+ 'time': 1,
+ 'timestamp': 1,
+ 'to': 3,
+ 'trailing': 3,
+ 'transaction': 0,
+ 'transform': 0,
+ 'treat': 1,
+ 'trigger': 0,
+ 'trim': 1,
+ 'true': 3,
+ 'truncate': 0,
+ 'trusted': 0,
+ 'type': 0,
+ 'types': 0,
+ 'unbounded': 0,
+ 'uncommitted': 0,
+ 'unencrypted': 0,
+ 'union': 3,
+ 'unique': 3,
+ 'unknown': 0,
+ 'unlisten': 0,
+ 'unlogged': 0,
+ 'until': 0,
+ 'update': 0,
+ 'user': 3,
+ 'using': 3,
+ 'vacuum': 0,
+ 'valid': 0,
+ 'validate': 0,
+ 'validator': 0,
+ 'value': 0,
+ 'values': 1,
+ 'varchar': 1,
+ 'variadic': 3,
+ 'varying': 0,
+ 'verbose': 2,
+ 'version': 0,
+ 'view': 0,
+ 'views': 0,
+ 'volatile': 0,
+ 'when': 3,
+ 'where': 3,
+ 'whitespace': 0,
+ 'window': 3,
+ 'with': 3,
+ 'within': 0,
+ 'without': 0,
+ 'work': 0,
+ 'wrapper': 0,
+ 'write': 0,
+ 'xml': 0,
+ 'xmlattributes': 1,
+ 'xmlconcat': 1,
+ 'xmlelement': 1,
+ 'xmlexists': 1,
+ 'xmlforest': 1,
+ 'xmlparse': 1,
+ 'xmlpi': 1,
+ 'xmlroot': 1,
+ 'xmlserialize': 1,
+ 'year': 0,
+ 'yes': 0,
+ 'zone': 0,
+ }
+
+ return keywords.get(key, None)
diff --git a/web/pgadmin/utils/driver/psycopg3/server_manager.py b/web/pgadmin/utils/driver/psycopg3/server_manager.py
new file mode 100644
index 000000000..d6431e29d
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/server_manager.py
@@ -0,0 +1,612 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""
+Implementation of ServerManager
+"""
+import os
+import datetime
+import config
+from flask import current_app, session
+from flask_security import current_user
+from flask_babel import gettext
+from werkzeug.exceptions import InternalServerError
+
+from pgadmin.utils import get_complete_file_path
+from pgadmin.utils.crypto import decrypt
+from pgadmin.utils.master_password import process_masterpass_disabled
+from .connection import Connection
+from pgadmin.model import Server, User
+from pgadmin.utils.exception import ConnectionLost, SSHTunnelConnectionLost,\
+ CryptKeyMissing
+from pgadmin.utils.master_password import get_crypt_key
+from pgadmin.utils.exception import ObjectGone
+
+if config.SUPPORT_SSH_TUNNEL:
+ from sshtunnel import SSHTunnelForwarder, BaseSSHTunnelForwarderError
+
+
+class ServerManager(object):
+ """
+ class ServerManager
+
+ This class contains the information about the given server.
+ And, acts as connection manager for that particular session.
+ """
+ _INFORMATION_MSG = gettext("Information is not available.")
+
+ def __init__(self, server):
+ self.connections = dict()
+ self.local_bind_host = '127.0.0.1'
+ self.local_bind_port = None
+ self.tunnel_object = None
+ self.tunnel_created = False
+
+ self.update(server)
+
+ def update(self, server):
+ assert (server is not None)
+ assert (isinstance(server, Server))
+
+ self.ver = None
+ self.sversion = None
+ self.server_type = None
+ self.server_cls = None
+ self.password = None
+ self.tunnel_password = None
+
+ self.sid = server.id
+ self.host = server.host
+ self.hostaddr = server.hostaddr
+ self.port = server.port
+ self.db = server.maintenance_db
+ self.shared = server.shared
+ self.did = None
+ self.user = server.username
+ self.password = server.password
+ self.role = server.role
+ self.ssl_mode = server.ssl_mode
+ self.pinged = datetime.datetime.now()
+ self.db_info = dict()
+ self.server_types = None
+ self.db_res = server.db_res
+ self.passfile = server.passfile
+ self.sslcert = server.sslcert
+ self.sslkey = server.sslkey
+ self.sslrootcert = server.sslrootcert
+ self.sslcrl = server.sslcrl
+ self.sslcompression = True if server.sslcompression else False
+ self.service = server.service
+ self.connect_timeout = \
+ server.connect_timeout if server.connect_timeout else 0
+ if config.SUPPORT_SSH_TUNNEL:
+ self.use_ssh_tunnel = server.use_ssh_tunnel
+ self.tunnel_host = server.tunnel_host
+ self.tunnel_port = \
+ 22 if server.tunnel_port is None else server.tunnel_port
+ self.tunnel_username = server.tunnel_username
+ self.tunnel_authentication = 0 \
+ if server.tunnel_authentication is None \
+ else server.tunnel_authentication
+ self.tunnel_identity_file = server.tunnel_identity_file
+ self.tunnel_password = server.tunnel_password
+ else:
+ self.use_ssh_tunnel = 0
+ self.tunnel_host = None
+ self.tunnel_port = 22
+ self.tunnel_username = None
+ self.tunnel_authentication = None
+ self.tunnel_identity_file = None
+ self.tunnel_password = None
+
+ self.kerberos_conn = server.kerberos_conn
+ self.gss_authenticated = False
+ self.gss_encrypted = False
+
+ for con in self.connections:
+ self.connections[con]._release()
+
+ self.update_session()
+
+ self.connections = dict()
+
+ def _set_password(self, res):
+ """
+ Set password for server manager object.
+ :param res: response dict.
+ :return:
+ """
+ if hasattr(self, 'password') and self.password:
+ if hasattr(self.password, 'decode'):
+ res['password'] = self.password.decode('utf-8')
+ else:
+ res['password'] = str(self.password)
+ else:
+ res['password'] = self.password
+
+ def as_dict(self):
+ """
+ Returns a dictionary object representing the server manager.
+ """
+ if self.ver is None or len(self.connections) == 0:
+ return None
+
+ res = dict()
+ res['sid'] = self.sid
+ res['ver'] = self.ver
+ res['sversion'] = self.sversion
+
+ self._set_password(res)
+
+ if self.use_ssh_tunnel:
+ if hasattr(self, 'tunnel_password') and self.tunnel_password:
+ if hasattr(self.tunnel_password, 'decode'):
+ res['tunnel_password'] = \
+ self.tunnel_password.decode('utf-8')
+ else:
+ res['tunnel_password'] = str(self.tunnel_password)
+ else:
+ res['tunnel_password'] = self.tunnel_password
+
+ connections = res['connections'] = dict()
+
+ for conn_id in self.connections:
+ conn = self.connections[conn_id].as_dict()
+
+ if conn is not None:
+ connections[conn_id] = conn
+
+ return res
+
+ def server_version(self):
+ return self.ver
+
+ @property
+ def version(self):
+ return self.sversion
+
+ def major_version(self):
+ if self.sversion is not None:
+ return int(self.sversion / 10000)
+ raise InternalServerError(self._INFORMATION_MSG)
+
+ def minor_version(self):
+ if self.sversion:
+ return int(int(self.sversion / 100) % 100)
+ raise InternalServerError(self._INFORMATION_MSG)
+
+ def patch_version(self):
+ if self.sversion:
+ return int(int(self.sversion / 100) / 100)
+ raise InternalServerError(self._INFORMATION_MSG)
+
+ def connection(self, **kwargs):
+ database = kwargs.get('database', None)
+ conn_id = kwargs.get('conn_id', None)
+ auto_reconnect = kwargs.get('auto_reconnect', True)
+ did = kwargs.get('did', None)
+ async_ = kwargs.get('async_', None)
+ use_binary_placeholder = kwargs.get('use_binary_placeholder', False)
+ array_to_string = kwargs.get('array_to_string', False)
+
+ if database is not None:
+ if did is not None and did in self.db_info:
+ self.db_info[did]['datname'] = database
+ else:
+ if did is None:
+ database = self.db
+ elif did in self.db_info:
+ database = self.db_info[did]['datname']
+ else:
+ maintenance_db_id = 'DB:{0}'.format(self.db)
+ if maintenance_db_id in self.connections:
+ conn = self.connections[maintenance_db_id]
+ # try to connect maintenance db if not connected
+ if not conn.connected():
+ conn.connect()
+
+ if conn.connected():
+ status, res = conn.execute_dict("""
+SELECT
+ db.oid as did, db.datname, db.datallowconn,
+ pg_catalog.pg_encoding_to_char(db.encoding) AS serverencoding,
+ pg_catalog.has_database_privilege(db.oid, 'CREATE') as cancreate,
+ datistemplate
+FROM
+ pg_catalog.pg_database db
+WHERE db.oid = {0}""".format(did))
+
+ if status and len(res['rows']) > 0:
+ for row in res['rows']:
+ self.db_info[did] = row
+ database = self.db_info[did]['datname']
+
+ if did not in self.db_info:
+ raise ObjectGone(gettext(
+ "Could not find the specified database."
+ ))
+
+ if not get_crypt_key()[0]:
+ # the reason its not connected might be missing key
+ raise CryptKeyMissing()
+
+ if database is None:
+ # Check SSH Tunnel is alive or not.
+ if self.use_ssh_tunnel == 1:
+ self.check_ssh_tunnel_alive()
+ else:
+ raise ConnectionLost(self.sid, None, None)
+
+ my_id = ('CONN:{0}'.format(conn_id)) if conn_id is not None else \
+ ('DB:{0}'.format(database))
+
+ self.pinged = datetime.datetime.now()
+
+ if my_id in self.connections:
+ return self.connections[my_id]
+ else:
+ if async_ is None:
+ async_ = 1 if conn_id is not None else 0
+ else:
+ async_ = 1 if async_ is True else 0
+ self.connections[my_id] = Connection(
+ self, my_id, database, auto_reconnect=auto_reconnect,
+ async_=async_,
+ use_binary_placeholder=use_binary_placeholder,
+ array_to_string=array_to_string
+ )
+
+ return self.connections[my_id]
+
+ @staticmethod
+ def _get_password_to_conn(data, masterpass_processed):
+ """
+ Get password for connect to server with simple and ssh connection.
+ :param data: Data.
+ :param masterpass_processed:
+ :return:
+ """
+ # The data variable is a copy so is not automatically synced
+ # update here
+ if masterpass_processed and 'password' in data:
+ data['password'] = None
+ if masterpass_processed and 'tunnel_password' in data:
+ data['tunnel_password'] = None
+
+ def _get_server_type(self):
+ """
+ Get server type and server cls.
+ :return:
+ """
+ from pgadmin.browser.server_groups.servers.types import ServerType
+
+ if self.ver and not self.server_type:
+ for st in ServerType.types():
+ if st.instance_of(self.ver):
+ self.server_type = st.stype
+ self.server_cls = st
+ break
+
+ def _check_and_reconnect_server(self, conn, conn_info, data):
+ """
+ Check and try to reconnect the server if server previously connected
+ and auto_reconnect is true.
+ :param conn:
+ :type conn:
+ :param conn_info:
+ :type conn_info:
+ :param data:
+ :type data:
+ :return:
+ :rtype:
+ """
+ from pgadmin.browser.server_groups.servers.types import ServerType
+ if conn_info['wasConnected'] and conn_info['auto_reconnect']:
+ try:
+ # Check SSH Tunnel needs to be created
+ if self.use_ssh_tunnel == 1 and \
+ not self.tunnel_created:
+ status, error = self.create_ssh_tunnel(
+ data['tunnel_password'])
+
+ # Check SSH Tunnel is alive or not.
+ self.check_ssh_tunnel_alive()
+
+ conn.connect(
+ password=data['password'],
+ server_types=ServerType.types()
+ )
+ # This will also update wasConnected flag in
+ # connection so no need to update the flag manually.
+ except CryptKeyMissing:
+ # maintain the status as this will help to restore once
+ # the key is available
+ conn.wasConnected = conn_info['wasConnected']
+ conn.auto_reconnect = conn_info['auto_reconnect']
+ except Exception as e:
+ current_app.logger.exception(e)
+ self.connections.pop(conn_info['conn_id'])
+ raise
+
+ def _restore(self, data):
+ """
+ Helps restoring to reconnect the auto-connect connections smoothly on
+ reload/restart of the app server..
+ """
+ # restore server version from flask session if flask server was
+ # restarted. As we need server version to resolve sql template paths.
+ masterpass_processed = process_masterpass_disabled()
+
+ ServerManager._get_password_to_conn(data, masterpass_processed)
+ # Get server type.
+ self._get_server_type()
+
+ # We need to know about the existing server variant supports during
+ # first connection for identifications.
+ self.pinged = datetime.datetime.now()
+ try:
+ if 'password' in data and data['password'] and \
+ hasattr(data['password'], 'encode'):
+ data['password'] = data['password'].encode('utf-8')
+ if 'tunnel_password' in data and data['tunnel_password']:
+ data['tunnel_password'] = \
+ data['tunnel_password'].encode('utf-8')
+ except Exception as e:
+ current_app.logger.exception(e)
+
+ connections = data['connections']
+
+ for conn_id in connections:
+ conn_info = connections[conn_id]
+ if conn_info['conn_id'] in self.connections:
+ conn = self.connections[conn_info['conn_id']]
+ else:
+ conn = self.connections[conn_info['conn_id']] = Connection(
+ self, conn_info['conn_id'], conn_info['database'],
+ auto_reconnect=conn_info['auto_reconnect'],
+ async_=conn_info['async_'],
+ use_binary_placeholder=conn_info[
+ 'use_binary_placeholder'],
+ array_to_string=conn_info['array_to_string']
+ )
+
+ # only try to reconnect
+ self._check_and_reconnect_server(conn, conn_info, data)
+
+ def _restore_connections(self):
+ for conn_id in self.connections:
+ conn = self.connections[conn_id]
+ # only try to reconnect if connection was connected previously
+ # and auto_reconnect is true.
+ wasConnected = conn.wasConnected
+ auto_reconnect = conn.auto_reconnect
+ if conn.wasConnected and conn.auto_reconnect:
+ try:
+ # Check SSH Tunnel needs to be created
+ if self.use_ssh_tunnel == 1 and \
+ not self.tunnel_created:
+ status, error = self.create_ssh_tunnel(
+ self.tunnel_password
+ )
+
+ # Check SSH Tunnel is alive or not.
+ self.check_ssh_tunnel_alive()
+
+ conn.connect()
+ # This will also update wasConnected flag in
+ # connection so no need to update the flag manually.
+ except CryptKeyMissing:
+ # maintain the status as this will help to restore once
+ # the key is available
+ conn.wasConnected = wasConnected
+ conn.auto_reconnect = auto_reconnect
+ except Exception as e:
+ self.connections.pop(conn_id)
+ current_app.logger.exception(e)
+ raise
+
+ def _stop_ssh_tunnel(self, did, database, conn_id):
+ """
+ Stop ssh tunnel connection if function call without any parameter.
+ :param did: Database Id.
+ :param database: Database.
+ :param conn_id: COnnection Id.
+ :return:
+ """
+ if database is None and conn_id is None and did is None:
+ self.stop_ssh_tunnel()
+
+ def _check_db_info(self, did, conn_id, database):
+ """
+ Check did is not none and it is resent in db_info.
+ :param did: Database Id.
+ :param conn_id: Connection Id.
+ :return:
+ """
+ if database is None and conn_id is None and did is None:
+ self.stop_ssh_tunnel()
+
+ my_id = None
+ if did is not None:
+ if did in self.db_info and 'datname' in self.db_info[did]:
+ database = self.db_info[did]['datname']
+ if database is None:
+ return True, False, my_id
+ else:
+ return True, False, my_id
+
+ if conn_id is not None:
+ my_id = 'CONN:{0}'.format(conn_id)
+ elif database is not None:
+ my_id = 'DB:{0}'.format(database)
+
+ return False, True, my_id
+
+ def release(self, database=None, conn_id=None, did=None):
+ # Stop the SSH tunnel if release() function calls without
+ # any parameter.
+ is_return, return_value, my_id = self._check_db_info(did, conn_id,
+ database)
+ if is_return:
+ return return_value
+
+ if my_id is not None:
+ if my_id in self.connections:
+ self.connections[my_id]._release()
+ del self.connections[my_id]
+ if did is not None:
+ del self.db_info[did]
+
+ if len(self.connections) == 0:
+ self.ver = None
+ self.sversion = None
+ self.server_type = None
+ self.server_cls = None
+ self.password = None
+
+ self.update_session()
+
+ return True
+ else:
+ return False
+
+ for con_key in list(self.connections.keys()):
+ conn = self.connections[con_key]
+ # Cancel the ongoing transaction before closing the connection
+ # as it may hang forever
+ if conn.connected() and conn.conn_id is not None and \
+ conn.conn_id.startswith('CONN:'):
+ conn.cancel_transaction(conn.conn_id[5:])
+ conn._release()
+
+ self.connections = dict()
+ self.ver = None
+ self.sversion = None
+ self.server_type = None
+ self.server_cls = None
+ self.password = None
+
+ self.update_session()
+
+ return True
+
+ def _update_password(self, passwd):
+ self.password = passwd
+ for conn_id in self.connections:
+ conn = self.connections[conn_id]
+ if conn.conn is not None or conn.wasConnected is True:
+ conn.password = passwd
+
+ def update_session(self):
+ managers = session['__pgsql_server_managers'] \
+ if '__pgsql_server_managers' in session else dict()
+ updated_mgr = self.as_dict()
+
+ if not updated_mgr:
+ if self.sid in managers:
+ managers.pop(self.sid)
+ else:
+ managers[self.sid] = updated_mgr
+ session['__pgsql_server_managers'] = managers
+ session.force_write = True
+
+ def utility(self, operation):
+ """
+ utility(operation)
+
+ Returns: name of the utility which used for the operation
+ """
+ if self.server_cls is not None:
+ return self.server_cls.utility(operation, self.sversion)
+
+ return None
+
+ def export_password_env(self, env):
+ if self.password:
+ crypt_key_present, crypt_key = get_crypt_key()
+ if not crypt_key_present:
+ return False, crypt_key
+
+ password = decrypt(self.password, crypt_key).decode()
+ os.environ[str(env)] = password
+
+ def create_ssh_tunnel(self, tunnel_password):
+ """
+ This method is used to create ssh tunnel and update the IP Address and
+ IP Address and port to localhost and the local bind port return by the
+ SSHTunnelForwarder class.
+ :return: True if tunnel is successfully created else error message.
+ """
+ # Fetch Logged in User Details.
+ user = User.query.filter_by(id=current_user.id).first()
+ if user is None:
+ return False, gettext("Unauthorized request.")
+
+ if tunnel_password is not None and tunnel_password != '':
+ crypt_key_present, crypt_key = get_crypt_key()
+ if not crypt_key_present:
+ raise CryptKeyMissing()
+
+ try:
+ tunnel_password = decrypt(tunnel_password, crypt_key)
+ # password is in bytes, for python3 we need it in string
+ if isinstance(tunnel_password, bytes):
+ tunnel_password = tunnel_password.decode()
+
+ except Exception as e:
+ current_app.logger.exception(e)
+ return False, gettext("Failed to decrypt the SSH tunnel "
+ "password.\nError: {0}").format(str(e))
+
+ try:
+ # If authentication method is 1 then it uses identity file
+ # and password
+ if self.tunnel_authentication == 1:
+ self.tunnel_object = SSHTunnelForwarder(
+ (self.tunnel_host, int(self.tunnel_port)),
+ ssh_username=self.tunnel_username,
+ ssh_pkey=get_complete_file_path(self.tunnel_identity_file),
+ ssh_private_key_password=tunnel_password,
+ remote_bind_address=(self.host, self.port)
+ )
+ else:
+ self.tunnel_object = SSHTunnelForwarder(
+ (self.tunnel_host, int(self.tunnel_port)),
+ ssh_username=self.tunnel_username,
+ ssh_password=tunnel_password,
+ remote_bind_address=(self.host, self.port)
+ )
+ # flag tunnel threads in daemon mode to fix hang issue.
+ self.tunnel_object.daemon_forward_servers = True
+ self.tunnel_object.start()
+ self.tunnel_created = True
+ except BaseSSHTunnelForwarderError as e:
+ current_app.logger.exception(e)
+ return False, gettext("Failed to create the SSH tunnel.\n"
+ "Error: {0}").format(str(e))
+
+ # Update the port to communicate locally
+ self.local_bind_port = self.tunnel_object.local_bind_port
+
+ return True, None
+
+ def check_ssh_tunnel_alive(self):
+ # Check SSH Tunnel is alive or not. if it is not then
+ # raise the ConnectionLost exception.
+ if self.tunnel_object is None or not self.tunnel_object.is_active:
+ self.tunnel_created = False
+ raise SSHTunnelConnectionLost(self.tunnel_host)
+
+ def stop_ssh_tunnel(self):
+ # Stop the SSH tunnel if created.
+ if self.tunnel_object and self.tunnel_object.is_active:
+ self.tunnel_object.stop()
+ self.local_bind_port = None
+ self.tunnel_object = None
+ self.tunnel_created = False
diff --git a/web/pgadmin/utils/driver/psycopg3/typecast.py b/web/pgadmin/utils/driver/psycopg3/typecast.py
new file mode 100644
index 000000000..e16850085
--- /dev/null
+++ b/web/pgadmin/utils/driver/psycopg3/typecast.py
@@ -0,0 +1,247 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2022, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""
+Typecast various data types so that they can be compatible with Javascript
+data types.
+"""
+import psycopg
+from psycopg.types.string import TextLoader
+from psycopg.types.json import JsonDumper, _JsonDumper, _JsonLoader
+from psycopg._encodings import py_codecs as encodings
+from .encoding import get_encoding, configure_driver_encodings
+from psycopg.types.net import InetLoader
+from psycopg.adapt import Loader
+from ipaddress import ip_address, ip_interface
+from psycopg._encodings import py_codecs as encodings
+
+configure_driver_encodings(encodings)
+
+# OIDs of data types which need to typecast as string to avoid JavaScript
+# compatibility issues.
+# e.g JavaScript does not support 64 bit integers. It has 64-bit double
+# giving only 53 bits of integer range (IEEE 754)
+# So to avoid loss of remaining 11 bits (64-53) we need to typecast bigint to
+# string.
+
+TO_STRING_DATATYPES = (
+ # To cast bytea, interval type
+ 17, 1186,
+
+ # date, timestamp, timestamp with zone, time without time zone
+ 1082, 1114, 1184, 1083
+)
+
+TO_STRING_NUMERIC_DATATYPES = (
+ # Real, double precision, numeric, bigint
+ 700, 701, 1700, 20
+)
+
+# OIDs of array data types which need to typecast to array of string.
+# This list may contain:
+# OIDs of data types from PSYCOPG_SUPPORTED_ARRAY_DATATYPES as they need to be
+# typecast to array of string.
+# Also OIDs of data types which psycopg does not typecast array of that
+# data type. e.g: uuid, bit, varbit, etc.
+
+TO_ARRAY_OF_STRING_DATATYPES = (
+ # To cast bytea[] type
+ 1001,
+
+ # bigint[]
+ 1016,
+
+ # double precision[], real[]
+ 1022, 1021,
+
+ # bit[], varbit[]
+ 1561, 1563,
+)
+
+# OID of record array data type
+RECORD_ARRAY = (2287,)
+
+# OIDs of builtin array datatypes supported by psycopg
+# OID reference psycopg/psycopg/typecast_builtins.c
+#
+# For these array data types psycopg returns result in list.
+# For all other array data types psycopg returns result as string (string
+# representing array literal)
+# e.g:
+#
+# For below two sql psycopg returns result in different formats.
+# SELECT '{foo,bar}'::text[];
+# print('type of {} ==> {}'.format(res[0], type(res[0])))
+# SELECT '{foo,bar}'::xml[];
+# print('type of {} ==> {}'.format(res[0], type(res[0])))
+#
+# Output:
+# type of ['foo', 'bar'] ==>
+# type of {foo,bar} ==>
+
+PSYCOPG_SUPPORTED_BUILTIN_ARRAY_DATATYPES = (
+ 1016, 1005, 1006, 1007, 1021, 1022, 1231,
+ 1002, 1003, 1009, 1014, 1015, 1009, 1014,
+ 1015, 1000, 1115, 1185, 1183, 1270, 1182,
+ 1187, 1001, 1028, 1013, 1041, 651, 1040
+)
+
+# json, jsonb
+# OID reference psycopg/lib/_json.py
+PSYCOPG_SUPPORTED_JSON_TYPES = (114, 3802)
+
+# json[], jsonb[]
+PSYCOPG_SUPPORTED_JSON_ARRAY_TYPES = (199, 3807)
+
+ALL_JSON_TYPES = PSYCOPG_SUPPORTED_JSON_TYPES +\
+ PSYCOPG_SUPPORTED_JSON_ARRAY_TYPES
+
+# INET[], CIDR[]
+# OID reference psycopg/lib/_ipaddress.py
+PSYCOPG_SUPPORTED_IPADDRESS_ARRAY_TYPES = (1041, 651)
+
+# uuid[]
+# OID reference psycopg/lib/extras.py
+PSYCOPG_SUPPORTED_IPADDRESS_ARRAY_TYPES = (2951,)
+
+# int4range, int8range, numrange, daterange tsrange, tstzrange[]
+# OID reference psycopg/lib/_range.py
+PSYCOPG_SUPPORTED_RANGE_TYPES = (3904, 3926, 3906, 3912, 3908, 3910)
+
+# int4range[], int8range[], numrange[], daterange[] tsrange[], tstzrange[]
+# OID reference psycopg/lib/_range.py
+PSYCOPG_SUPPORTED_RANGE_ARRAY_TYPES = (3905, 3927, 3907, 3913, 3909, 3911)
+
+
+def register_global_typecasters():
+ # This registers a unicode type caster for datatype 'RECORD'.
+ psycopg.adapters.register_loader(
+ 2249, TextLoaderpgAdmin)
+ # This registers a unicode type caster for datatype 'RECORD_ARRAY'.
+ psycopg.adapters.register_loader(
+ 2287, TextLoaderpgAdmin)
+
+ for typ in TO_STRING_DATATYPES + TO_STRING_NUMERIC_DATATYPES +\
+ PSYCOPG_SUPPORTED_RANGE_TYPES:
+ psycopg.adapters.register_loader(typ,
+ TextLoaderpgAdmin)
+
+ #
+ # # define type caster to convert pg array types of above types into
+ # # array of string type
+ # pg_array_types_to_array_of_string_type = \
+ # psycopg.extensions.new_array_type(
+ # TO_ARRAY_OF_STRING_DATATYPES,
+ # 'TYPECAST_TO_ARRAY_OF_STRING', pg_types_to_string_type
+ # )
+
+ for typ in TO_ARRAY_OF_STRING_DATATYPES:
+ psycopg.adapters.register_loader(typ, TextLoaderpgAdmin)
+
+ psycopg.adapters.register_loader("json",
+ TextLoaderpgAdmin)
+ psycopg.adapters.register_loader("jsonb",
+ TextLoaderpgAdmin)
+
+ # psycopg.types.json.set_json_loads(loads=lambda x: x)
+
+ class JsonDumperpgAdmin(_JsonDumper):
+
+ def dump(self, obj):
+ return self.dumps(obj).encode()
+
+ psycopg.adapters.register_dumper(dict, JsonDumperpgAdmin)
+
+
+def register_string_typecasters(connection):
+ # raw_unicode_escape used for SQL ASCII will escape the
+ # characters. Here we unescape them using unicode_escape
+ # and send ahead. When insert update is done, the characters
+ # are escaped again and sent to the DB.
+
+ postgres_encoding, python_encoding, typecast_encoding = \
+ get_encoding(connection.info.encoding)
+ if postgres_encoding != 'UTF-8' and postgres_encoding != 'UTF8':
+
+ # class NonAsciiLoader(Loader):
+ # def load(self, data):
+ # if data is None:
+ # return None
+ # postgres_encoding, python_encoding, typecast_encoding = \
+ # get_encoding(self.connection.info.encoding)
+ # return data.decode(python_encoding, errors='replace')
+
+ for typ in (19, 18, 25, 1042, 1043, 0):
+ if connection:
+ connection.adapters.register_loader(typ, TextLoaderpgAdmin)
+ # for typ in (1002, 1003, 1009, 1014, 1015, 0):
+ # if connection:
+ # connection.adapters.register_loader(typ,
+ # TextLoaderpgAdmin)
+ # connection.adapters.register_loader(bytes, NonAsciiLoader)
+
+
+def register_binary_typecasters(connection):
+ # The new classes can be registered globally, on a connection, on a cursor
+
+ connection.adapters.register_loader(17,
+ pgAdminByteaLoader)
+
+ connection.adapters.register_loader(1001,
+ pgAdminByteaLoader)
+
+
+def register_array_to_string_typecasters(connection=None):
+ type_array = (PSYCOPG_SUPPORTED_BUILTIN_ARRAY_DATATYPES +
+ PSYCOPG_SUPPORTED_JSON_ARRAY_TYPES +
+ PSYCOPG_SUPPORTED_IPADDRESS_ARRAY_TYPES +
+ PSYCOPG_SUPPORTED_RANGE_ARRAY_TYPES +
+ TO_ARRAY_OF_STRING_DATATYPES)
+
+ for typ in type_array[0]:
+ if connection:
+ connection.adapters.register_loader(typ,
+ TextLoaderpgAdmin)
+
+
+class pgAdminInetLoader(InetLoader):
+ def load(self, data):
+ if isinstance(data, memoryview):
+ data = bytes(data)
+
+ if b"/" in data:
+ return str(ip_interface(data.decode()))
+ else:
+ return str(ip_address(data.decode()))
+
+
+# The new classes can be registered globally, on a connection, on a cursor
+psycopg.adapters.register_loader("inet", pgAdminInetLoader)
+
+
+class pgAdminByteaLoader(Loader):
+ def load(self, data):
+ return 'binary data' if data is not None else None
+
+
+class TextLoaderpgAdmin(TextLoader):
+ def load(self, data):
+ if self._encoding:
+ if isinstance(data, memoryview):
+ return bytes(data).decode(self._encoding)
+ else:
+ return data.decode(self._encoding, errors='replace')
+ else:
+ # SQL_ASCII db
+ postgres_encoding, python_encoding, typecast_encoding = \
+ get_encoding(self.connection.info.encoding)
+ try:
+ return data.decode(typecast_encoding)
+ except Exception:
+ return data.decode('UTF-8', errors='replace')
diff --git a/web/pgadmin/utils/driver/registry.py b/web/pgadmin/utils/driver/registry.py
index 1085cac43..6ceaa58e8 100644
--- a/web/pgadmin/utils/driver/registry.py
+++ b/web/pgadmin/utils/driver/registry.py
@@ -18,6 +18,9 @@ def load_modules(cls, app=None):
from . import psycopg2 as module
submodules.append(module)
+ from . import psycopg3 as module
+ submodules.append(module)
+
from . import abstract as module
submodules.append(module)
diff --git a/web/regression/python_test_utils/sql_template_test_base.py b/web/regression/python_test_utils/sql_template_test_base.py
index 6bb9d5a51..2a448c90e 100644
--- a/web/regression/python_test_utils/sql_template_test_base.py
+++ b/web/regression/python_test_utils/sql_template_test_base.py
@@ -31,7 +31,10 @@ class SQLTemplateTestBase(BaseTestGenerator):
# To be implemented by child classes
pass
- def generate_sql(self, version):
+ def get_server_version(self, connection):
+ return connection.info.server_version
+
+ def generate_sql(self, connection):
# To be implemented by child classes
pass
@@ -50,7 +53,7 @@ class SQLTemplateTestBase(BaseTestGenerator):
cursor = connection.cursor()
self.test_setup(connection, cursor)
- sql = self.generate_sql(connection.server_version)
+ sql = self.generate_sql(connection)
cursor = connection.cursor()
cursor.execute(sql)
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index f94c20ab0..08451897d 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -12,7 +12,6 @@ import traceback
import os
import sys
import uuid
-import psycopg2
import sqlite3
import shutil
from functools import partial
@@ -41,6 +40,11 @@ from pgadmin.utils import set_binary_path
from functools import wraps
+if config.PG_DEFAULT_DRIVER == 'psycopg2':
+ import psycopg2 as psycopg
+else:
+ import psycopg
+
CURRENT_PATH = os.path.abspath(os.path.join(os.path.dirname(
os.path.realpath(__file__)), "../"))
@@ -51,8 +55,8 @@ file_name = os.path.realpath(__file__)
def get_db_connection(db, username, password, host, port, sslmode="prefer"):
"""This function returns the connection object of psycopg"""
- connection = psycopg2.connect(
- database=db,
+ connection = psycopg.connect(
+ dbname=db,
user=username,
password=password,
host=host,
@@ -62,6 +66,19 @@ def get_db_connection(db, username, password, host, port, sslmode="prefer"):
return connection
+def get_server_version(connection):
+ return connection.info.server_version
+
+
+def set_isolation_level(connection, level):
+ if level == 0:
+ connection.rollback()
+ connection.autocommit = True
+ else:
+ connection.autocommit = False
+ connection.isolation_level = level
+
+
def login_tester_account(tester):
"""
This function login the test client using env variables email and password
@@ -141,7 +158,8 @@ def create_database(server, db_name, encoding=None):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
+ connection.autocommit = True
pg_cursor = connection.cursor()
if encoding is None:
pg_cursor.execute(
@@ -151,7 +169,8 @@ def create_database(server, db_name, encoding=None):
'''CREATE DATABASE "%s" TEMPLATE template0
ENCODING='%s' LC_COLLATE='%s' LC_CTYPE='%s' ''' %
(db_name, encoding[0], encoding[1], encoding[1]))
- connection.set_isolation_level(old_isolation_level)
+ connection.autocommit = False
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
# Get 'oid' from newly created database
@@ -188,7 +207,7 @@ def create_table(server, db_name, table_name, extra_columns=[]):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
extra_columns_sql = ", " + ", ".join(extra_columns) \
if len(extra_columns) > 0 else ''
@@ -210,7 +229,7 @@ def create_table(server, db_name, table_name, extra_columns=[]):
VALUES ('Yet-Another-Name', 14,
'cool info')''' % table_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -267,10 +286,10 @@ def create_table_with_query(server, db_name, query):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(query)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -292,14 +311,14 @@ def create_constraint(server,
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute('''
ALTER TABLE "%s"
ADD CONSTRAINT "%s" %s (some_column)
''' % (table_name, constraint_name, constraint_type.upper()))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -329,7 +348,7 @@ def create_type(server, db_name, type_name, type_fields=[]):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
type_fields_sql = ", ".join(type_fields)
@@ -337,7 +356,7 @@ def create_type(server, db_name, type_name, type_fields=[]):
pg_cursor.execute(
'''CREATE TYPE %s AS (%s)''' % (type_name, type_fields_sql))
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -355,7 +374,7 @@ def create_debug_function(server, db_name, function_name="test_func"):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
try:
pg_cursor.execute('''CREATE EXTENSION pldbgapi;''')
@@ -376,7 +395,7 @@ def create_debug_function(server, db_name, function_name="test_func"):
END;
$function$;
''' % function_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -394,12 +413,12 @@ def drop_debug_function(server, db_name, function_name="test_func"):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute('''
DROP FUNCTION public."%s"();
''' % function_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -438,14 +457,14 @@ def grant_role(server, db_name, role_name="test_role",
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
sql_query = '''GRANT "%s" TO %s;''' % (grant_role, role_name)
pg_cursor.execute(
sql_query
)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -463,7 +482,7 @@ def create_role(server, db_name, role_name="test_role"):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
sql_query = '''
CREATE USER "%s" WITH
@@ -473,13 +492,13 @@ def create_role(server, db_name, role_name="test_role"):
CREATEDB
NOCREATEROLE
''' % (role_name)
- if connection.server_version > 90100:
+ if get_server_version(connection) > 90100:
sql_query += '\nNOREPLICATION'
pg_cursor.execute(
sql_query
)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -497,12 +516,12 @@ def drop_role(server, db_name, role_name="test_role"):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute('''
DROP USER "%s"
''' % role_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -513,7 +532,7 @@ def drop_database(connection, database_name):
"""This function used to drop the database"""
if database_name not in ["postgres", "template1", "template0"]:
pg_cursor = connection.cursor()
- if connection.server_version >= 90100:
+ if connection.info.server_version >= 90100:
pg_cursor.execute(
"SELECT pg_terminate_backend(pg_stat_activity.pid) "
"FROM pg_stat_activity "
@@ -531,9 +550,9 @@ def drop_database(connection, database_name):
" db.datname='%s'" % database_name)
if pg_cursor.fetchall():
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor.execute('''DROP DATABASE "%s"''' % database_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
@@ -543,7 +562,7 @@ def drop_database_multiple(connection, database_names):
for database_name in database_names:
if database_name not in ["postgres", "template1", "template0"]:
pg_cursor = connection.cursor()
- if connection.server_version >= 90100:
+ if test_utils.get_server_version(connection) >= 90100:
pg_cursor.execute(
"SELECT pg_terminate_backend(pg_stat_activity.pid) "
"FROM pg_stat_activity "
@@ -561,9 +580,9 @@ def drop_database_multiple(connection, database_names):
" db.datname='%s'" % database_name)
if pg_cursor.fetchall():
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor.execute('''DROP DATABASE "%s"''' % database_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
@@ -577,9 +596,9 @@ def drop_tablespace(connection):
for table_space in table_spaces:
if table_space[0] not in ["pg_default", "pg_global"]:
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor.execute("DROP TABLESPACE %s" % table_space[0])
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
connection.close()
@@ -1121,11 +1140,11 @@ def create_schema(server, db_name, schema_name):
server['sslmode']
)
old_isolation_level = connection.isolation_level
- connection.set_isolation_level(0)
+ set_isolation_level(connection, 0)
pg_cursor = connection.cursor()
pg_cursor.execute(
'''CREATE SCHEMA "%s"''' % schema_name)
- connection.set_isolation_level(old_isolation_level)
+ set_isolation_level(connection, old_isolation_level)
connection.commit()
except Exception:
@@ -1186,7 +1205,7 @@ def check_binary_path_or_skip_test(cls, utility_name):
def get_driver_version():
- version = getattr(psycopg2, '__version__', None)
+ version = getattr(psycopg, '__version__', None)
return version
diff --git a/web/regression/re_sql/tests/test_resql.py b/web/regression/re_sql/tests/test_resql.py
index cc3dd1474..8b4d3db7b 100644
--- a/web/regression/re_sql/tests/test_resql.py
+++ b/web/regression/re_sql/tests/test_resql.py
@@ -272,6 +272,10 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
try:
self.assertEqual(response.status_code, 200)
except Exception as e:
+ response = self.tester.post(create_url,
+ data=json.dumps(
+ scenario['data']),
+ content_type='html/json')
self.final_test_status = False
print(scenario['name'] + "... FAIL")
traceback.print_exc()
@@ -307,6 +311,11 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
self.assertEqual(response.status_code, 200)
except Exception as e:
self.final_test_status = False
+ alter_url = self.get_url(scenario['endpoint'], object_id)
+ response = self.tester.put(alter_url,
+ data=json.dumps(
+ scenario['data']),
+ follow_redirects=True)
print(scenario['name'] + "... FAIL")
traceback.print_exc()
continue
@@ -495,7 +504,6 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
try:
self.assertEqual(response.status_code, 200)
except Exception as e:
-
self.final_test_status = False
traceback.print_exc()
return False
@@ -524,6 +532,8 @@ class ReverseEngineeredSQLTestCases(BaseTestGenerator):
try:
self.assertEqual(sql, resp_sql)
except Exception as e:
+ print(sql)
+ print(resp_sql)
self.final_test_status = False
traceback.print_exc()
return False
diff --git a/web/regression/runtests.py b/web/regression/runtests.py
index a008c3119..80646b48e 100644
--- a/web/regression/runtests.py
+++ b/web/regression/runtests.py
@@ -489,7 +489,7 @@ def execute_test(test_module_list_passed, server_passed, driver_passed,
)
# Add the server version in server information
- server_information['server_version'] = connection.server_version
+ server_information['server_version'] = connection.info.server_version
server_information['type'] = server_passed['type']
# Drop the database if already exists.