def execute(*args, **kwargs): notebook = args[0] snippet = args[1] kwargs['max_rows'] = TASK_SERVER.FETCH_RESULT_LIMIT.get() _patch_status(notebook) task = download_to_file.apply_async(args=args, kwargs=kwargs, task_id=notebook['uuid']) should_close, resp = get_current_statement( snippet ) # This redoes some of the work in api.execute. Other option is to pass statement, but then we'd have to modify notebook.api. # if should_close: #front end already calls close_statement for multi statement execution no need to do here. # In addition, we'd have to figure out what was the previous guid. resp.update({ 'sync': False, 'has_result_set': True, 'modified_row_count': 0, 'guid': '', 'result': { 'has_more': True, 'data': [], 'meta': [], 'type': 'table' } }) return resp
def query_risk(request): response = {'status': -1} interface = request.POST.get('interface', OPTIMIZER.INTERFACE.get()) connector = json.loads(request.POST.get('connector', '{}')) if request.POST.get('query'): # Via API query = json.loads(request.POST.get('query')) source_platform = request.POST.get('sourcePlatform') db_name = request.POST.get('dbName') else: # Via Editor snippet = json.loads(request.POST.get('snippet')) should_close, resp = get_current_statement(snippet) query = resp['statement'] source_platform = snippet['connector']['dialect'] db_name = snippet['database'] api = get_api(request.user, interface) data = api.query_risk(query=query, source_platform=source_platform, db_name=db_name, connector=connector) if data: response['status'] = 0 response['query_risk'] = data else: response['message'] = 'Optimizer: %s' % data return JsonResponse(response)
def _get_current_statement(self, notebook, snippet): should_close, resp = get_current_statement(snippet) if should_close: try: self.close_statement(notebook, snippet) # Close all the time past multi queries except: LOG.warn('Could not close previous multiquery query') return resp