Skip to content

Commit

Permalink
[Enhancement]implement dayofweek in FE (#51453)
Browse files Browse the repository at this point in the history
Signed-off-by: evenhuang <[email protected]>
(cherry picked from commit fb41039)

Signed-off-by: even986025158 <[email protected]>
  • Loading branch information
even986025158 authored and Seaven committed Oct 12, 2024
1 parent 13a4963 commit 08f3c2f
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,28 @@ public static ConstantOperator dateDiff(ConstantOperator first, ConstantOperator
first.getDatetime().truncatedTo(ChronoUnit.DAYS)).toDays());
}

@ConstantFunction.List(list = {
@ConstantFunction(name = "to_days", argTypes = {DATETIME}, returnType = INT, isMonotonic = true),
@ConstantFunction(name = "to_days", argTypes = {DATE}, returnType = INT, isMonotonic = true)
})
public static ConstantOperator to_days(ConstantOperator first) {
ConstantOperator second = ConstantOperator.createDatetime(LocalDateTime.of(0000, 01, 01, 00, 00, 00));
return ConstantOperator.createInt((int) Duration.between(
second.getDatetime().truncatedTo(ChronoUnit.DAYS),
first.getDatetime().truncatedTo(ChronoUnit.DAYS)).toDays());
}

@ConstantFunction.List(list = {
@ConstantFunction(name = "dayofweek", argTypes = {DATETIME}, returnType = INT),
@ConstantFunction(name = "dayofweek", argTypes = {DATE}, returnType = INT),
@ConstantFunction(name = "dayofweek", argTypes = {INT}, returnType = INT)
})
public static ConstantOperator dayofweek(ConstantOperator date) {
// LocalDateTime.getDayOfWeek is return day of the week, such as monday is 1 and sunday is 7.
// function of dayofweek in starrocks monday is 2 and sunday is 1, so need mod 7 and plus 1.
return ConstantOperator.createInt((date.getDatetime().getDayOfWeek().getValue()) % 7 + 1);
}

@ConstantFunction.List(list = {
@ConstantFunction(name = "years_add", argTypes = {DATETIME,
INT}, returnType = DATETIME, isMonotonic = true),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,26 @@ public void dateDiff() {
assertEquals(-1572, ScalarOperatorFunctions.dateDiff(O_DT_20101202_023010, O_DT_20150323_092355).getInt());
}

@Test
public void to_days() {
assertEquals(734443, ScalarOperatorFunctions.to_days(O_DT_20101102_183010).getInt());
}

@Test
public void dayofweek() {
ConstantOperator testDate = ConstantOperator.createDatetime(LocalDateTime.of(2024, 2, 3, 13, 4, 5));
assertEquals(7,
ScalarOperatorFunctions.dayofweek(testDate).getInt());

testDate = ConstantOperator.createDatetime(LocalDateTime.of(2024, 2, 4, 13, 4, 5));
assertEquals(1,
ScalarOperatorFunctions.dayofweek(testDate).getInt());

testDate = ConstantOperator.createDatetime(LocalDateTime.of(2024, 2, 5, 13, 4, 5));
assertEquals(2,
ScalarOperatorFunctions.dayofweek(testDate).getInt());
}

@Test
public void yearsAdd() {
assertEquals("2025-03-23T09:23:55",
Expand Down

0 comments on commit 08f3c2f

Please sign in to comment.