@Override protected Void visitDescribeInput(DescribeInput node, Integer indent) { append(indent, "DESCRIBE INPUT "); builder.append(node.getName()); return null; }
@Override public Node visitDescribeInput(SqlBaseParser.DescribeInputContext context) { return new DescribeInput( getLocation(context), (Identifier) visit(context.identifier())); }
@Override protected Node visitDescribeInput(DescribeInput node, Void context) throws SemanticException { String sqlString = session.getPreparedStatement(node.getName().getValue()); Statement statement = parser.createStatement(sqlString, createParsingOptions(session)); // create analysis for the query we are describing. Analyzer analyzer = new Analyzer(session, metadata, parser, accessControl, queryExplainer, parameters, warningCollector); Analysis analysis = analyzer.analyze(statement, true); // get all parameters in query List<Parameter> parameters = getParameters(statement); // return the positions and types of all parameters 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); }
@Test public void testDescribeInput() { assertStatement("DESCRIBE INPUT myquery", new DescribeInput(identifier("myquery"))); }
@Override protected Void visitDescribeInput(DescribeInput node, Integer indent) { append(indent, "DESCRIBE INPUT "); builder.append(node.getName()); return null; }
@Override public Node visitDescribeInput(SqlBaseParser.DescribeInputContext context) { return new DescribeInput( getLocation(context), (Identifier) visit(context.identifier())); }
@Override protected Void visitDescribeInput(DescribeInput node, Integer indent) { append(indent, "DESCRIBE INPUT "); builder.append(node.getName()); return null; }
@Test public void testDescribeInput() { assertStatement("DESCRIBE INPUT myquery", new DescribeInput(identifier("myquery"))); }