File tree Expand file tree Collapse file tree 4 files changed +17
-9
lines changed
jjtree/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/statement/select Expand file tree Collapse file tree 4 files changed +17
-9
lines changed Original file line number Diff line number Diff line change 17
17
public class TimezoneExpression extends ASTNodeAccessImpl implements Expression {
18
18
19
19
private Expression leftExpression ;
20
- private ArrayList <String > timezoneExpressions = new ArrayList <>();
20
+ private ArrayList <Expression > timezoneExpressions = new ArrayList <>();
21
21
22
22
public Expression getLeftExpression () {
23
23
return leftExpression ;
@@ -32,19 +32,19 @@ public void accept(ExpressionVisitor expressionVisitor) {
32
32
expressionVisitor .visit (this );
33
33
}
34
34
35
- public List <String > getTimezoneExpressions () {
35
+ public List <Expression > getTimezoneExpressions () {
36
36
return timezoneExpressions ;
37
37
}
38
38
39
- public void addTimezoneExpression (String timezoneExpr ) {
39
+ public void addTimezoneExpression (Expression timezoneExpr ) {
40
40
this .timezoneExpressions .add (timezoneExpr );
41
41
}
42
42
43
43
@ Override
44
44
public String toString () {
45
45
String returnValue = getLeftExpression ().toString ();
46
- for (String expr : timezoneExpressions ) {
47
- returnValue += " AT TIME ZONE " + expr ;
46
+ for (Expression expr : timezoneExpressions ) {
47
+ returnValue += " AT TIME ZONE " + expr . toString () ;
48
48
}
49
49
50
50
return returnValue ;
Original file line number Diff line number Diff line change @@ -924,8 +924,9 @@ public void visit(XMLSerializeExpr expr) {
924
924
public void visit (TimezoneExpression var ) {
925
925
var .getLeftExpression ().accept (this );
926
926
927
- for (String expr : var .getTimezoneExpressions ()) {
928
- buffer .append (" AT TIME ZONE " + expr );
927
+ for (Expression expr : var .getTimezoneExpressions ()) {
928
+ buffer .append (" AT TIME ZONE " );
929
+ expr .accept (this );
929
930
}
930
931
}
931
932
Original file line number Diff line number Diff line change @@ -3638,6 +3638,7 @@ Expression PrimaryExpression() #PrimaryExpression:
3638
3638
Expression retval = null;
3639
3639
CastExpression castExpr = null;
3640
3640
TimezoneExpression timezoneExpr = null;
3641
+ Expression timezoneRightExpr = null;
3641
3642
Token token = null;
3642
3643
Token sign = null;
3643
3644
String tmp = "";
@@ -3762,11 +3763,11 @@ Expression PrimaryExpression() #PrimaryExpression:
3762
3763
retval=castExpr;
3763
3764
} )*
3764
3765
3765
- ( <K_AT> <K_DATETIMELITERAL> <K_ZONE> token=<S_CHAR_LITERAL> {
3766
+ ( <K_AT> <K_DATETIMELITERAL> <K_ZONE> timezoneRightExpr=PrimaryExpression() {
3766
3767
if (timezoneExpr == null)
3767
3768
timezoneExpr = new TimezoneExpression();
3768
3769
3769
- timezoneExpr.addTimezoneExpression(token.image );
3770
+ timezoneExpr.addTimezoneExpression(timezoneRightExpr );
3770
3771
} )*
3771
3772
3772
3773
{
Original file line number Diff line number Diff line change @@ -884,6 +884,12 @@ public void testTimezoneExpressionWithTwoTransformations() throws JSQLParserExce
884
884
assertSqlCanBeParsedAndDeparsed (stmt );
885
885
}
886
886
887
+ @ Test
888
+ public void testTimezoneExpressionWithColumnBasedTimezone () throws JSQLParserException {
889
+ String stmt = "SELECT 1 FROM tbl WHERE col AT TIME ZONE timezone_col < '2021-11-05 00:00:35'::date + INTERVAL '1 day' * 0" ;
890
+ assertSqlCanBeParsedAndDeparsed (stmt );
891
+ }
892
+
887
893
@ Test
888
894
public void testUnionWithOrderByAndLimitAndNoBrackets () throws JSQLParserException {
889
895
String stmt = "SELECT id FROM table1 UNION SELECT id FROM table2 ORDER BY id ASC LIMIT 55" ;
You can’t perform that action at this time.
0 commit comments