Ejemplo n.º 1
0
        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);
                }
            }));
        }