def execute(self, sql, trans_id, http_session, connect=False): session_obj = StartRunningQuery.retrieve_session_information( http_session, trans_id) if isinstance(session_obj, Response): return session_obj # Remove any existing primary keys or has_oids in session_obj session_obj.pop('primary_keys', None) session_obj.pop('oids', None) transaction_object = pickle.loads(session_obj['command_obj']) can_edit = False can_filter = False notifies = None trans_status = None if transaction_object is not None and session_obj is not None: # set fetched row count to 0 as we are executing query again. transaction_object.update_fetched_row_cnt(0) self.__retrieve_connection_id(transaction_object) try: manager = get_driver(PG_DEFAULT_DRIVER).connection_manager( transaction_object.sid) conn = manager.connection(did=transaction_object.did, conn_id=self.connection_id, auto_reconnect=False, use_binary_placeholder=True, array_to_string=True) except (ConnectionLost, SSHTunnelConnectionLost, CryptKeyMissing): raise except Exception as e: self.logger.error(e) return internal_server_error(errormsg=str(e)) # Connect to the Server if not connected. if connect and not conn.connected(): status, msg = conn.connect() if not status: self.logger.error(msg) return internal_server_error(errormsg=str(msg)) effective_sql_statement = apply_explain_plan_wrapper_if_needed( manager, sql) result, status = self.__execute_query(conn, session_obj, effective_sql_statement, trans_id, transaction_object) can_edit = transaction_object.can_edit() can_filter = transaction_object.can_filter() # Get the notifies notifies = conn.get_notifies() trans_status = conn.transaction_status() else: status = False result = gettext( 'Either transaction object or session object not found.') return make_json_response( data={ 'status': status, 'result': result, 'can_edit': can_edit, 'can_filter': can_filter, 'info_notifier_timeout': self.blueprint_object.info_notifier_timeout.get() * 1000, 'notifies': notifies, 'transaction_status': trans_status, })
def execute(self, sql, trans_id, http_session, connect=False): session_obj = StartRunningQuery.retrieve_session_information( http_session, trans_id ) if type(session_obj) is Response: return session_obj transaction_object = pickle.loads(session_obj['command_obj']) can_edit = False can_filter = False if transaction_object is not None and session_obj is not None: # set fetched row count to 0 as we are executing query again. transaction_object.update_fetched_row_cnt(0) self.__retrieve_connection_id(transaction_object) try: manager = get_driver( PG_DEFAULT_DRIVER).connection_manager( transaction_object.sid) conn = manager.connection(did=transaction_object.did, conn_id=self.connection_id, auto_reconnect=False, use_binary_placeholder=True, array_to_string=True) except (ConnectionLost, SSHTunnelConnectionLost): raise except Exception as e: self.logger.error(e) return internal_server_error(errormsg=str(e)) # Connect to the Server if not connected. if connect and not conn.connected(): status, msg = conn.connect() if not status: self.logger.error(msg) return internal_server_error(errormsg=str(msg)) effective_sql_statement = apply_explain_plan_wrapper_if_needed( manager, sql) result, status = self.__execute_query( conn, session_obj, effective_sql_statement, trans_id, transaction_object ) can_edit = transaction_object.can_edit() can_filter = transaction_object.can_filter() else: status = False result = gettext( 'Either transaction object or session object not found.') return make_json_response( data={ 'status': status, 'result': result, 'can_edit': can_edit, 'can_filter': can_filter, 'info_notifier_timeout': self.blueprint_object.info_notifier_timeout.get() } )