Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SPARK-38990][SQL] Avoid NullPointerException when evaluating date_trunc/trunc format as a bound reference #36312

Closed
wants to merge 2 commits into from

Conversation

bersprockets
Copy link
Contributor

What changes were proposed in this pull request?

Change TruncInstant.evalHelper to pass the input row to format.eval when format is a not a literal (and therefore might be a bound reference).

Why are the changes needed?

This query fails with a java.lang.NullPointerException:

select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);

This only happens if the data comes from an inline table. When the source is an inline table, ConvertToLocalRelation attempts to evaluate the function against the data in interpreted mode.

Does this PR introduce any user-facing change?

No.

How was this patch tested?

Update to unit tests.

@github-actions github-actions bot added the SQL label Apr 22, 2022
HyukjinKwon pushed a commit that referenced this pull request Apr 22, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes #36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
(cherry picked from commit 2e4f4ab)
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
HyukjinKwon pushed a commit that referenced this pull request Apr 22, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes #36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
(cherry picked from commit 2e4f4ab)
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
HyukjinKwon pushed a commit that referenced this pull request Apr 22, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes #36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
(cherry picked from commit 2e4f4ab)
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
HyukjinKwon pushed a commit that referenced this pull request Apr 22, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes #36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
(cherry picked from commit 2e4f4ab)
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
@HyukjinKwon
Copy link
Member

Merged to master, branch-3.3, branch-3.2, branch-3.1 and branch-3.0.

lvshaokang pushed a commit to lvshaokang/spark that referenced this pull request Apr 22, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes apache#36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
@bersprockets
Copy link
Contributor Author

Thanks @HyukjinKwon !

@bersprockets bersprockets deleted the date_trunc_issue branch August 10, 2022 18:13
kazuyukitanimura pushed a commit to kazuyukitanimura/spark that referenced this pull request Aug 10, 2022
…trunc/trunc format as a bound reference

### What changes were proposed in this pull request?

Change `TruncInstant.evalHelper` to pass the input row to `format.eval` when `format` is a not a literal (and therefore might be a bound reference).

### Why are the changes needed?

This query fails with a `java.lang.NullPointerException`:
```
select date_trunc(col1, col2)
from values
('week', timestamp'2012-01-01')
as data(col1, col2);
```
This only happens if the data comes from an inline table. When the source is an inline table, `ConvertToLocalRelation` attempts to evaluate the function against the data in interpreted mode.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

Update to unit tests.

Closes apache#36312 from bersprockets/date_trunc_issue.

Authored-by: Bruce Robbins <bersprockets@gmail.com>
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
(cherry picked from commit 2e4f4ab)
Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
2 participants