1+ package net .sf .jsqlparser .statement .select ;
2+
3+ import static net .sf .jsqlparser .test .TestUtils .assertSqlCanBeParsedAndDeparsed ;
4+ import static org .junit .jupiter .api .Assertions .assertEquals ;
5+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
6+
7+ import net .sf .jsqlparser .JSQLParserException ;
8+ import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
9+ import net .sf .jsqlparser .expression .CollateExpression ;
10+ import org .junit .jupiter .api .Test ;
11+
12+ public class OrderByCollateTest {
13+
14+ @ Test
15+ public void testOrderByWithCollate () throws JSQLParserException {
16+ String sql = "SELECT * FROM a ORDER BY CAST(a.xyz AS TEXT) COLLATE \" und-x-icu\" ASC NULLS FIRST" ;
17+ assertSqlCanBeParsedAndDeparsed (sql );
18+ }
19+
20+ @ Test
21+ public void testOrderByWithCollateSimple () throws JSQLParserException {
22+ String sql = "SELECT * FROM a ORDER BY col COLLATE \" C\" ASC" ;
23+ assertSqlCanBeParsedAndDeparsed (sql );
24+ }
25+
26+ @ Test
27+ public void testOrderByWithCollateMultiple () throws JSQLParserException {
28+ String sql = "SELECT * FROM a ORDER BY col1 COLLATE \" C\" ASC, col2 COLLATE \" POSIX\" DESC" ;
29+ assertSqlCanBeParsedAndDeparsed (sql );
30+ }
31+
32+ @ Test
33+ public void testOrderByWithCollateAndNulls () throws JSQLParserException {
34+ String sql = "SELECT * FROM a ORDER BY col COLLATE \" C\" DESC NULLS LAST" ;
35+ assertSqlCanBeParsedAndDeparsed (sql );
36+ }
37+
38+ @ Test
39+ public void testOrderByCollateStructure () throws JSQLParserException {
40+ String sql = "SELECT * FROM a ORDER BY col COLLATE \" C\" ASC" ;
41+ Select select = (Select ) CCJSqlParserUtil .parse (sql );
42+ PlainSelect plainSelect = (PlainSelect ) select ;
43+
44+ assertNotNull (plainSelect .getOrderByElements ());
45+ assertEquals (1 , plainSelect .getOrderByElements ().size ());
46+
47+ OrderByElement orderByElement = plainSelect .getOrderByElements ().get (0 );
48+ assertNotNull (orderByElement .getExpression ());
49+
50+ // The expression should be a CollateExpression
51+ if (orderByElement .getExpression () instanceof CollateExpression ) {
52+ CollateExpression collateExpr = (CollateExpression ) orderByElement .getExpression ();
53+ assertEquals ("\" C\" " , collateExpr .getCollate ());
54+ }
55+ }
56+ }
0 commit comments