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));
 }