Skip to content

Commit

Permalink
[Enhancement]implement dayofweek in FE (backport #51453) (#51804)
Browse files Browse the repository at this point in the history
Signed-off-by: even986025158 <[email protected]>
Co-authored-by: even986025158 <[email protected]>
  • Loading branch information
mergify[bot] and even986025158 authored Oct 12, 2024
1 parent 7921b2d commit 57a1ce8
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,33 @@ public static ConstantOperator dateDiff(ConstantOperator first, ConstantOperator
first.getDatetime().truncatedTo(ChronoUnit.DAYS)).toDays());
}

@ConstantFunction(name = "years_add", argTypes = {DATETIME, INT}, returnType = DATETIME)
@ConstantFunction.List(list = {
@ConstantFunction(name = "to_days", argTypes = {DATETIME}, returnType = INT),
@ConstantFunction(name = "to_days", argTypes = {DATE}, returnType = INT)
})
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),
@ConstantFunction(name = "years_add", argTypes = {DATE, INT}, returnType = DATE)
})
public static ConstantOperator yearsAdd(ConstantOperator date, ConstantOperator year) {
return ConstantOperator.createDatetime(date.getDatetime().plusYears(year.getInt()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,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 57a1ce8

Please sign in to comment.