public override string HandleJsonRequest(string method, string[] userParameters, QvxConnection connection) { try { QvDataContractResponse response; var parameter = UserParameter.Create(connection?.MParameters); logger.Trace($"HandleJsonRequest {method}"); switch (method) { case "getVersion": response = new Info { qMessage = GitVersionInformation.InformationalVersion }; break; case "getUsername": response = new Info { qMessage = parameter.UserName }; break; case "getDatabases": response = GetDatabases(parameter); break; case "getTables": response = GetTables(parameter, userParameters[0]); break; case "getFields": response = GetFields(parameter, userParameters[0], userParameters[1]); break; case "getPreview": response = GetPreview(parameter, userParameters[0], userParameters[1]); break; default: response = new Info { qMessage = "Unknown command" }; break; } return(ToJson(response)); } catch (Exception ex) { logger.Error(ex); return(ToJson(new Info { qMessage = "Error " + ex.ToString() })); } }
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); } })); }