@Override
protected Node visitDescribeInput(DescribeInput node, Void context)
throws SemanticException
{
String sqlString = session.getPreparedStatement(node.getName().getValue());
Statement statement = parser.createStatement(sqlString, createParsingOptions(session));
Analyzer analyzer = new Analyzer(session, metadata, parser, accessControl, queryExplainer, parameters, warningCollector);
Analysis analysis = analyzer.analyze(statement, true);
List<Parameter> parameters = getParameters(statement);
Row[] rows = parameters.stream().map(parameter -> createDescribeInputRow(parameter, analysis)).toArray(Row[]::new);
Optional<String> limit = Optional.empty();
if (rows.length == 0) {
rows = new Row[] {row(new NullLiteral(), new NullLiteral())};
limit = Optional.of("0");
}
return simpleQuery(
selectList(identifier("Position"), identifier("Type")),
aliased(
values(rows),
"Parameter Input",
ImmutableList.of("Position", "Type")),
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.of(ordering(ascending("Position"))),
limit);
}