diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java index 6e9902035..cf2355a55 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java @@ -53,10 +53,6 @@ public SelectDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) @Override public void visit(PlainSelect plainSelect) { buffer.append("SELECT "); - Top top = plainSelect.getTop(); - if (top != null) { - buffer.append(top).append(" "); - } if (plainSelect.getDistinct() != null) { buffer.append("DISTINCT "); if (plainSelect.getDistinct().getOnSelectItems() != null) { @@ -72,6 +68,10 @@ public void visit(PlainSelect plainSelect) { } } + Top top = plainSelect.getTop(); + if (top != null) { + buffer.append(top).append(" "); + } for (Iterator iter = plainSelect.getSelectItems().iterator(); iter.hasNext();) { SelectItem selectItem = iter.next(); diff --git a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java index 2fd3f198f..bd99b205b 100644 --- a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java @@ -408,6 +408,19 @@ public void testDistinct() throws JSQLParserException { assertStatementCanBeDeparsedAs(select, statement); } + public void testDistinctTop() throws JSQLParserException { + String statement = "SELECT DISTINCT TOP 5 myid, mycol FROM mytable WHERE mytable.col = 9"; + Select select = (Select) parserManager.parse(new StringReader(statement)); + PlainSelect plainSelect = (PlainSelect) select.getSelectBody(); + assertEquals("myid", + ((Column) ((SelectExpressionItem) plainSelect.getSelectItems().get(0)).getExpression()) + .getColumnName()); + assertEquals("mycol", + ((Column) ((SelectExpressionItem) plainSelect.getSelectItems().get(1)).getExpression()).getColumnName()); + assertNotNull(plainSelect.getTop()); + assertStatementCanBeDeparsedAs(select, statement); + } + public void testFrom() throws JSQLParserException { String statement = "SELECT * FROM mytable as mytable0, mytable1 alias_tab1, mytable2 as alias_tab2, (SELECT * FROM mytable3) AS mytable4 WHERE mytable.col = 9"; String statementToString = "SELECT * FROM mytable AS mytable0, mytable1 alias_tab1, mytable2 AS alias_tab2, (SELECT * FROM mytable3) AS mytable4 WHERE mytable.col = 9";