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