@@ -62,17 +62,60 @@ void testIntervalSecondWithLeadingAndFractionalPrecisionRoundTrip() throws JSQLP
6262 TestUtils .assertSqlCanBeParsedAndDeparsed ("SELECT INTERVAL '30.12345' SECOND(2, 4)" , true );
6363 }
6464
65+ @ Test
66+ void testIntervalSingleFieldKeepsLegacyGetter () throws JSQLParserException {
67+ String sql = "SELECT INTERVAL '1' DAY" ;
68+ Select select = (Select ) TestUtils .assertSqlCanBeParsedAndDeparsed (sql , true );
69+ IntervalExpression interval = (IntervalExpression ) select .getPlainSelect ()
70+ .getSelectItems ().get (0 ).getExpression ();
71+
72+ assertEquals ("DAY" , interval .getIntervalType ());
73+ assertEquals ("INTERVAL '1' DAY" , interval .toString ());
74+ TestUtils .assertExpressionCanBeDeparsedAs (interval , "INTERVAL '1' DAY" );
75+ }
76+
6577 @ Test
6678 void testIntervalQualifierStructurallyAttached () throws JSQLParserException {
67- Select select = (Select ) CCJSqlParserUtil .parse ("SELECT INTERVAL '1' HOUR TO MINUTE" );
79+ String sql = "SELECT INTERVAL '1' HOUR TO MINUTE" ;
80+ Select select = (Select ) TestUtils .assertSqlCanBeParsedAndDeparsed (sql , true );
6881 IntervalExpression interval = (IntervalExpression ) select .getPlainSelect ()
6982 .getSelectItems ().get (0 ).getExpression ();
70- assertNull ( interval .getIntervalType (), "single-string intervalType must stay null" );
83+ assertEquals ( "HOUR TO MINUTE" , interval .getIntervalType ());
7184 IntervalQualifier qualifier = interval .getIntervalQualifier ();
7285 assertNotNull (qualifier , "qualifier must be a structured property of the interval" );
7386 assertEquals ("HOUR" , qualifier .getLeadingField ());
7487 assertEquals ("MINUTE" , qualifier .getTrailingField ());
7588 assertEquals ("HOUR TO MINUTE" , qualifier .toString ());
89+ TestUtils .assertExpressionCanBeDeparsedAs (interval , "INTERVAL '1' HOUR TO MINUTE" );
90+ }
91+
92+ @ Test
93+ void testLegacySetterOverridesStructuredQualifier () throws JSQLParserException {
94+ Select select = (Select ) CCJSqlParserUtil .parse ("SELECT INTERVAL '1' DAY" );
95+ IntervalExpression interval = (IntervalExpression ) select .getPlainSelect ()
96+ .getSelectItems ().get (0 ).getExpression ();
97+
98+ interval .setIntervalType ("HOUR" );
99+
100+ assertNull (interval .getIntervalQualifier ());
101+ assertEquals ("HOUR" , interval .getIntervalType ());
102+ assertEquals ("INTERVAL '1' HOUR" , interval .toString ());
103+ TestUtils .assertExpressionCanBeDeparsedAs (interval , "INTERVAL '1' HOUR" );
104+ TestUtils .assertSqlCanBeParsedAndDeparsed ("SELECT " + interval , true );
105+ }
106+
107+ @ Test
108+ void testStructuredSetterOverridesLegacyType () throws JSQLParserException {
109+ IntervalExpression interval = new IntervalExpression ()
110+ .withExpression (new StringValue ("1" ))
111+ .withIntervalType ("DAY" );
112+
113+ interval .withIntervalQualifier (new IntervalQualifier ("HOUR" , null , "MINUTE" , null ));
114+
115+ assertEquals ("HOUR TO MINUTE" , interval .getIntervalType ());
116+ assertEquals ("INTERVAL '1' HOUR TO MINUTE" , interval .toString ());
117+ TestUtils .assertExpressionCanBeDeparsedAs (interval , "INTERVAL '1' HOUR TO MINUTE" );
118+ TestUtils .assertSqlCanBeParsedAndDeparsed ("SELECT " + interval , true );
76119 }
77120
78121 @ Test
0 commit comments