@@ -425,7 +425,93 @@ public void testTopWithParenthesis() throws JSQLParserException {
425425
426426 assertStatementCanBeDeparsedAs (select , statement );
427427 }
428+
429+ public void testSkip () throws JSQLParserException {
430+ final String firstColumnName = "alias.columnName1" ;
431+ final String secondColumnName = "alias.columnName2" ;
432+ final String statement = "SELECT SKIP 5 " + firstColumnName + ", " + secondColumnName + " FROM schemaName.tableName alias ORDER BY " + secondColumnName + " DESC" ;
433+ final Select select = (Select ) parserManager .parse (new StringReader (statement ));
434+
435+ final PlainSelect selectBody = (PlainSelect ) select .getSelectBody ();
436+
437+ final Skip skip = selectBody .getSkip ();
438+ assertEquals ((long ) 5 , (long ) skip .getRowCount ());
439+ assertNull (skip .getJdbcParameter ());
440+
441+ final List <SelectItem > selectItems = selectBody .getSelectItems ();
442+ assertEquals (2 , selectItems .size ());
443+ assertEquals (firstColumnName , selectItems .get (0 ).toString ());
444+ assertEquals (secondColumnName , selectItems .get (1 ).toString ());
445+
446+ assertStatementCanBeDeparsedAs (select , statement );
447+ }
448+
449+ public void testFirst () throws JSQLParserException {
450+ final String firstColumnName = "alias.columnName1" ;
451+ final String secondColumnName = "alias.columnName2" ;
452+ final String statement = "SELECT FIRST 5 " + firstColumnName + ", " + secondColumnName + " FROM schemaName.tableName alias ORDER BY " + secondColumnName + " DESC" ;
453+ final Select select = (Select ) parserManager .parse (new StringReader (statement ));
454+
455+ final PlainSelect selectBody = (PlainSelect ) select .getSelectBody ();
456+
457+ final First limit = selectBody .getFirst ();
458+ assertEquals ((long ) 5 , (long ) limit .getRowCount ());
459+ assertNull (limit .getJdbcParameter ());
460+ assertEquals (First .Keyword .FIRST , limit .getKeyword ());
461+
462+ final List <SelectItem > selectItems = selectBody .getSelectItems ();
463+ assertEquals (2 , selectItems .size ());
464+ assertEquals (firstColumnName , selectItems .get (0 ).toString ());
465+ assertEquals (secondColumnName , selectItems .get (1 ).toString ());
466+
467+ assertStatementCanBeDeparsedAs (select , statement );
468+ }
469+
470+ public void testFirstWithKeywordLimit () throws JSQLParserException {
471+ final String firstColumnName = "alias.columnName1" ;
472+ final String secondColumnName = "alias.columnName2" ;
473+ final String statement = "SELECT LIMIT ? " + firstColumnName + ", " + secondColumnName + " FROM schemaName.tableName alias ORDER BY " + secondColumnName + " DESC" ;
474+ final Select select = (Select ) parserManager .parse (new StringReader (statement ));
475+
476+ final PlainSelect selectBody = (PlainSelect ) select .getSelectBody ();
477+
478+ final First limit = selectBody .getFirst ();
479+ assertNull (limit .getRowCount ());
480+ assertNotNull (limit .getJdbcParameter ());
481+ assertNull (limit .getJdbcParameter ().getIndex ());
482+ assertEquals (First .Keyword .LIMIT , limit .getKeyword ());
483+
484+ final List <SelectItem > selectItems = selectBody .getSelectItems ();
485+ assertEquals (2 , selectItems .size ());
486+ assertEquals (firstColumnName , selectItems .get (0 ).toString ());
487+ assertEquals (secondColumnName , selectItems .get (1 ).toString ());
428488
489+ assertStatementCanBeDeparsedAs (select , statement );
490+ }
491+
492+ public void testSkipFirst () throws JSQLParserException {
493+ final String statement = "SELECT SKIP ?1 FIRST ?2 c1, c2 FROM t1" ;
494+ final Select select = (Select ) parserManager .parse (new StringReader (statement ));
495+
496+ final PlainSelect selectBody = (PlainSelect ) select .getSelectBody ();
497+
498+ final Skip skip = selectBody .getSkip ();
499+ assertNotNull (skip .getJdbcParameter ());
500+ assertNotNull (skip .getJdbcParameter ().getIndex ());
501+ assertEquals ((int ) 1 , (int ) skip .getJdbcParameter ().getIndex ());
502+ final First first = selectBody .getFirst ();
503+ assertNotNull (first .getJdbcParameter ());
504+ assertNotNull (first .getJdbcParameter ().getIndex ());
505+ assertEquals ((int ) 2 , (int ) first .getJdbcParameter ().getIndex ());
506+
507+ final List <SelectItem > selectItems = selectBody .getSelectItems ();
508+ assertEquals (2 , selectItems .size ());
509+ assertEquals ("c1" , selectItems .get (0 ).toString ());
510+ assertEquals ("c2" , selectItems .get (1 ).toString ());
511+
512+ assertStatementCanBeDeparsedAs (select , statement );
513+ }
514+
429515 public void testSelectItems () throws JSQLParserException {
430516 String statement = "SELECT myid AS MYID, mycol, tab.*, schema.tab.*, mytab.mycol2, myschema.mytab.mycol, myschema.mytab.* FROM mytable WHERE mytable.col = 9" ;
431517 Select select = (Select ) parserManager .parse (new StringReader (statement ));
0 commit comments