public override Task GetData(DataRequest request, IServerStreamWriter <DataChunk> responseStream, ServerCallContext context) { return(Task.Run(() => { try { var query = request?.Parameters?.Statement ?? null; logger.Debug($"Parse query {query}"); var script = ScriptCode.Parse(query); if (script == null) { throw new Exception("The sql script is not valid."); } var userParameter = UserParameter.Create(request.Connection.ConnectionString); var resultTable = GetData(script, userParameter); logger.Debug($"Send result table {resultTable.Name}"); //Write meta table var metaResponse = GetDataResponseInfo(resultTable); var metaData = new Metadata(); metaData.Add("x-qlik-getdata-bin", metaResponse.ToByteArray()); context.WriteResponseHeadersAsync(metaData).Wait(); //Write data var dataChunk = GetDataChunk(resultTable); responseStream.WriteAsync(dataChunk); } catch (Exception ex) { logger.Error(ex, "The query could not be executed."); LogManager.Flush(); var errorChunk = new DataChunk(); errorChunk.StringCodes.Add(-1); responseStream.WriteAsync(errorChunk); } })); }
private ScriptCode CreateScript(string script_text, CryptoManager manager) { return(ScriptCode.Parse(script_text)); }