in redash/query_runner/oracle.py [0:0]
def run_query(self, query, user):
if self.configuration.get("encoding"):
os.environ["NLS_LANG"] = self.configuration["encoding"]
dsn = cx_Oracle.makedsn(
self.configuration["host"],
self.configuration["port"],
service_name=self.configuration["servicename"],
)
connection = cx_Oracle.connect(
user=self.configuration["user"],
password=self.configuration["password"],
dsn=dsn,
)
connection.outputtypehandler = Oracle.output_handler
cursor = connection.cursor()
try:
cursor.execute(query)
rows_count = cursor.rowcount
if cursor.description is not None:
columns = self.fetch_columns(
[
(i[0], Oracle.get_col_type(i[1], i[5]))
for i in cursor.description
]
)
rows = [dict(zip((c["name"] for c in columns), row)) for row in cursor]
data = {"columns": columns, "rows": rows}
error = None
json_data = json_dumps(data)
else:
columns = [{"name": "Row(s) Affected", "type": "TYPE_INTEGER"}]
rows = [{"Row(s) Affected": rows_count}]
data = {"columns": columns, "rows": rows}
json_data = json_dumps(data)
connection.commit()
except cx_Oracle.DatabaseError as err:
error = "Query failed. {}.".format(str(err))
json_data = None
except (KeyboardInterrupt, JobTimeoutException):
connection.cancel()
raise
finally:
os.environ.pop("NLS_LANG", None)
connection.close()
return json_data, error