From 9ffc2df4656059175fbfa38f7675c082b81c6dd6 Mon Sep 17 00:00:00 2001 From: zhushaoping Date: Thu, 2 Mar 2017 00:13:37 +0800 Subject: [PATCH] add support for LIMIT with only one row count JDBC parameter --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 2 +- .../sf/jsqlparser/test/select/SelectTest.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 4de45a79b..b488dea65 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1454,7 +1454,7 @@ Limit LimitWithOffset(): } { ( - LOOKAHEAD(3) + LOOKAHEAD(5) // mysql-> LIMIT offset,row_count ( 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 3760947d7..1bf876c6c 100644 --- a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java @@ -376,6 +376,16 @@ public void testLimit3() throws JSQLParserException { assertNotNull(((JdbcParameter)rowCount).getIndex()); assertFalse(((JdbcParameter)rowCount).isUseFixedIndex()); assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll()); + + statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT ?1"; + select = (Select) parserManager.parse(new StringReader(statement)); + + offset = ((PlainSelect) select.getSelectBody()).getLimit().getOffset(); + rowCount = ((PlainSelect) select.getSelectBody()).getLimit().getRowCount(); + + assertNull(offset); + assertEquals(1, ((JdbcParameter)rowCount).getIndex().intValue()); + assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll()); } public void testLimit4() throws JSQLParserException { @@ -421,6 +431,14 @@ public void testLimit4() throws JSQLParserException { assertEquals(1, (int)(((JdbcParameter)rowCount).getIndex())); assertEquals("name1", (((JdbcNamedParameter)offset).getName())); assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll()); + + statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT :param_name"; + select = (Select) parserManager.parse(new StringReader(statement)); + offset = ((PlainSelect) select.getSelectBody()).getLimit().getOffset(); + rowCount = ((PlainSelect) select.getSelectBody()).getLimit().getRowCount(); + assertNull(offset); + assertEquals("param_name", (((JdbcNamedParameter)rowCount).getName())); + assertFalse(((PlainSelect) select.getSelectBody()).getLimit().isLimitAll()); } public void testLimitSqlServer1() throws JSQLParserException {