def run_query()

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