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

[branch-2.1](FoldFE) pick special date arithmetics of #37376 and #37766 #47616

Merged
merged 2 commits into from
Feb 8, 2025

Conversation

zclllyybb
Copy link
Contributor

pick #37376 and #37766

…apache#37376)

Issue Number: close #xxx

Java doesn't support the calculation of `0000-01-01`(0000 year is 1 B.C.
which ISO-8601 defines). so some of our calc was wrong in FE. now fixed
them.

new result:
```sql
mysql> select week('0000-01-01', 0),week('0000-01-01', 1),week('0000-01-01', 2),week('0000-01-01', 3),week('0000-01-01', 4), week('0000-01-01', 5), week('0000-01-01', 6), week('0000-01-01', 7);
+------+------+------+------+------+------+------+------+
| 1    | 0    | 1    | 52   | 1    | 0    | 1    | 52   |
+------+------+------+------+------+------+------+------+
|    1 |    0 |    1 |   52 |    1 |    0 |    1 |   52 |
+------+------+------+------+------+------+------+------+
1 row in set (0.10 sec)

mysql> select week('0000-01-02', 0),week('0000-01-02', 1),week('0000-01-02', 2),week('0000-01-02', 3),week('0000-01-02', 4), week('0000-01-02', 5), week('0000-01-02', 6), week('0000-01-02', 7);
+------+------+------+------+------+------+------+------+
| 1    | 1    | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|    1 |    1 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+
1 row in set (0.10 sec)
```
same with `yearweek`
…pache#37766)

make `dayofyear`, `dayofweek`, `weekofyear` result of FE folding
constant result same with MySQL. mainly about date in BC01 (year `0000`)

before:
```sql
mysql> select DAYOFWEEK('0000-01-01'),DAYOFWEEK('0000-01-02'),DAYOFWEEK('0000-01-03'),DAYOFWEEK('0000-01-04'),DAYOFWEEK('0000-01-05'),DAYOFWEEK('0000-01-06'),DAYOFWEEK('0000-01-07'),DAYOFWEEK('0000-01-08');
+------+------+------+------+------+------+------+------+
| 7    | 1    | 2    | 3    | 4    | 5    | 6    | 7    |
+------+------+------+------+------+------+------+------+
|    7 |    1 |    2 |    3 |    4 |    5 |    6 |    7 |
+------+------+------+------+------+------+------+------+

mysql> select DAYOFYEAR('0000-02-27'),DAYOFYEAR('0000-02-28'),DAYOFYEAR('0000-03-01'),DAYOFYEAR('0000-03-02');
+------+------+------+------+
| 58   | 59   | 61   | 62   |
+------+------+------+------+
|   58 |   59 |   61 |   62 |
+------+------+------+------+

mysql> select WEEKOFYEAR('0000-01-01'),WEEKOFYEAR('0000-01-02'),WEEKOFYEAR('0000-01-03'),WEEKOFYEAR('0000-01-04'),WEEKOFYEAR('0000-01-05'),WEEKOFYEAR('0000-01-06'),WEEKOFYEAR('0000-01-07'),WEEKOFYEAR('0000-01-08');
+------+------+------+------+------+------+------+------+
| 52   | 52   | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|   52 |   52 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select WEEKOFYEAR('0000-02-25'),WEEKOFYEAR('0000-02-26'),WEEKOFYEAR('0000-02-27'),WEEKOFYEAR('0000-02-28'),WEEKOFYEAR('0000-03-01'),WEEKOFYEAR('0000-03-02'),WEEKOFYEAR('2022-03-03');
+------+------+------+------+------+------+------+
| 8    | 8    | 8    | 9    | 9    | 9    | 9    |
+------+------+------+------+------+------+------+
|    8 |    8 |    8 |    9 |    9 |    9 |    9 |
+------+------+------+------+------+------+------+
```

after:
```sql
mysql> select DAYOFWEEK('0000-01-01'),DAYOFWEEK('0000-01-02'),DAYOFWEEK('0000-01-03'),DAYOFWEEK('0000-01-04'),DAYOFWEEK('0000-01-05'),DAYOFWEEK('0000-01-06'),DAYOFWEEK('0000-01-07'),DAYOFWEEK('0000-01-08');
+------+------+------+------+------+------+------+------+
| 1    | 2    | 3    | 4    | 5    | 6    | 7    | 1    |
+------+------+------+------+------+------+------+------+
|    1 |    2 |    3 |    4 |    5 |    6 |    7 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select DAYOFYEAR('0000-02-27'),DAYOFYEAR('0000-02-28'),DAYOFYEAR('0000-03-01'),DAYOFYEAR('0000-03-02');
+------+------+------+------+
| 58   | 59   | 60   | 61   |
+------+------+------+------+
|   58 |   59 |   60 |   61 |
+------+------+------+------+

mysql> select WEEKOFYEAR('0000-01-01'),WEEKOFYEAR('0000-01-02'),WEEKOFYEAR('0000-01-03'),WEEKOFYEAR('0000-01-04'),WEEKOFYEAR('0000-01-05'),WEEKOFYEAR('0000-01-06'),WEEKOFYEAR('0000-01-07'),WEEKOFYEAR('0000-01-08');
+------+------+------+------+------+------+------+------+
| 52   | 1    | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|   52 |    1 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select WEEKOFYEAR('0000-02-25'),WEEKOFYEAR('0000-02-26'),WEEKOFYEAR('0000-02-27'),WEEKOFYEAR('0000-02-28'),WEEKOFYEAR('0000-03-01'),WEEKOFYEAR('0000-03-02'),WEEKOFYEAR('2022-03-03');
+------+------+------+------+------+------+------+
| 8    | 8    | 9    | 9    | 9    | 9    | 9    |
+------+------+------+------+------+------+------+
|    8 |    8 |    9 |    9 |    9 |    9 |    9 |
+------+------+------+------+------+------+------+
```
@zclllyybb
Copy link
Contributor Author

run buildall

@Thearas
Copy link
Contributor

Thearas commented Feb 7, 2025

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@yiguolei yiguolei merged commit 800288b into apache:branch-2.1 Feb 8, 2025
19 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants