API Stability Short-Term

The concatenateQueries() GraphQL query is used to concatenate multiple valid queries into a combined query.

Syntax

Below is the syntax for the concatenateQueries() query field:

graphql
concatenateQueries(
     input: ConcatenateQueriesArguments!
   ): QueryConcatenationInfo

For the input, there is a special datatype, ConcatenateQueriesArguments. It's described in the next section. The return datatype, QueryConcatenationInfo is described in the subsequent section. Here's an example of this query:

Raw
graphql
query {
	concatenateQueries(input:
    {queryStrings: ["actor.type=*", "groupBy([#type,actor.type])"],
     version:{name: "legacy"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}
Mac OS or Linux (curl)
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}"
}
EOF
Mac OS or Linux (curl) One-line
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}"
}
EOF
Windows Cmd and curl
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql ^
    -H "Authorization: Bearer $TOKEN" ^
    -H "Content-Type: application/json" ^
    -d @'{"query" : "query { ^
	concatenateQueries(input: ^
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"], ^
     version:{name: \"legacy\"} ^
    } ^
  ) ^
  {concatenatedQuery,  ^
   validationResult{isValid,diagnostics{message,code,severity}} ^
  } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}"
}'
    "$YOUR_LOGSCALE_URL/graphql"
Perl
perl
#!/usr/bin/perl

use HTTP::Request;
use LWP;

my $TOKEN = "TOKEN";

my $uri = '$YOUR_LOGSCALE_URL/graphql';

my $query = "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}";
$query =~ s/\n/ /g;
my $json = sprintf('{"query" : "%s"}',$query);
my $req = HTTP::Request->new("POST", $uri );

$req->header("Authorization" => "Bearer $TOKEN");
$req->header("Content-Type" => "application/json");

$req->content( $json );

my $lwp = LWP::UserAgent->new;

my $result = $lwp->request( $req );

print $result->{"_content"},"\n";
Python
python
#! /usr/local/bin/python3

import requests

url = '$YOUR_LOGSCALE_URL/graphql'
mydata = r'''{"query" : "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}"
}'''

resp = requests.post(url,
                     data = mydata,
                     headers = {
   "Authorization" : "Bearer $TOKEN",
   "Content-Type" : "application/json"
}
)

print(resp.text)
Node.js
javascript
const https = require('https');

const data = JSON.stringify(
    {"query" : "query {
	concatenateQueries(input:
    {queryStrings: [\"actor.type=*\", \"groupBy([#type,actor.type])\"],
     version:{name: \"legacy\"}
    }
  )
  {concatenatedQuery, 
   validationResult{isValid,diagnostics{message,code,severity}}
  }
}"
}
);


const options = {
  hostname: '$YOUR_LOGSCALE_URL',
  path: 'graphql',
  port: 443,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length,
    Authorization: 'BEARER ' + process.env.TOKEN,
    'User-Agent': 'Node',
  },
};

const req = https.request(options, (res) => {
  let data = '';
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    data += d;
  });
  res.on('end', () => {
    console.log(JSON.parse(data).data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.write(data);
req.end();
Example Responses
Success (HTTP Response Code 200 OK)
json
{
  "data": {
    "concatenateQueries": {
      "concatenatedQuery": "actor.type=*\n| groupBy([#type,actor.type])",
      "validationResult": {
        "isValid": true,
        "diagnostics": []
      }
    }
  }
}

For the input, the arguments given are within curly-brackets. The values for queryStrings is given in square-brackets because it's an array. Incidentally, you can give more than two query strings.

As for the returned results in the example, they're given in a comma-separated list, with one of them with curly-brackets for it's sub-selections.

Given Datatypes

For the given datatype, ConcatenateQueriesArguments, there are a two parameters. Below is a list of them along with a description of each:

Table: ConcatenateQueriesArguments

ParameterTypeRequiredDefaultStabilityDescription
Some arguments may be required, as indicated in the Required column. For return datatypes, this indicates that you must specify which fields you want returned in the results.
Table last updated: Sep 17, 2024
querystrings[string]yes Short-TermThe query strings.
versionLanguageVersionInputTypeyes Short-TermThe language version used. See LanguageVersionInputType.

Returned Datatypes

For QueryConcatenationInfo, there are a couple possible values returned, which are listed below. One, though, has a few sub-choices of returned values — as shown in the example above. So be sure to click on the link to its table of parameters.

Table: QueryConcatenationInfo

ParameterTypeRequiredDefaultStabilityDescription
Some arguments may be required, as indicated in the Required column. For return datatypes, this indicates that you must specify which fields you want returned in the results.
Table last updated: Oct 2, 2024
concatenatedQuerystringyes Short-TermThe result of concatenating the queries.
validationResultQueryValidationInfoyes Short-TermThe validation results. See QueryValidationInfo.