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 cea57210..6a900faf 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_attribute att WHERE att.attrelid = {{tid}}::oid - AND att.attname = {{data.name|qtLiteral}} + AND att.attname = {{data.name|qtLiteral(True)}} 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 385f9727..173a0ca7 100644 --- a/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros +++ b/web/pgadmin/browser/server_groups/servers/templates/macros/variable.macros @@ -4,7 +4,7 @@ {% macro APPLY(conn, database, role, param, value) -%} 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 {{ value }}; + SET {{ conn|qtIdent(param) }} TO {{ value|qtLiteral }}; {%- 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/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 60a3bb2b..4b3e2204 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -228,7 +228,7 @@ class Driver(BaseDriver): mgr.release() @staticmethod - def qtLiteral(value): + def qtLiteral(value, forceQuote=False): adapted = adapt(value) # Not all adapted objects have encoding @@ -242,7 +242,14 @@ class Driver(BaseDriver): res = adapted.getquoted() if isinstance(res, bytes): - return res.decode('utf-8') + res = res.decode('utf-8') + + if forceQuote is True: + # Convert the input to the string to use the startsWith(...) + res = str(res) + if not res.startswith("'"): + return "'" + res + "'" + return res @staticmethod @@ -343,6 +350,10 @@ class Driver(BaseDriver): 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 if hasattr(str, 'decode') and not isinstance(val, unicode): @@ -354,7 +365,7 @@ class Driver(BaseDriver): val = str(val).decode('utf-8') value = val - if (Driver.needsQuoting(val, True)): + if Driver.needsQuoting(val, True): value = value.replace("\"", "\"\"") value = "\"" + value + "\"" @@ -372,6 +383,11 @@ class Driver(BaseDriver): for val in args: if type(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 hasattr(str, 'decode') and not isinstance(val, unicode): # Handling for python2 try: @@ -385,7 +401,7 @@ class Driver(BaseDriver): value = val - if (Driver.needsQuoting(val, False)): + if Driver.needsQuoting(val, False): value = value.replace("\"", "\"\"") value = "\"" + value + "\""