def create_query_execution(query, engine_id, data_cell_id=None, originator=None): with DBSession() as session: verify_query_engine_permission(engine_id, session=session) uid = current_user.id query_execution = logic.create_query_execution(query=query, engine_id=engine_id, uid=uid, session=session) data_doc = None if data_cell_id: datadoc_logic.append_query_executions_to_data_cell( data_cell_id, [query_execution.id], session=session) data_cell = datadoc_logic.get_data_cell_by_id(data_cell_id, session=session) data_doc = data_cell.doc try: run_query_task.apply_async(args=[ query_execution.id, ]) query_execution_dict = query_execution.to_dict() if data_doc: socketio.emit( "data_doc_query_execution", ( originator, query_execution_dict, data_cell_id, ), namespace="/datadoc", room=data_doc.id, broadcast=True, ) return query_execution_dict except Exception as e: # We might encounter ConnectionError caused by # Redis connection failing logic.create_query_execution_error( query_execution.id, error_type=None, error_message_extracted="Encountered Error connecting to Redis", error_message=str(e), commit=False, session=session, ) query_execution.status = QueryExecutionStatus.ERROR session.commit() raise e
def _start_query_execution_task( self, previous_query_status, cell_id, query_execution_params, ): if previous_query_status != QueryExecutionStatus.DONE.value: raise Exception(GENERIC_QUERY_FAILURE_MSG) with DBSession() as session: query_execution_id = qe_logic.create_query_execution( **query_execution_params, session=session).id datadoc_logic.append_query_executions_to_data_cell( cell_id, [query_execution_id], session=session) return query_execution_id