-
Notifications
You must be signed in to change notification settings - Fork 0
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
Add The TO_SECONDS
Function To The SQL Plugin
#232
Add The TO_SECONDS
Function To The SQL Plugin
#232
Conversation
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Codecov Report
@@ Coverage Diff @@
## integ-add-to_seconds-function #232 +/- ##
================================================================
Coverage 98.38% 98.39%
- Complexity 3693 3706 +13
================================================================
Files 343 343
Lines 9107 9148 +41
Branches 585 587 +2
================================================================
+ Hits 8960 9001 +41
Misses 142 142
Partials 5 5
Flags with carried forward coverage won't be shown. Click here to find out more.
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Show resolved
Hide resolved
core/src/test/java/org/opensearch/sql/expression/datetime/DateTimeFunctionTest.java
Outdated
Show resolved
Hide resolved
core/src/test/java/org/opensearch/sql/expression/datetime/DateTimeFunctionTest.java
Outdated
Show resolved
Hide resolved
core/src/test/java/org/opensearch/sql/expression/datetime/DateTimeFunctionTest.java
Outdated
Show resolved
Hide resolved
Signed-off-by: GabeFernandez310 <[email protected]>
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunction.java
Outdated
Show resolved
Hide resolved
core/src/main/java/org/opensearch/sql/utils/DateTimeFormatters.java
Outdated
Show resolved
Hide resolved
core/src/test/java/org/opensearch/sql/expression/datetime/ToSecondsTest.java
Outdated
Show resolved
Hide resolved
private ExprValue exprToSecondsForIntType(ExprValue dateExpr) { | ||
try { | ||
if (dateExpr.longValue() < 0 || dateExpr.longValue() > 99999999) { | ||
throw new DateTimeException("Integer argument was out of range"); | ||
} | ||
|
||
try { | ||
LocalDate date = LocalDate.parse(String.valueOf(dateExpr.longValue()), | ||
DATE_FORMATTER_LONG_YEAR); | ||
|
||
return new ExprLongValue( | ||
date.toEpochSecond(LocalTime.MIN, ZoneOffset.UTC) | ||
+ DAYS_0000_TO_1970 * SECONDS_PER_DAY); | ||
} catch (DateTimeParseException ignored) { | ||
//ignore parse exception and try next format | ||
} | ||
|
||
try { | ||
LocalDate date = LocalDate.parse(String.valueOf(dateExpr.longValue()), | ||
DATE_FORMATTER_SHORT_YEAR); | ||
|
||
return new ExprLongValue( | ||
date.toEpochSecond(LocalTime.MIN, ZoneOffset.UTC) | ||
+ DAYS_0000_TO_1970 * SECONDS_PER_DAY); | ||
} catch (DateTimeParseException ignored) { | ||
//ignore parse exception and try next format | ||
} | ||
|
||
try { | ||
LocalDate date = LocalDate.parse(String.valueOf(dateExpr.longValue()), | ||
DATE_FORMATTER_SINGLE_DIGIT_YEAR); | ||
|
||
return new ExprLongValue( | ||
date.toEpochSecond(LocalTime.MIN, ZoneOffset.UTC) | ||
+ DAYS_0000_TO_1970 * SECONDS_PER_DAY); | ||
} catch (DateTimeParseException ignored) { | ||
//ignore parse exception and try next format | ||
} | ||
|
||
try { | ||
LocalDate date = LocalDate.parse(String.valueOf(dateExpr.longValue()), | ||
DATE_FORMATTER_NO_YEAR); | ||
|
||
return new ExprLongValue( | ||
date.toEpochSecond(LocalTime.MIN, ZoneOffset.UTC) | ||
+ DAYS_0000_TO_1970 * SECONDS_PER_DAY); | ||
} catch (DateTimeParseException ignored) { | ||
//ignore parse exception and try next format | ||
} | ||
|
||
LocalDate date = LocalDate.parse(String.valueOf(dateExpr.longValue()), | ||
DATE_FORMATTER_SINGLE_DIGIT_MONTH); | ||
|
||
return new ExprLongValue( | ||
date.toEpochSecond(LocalTime.MIN, ZoneOffset.UTC) | ||
+ DAYS_0000_TO_1970 * SECONDS_PER_DAY); | ||
} catch (DateTimeException e) { | ||
return ExprNullValue.of(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this can be refactored to reduce duplication of try catches
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Addressed in ec908ad. Github formatted the diff strangely so I would suggest just looking at the file.
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
* @return is a DateTimeFormatter that can parse the input. | ||
*/ | ||
private DateTimeFormatter getFormatter(int dateAsInt) { | ||
if (dateAsInt < 0 || dateAsInt > 99999999) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
99999999
is a magic number. Make this a static constant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: that being said, you're trying to length of the number. Why not convert it to a string and get the string length? I think that makes more sense - although less efficient
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the main reason I did it this way, for efficiency. Actually, using the length of a string might not be too bad though because it enables me to change the multiple if-statements below into a switch/case block. It would also probably be clearer for people who come back to this and read it later... I'll just try to change it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 2b37b0d
} | ||
|
||
//Check if dateAsInt is at least 6 digits long | ||
if (dateAsInt - 99999 > 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
99999
is a magic number
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 2b37b0d
} | ||
|
||
//Check if dateAsInt is at least 4 digits long | ||
if (dateAsInt - 999 > 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
999
magic number
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 2b37b0d
} | ||
|
||
//Check if dateAsInt is at least 3 digits long | ||
if (dateAsInt - 99 > 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
magic number
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 2b37b0d
Signed-off-by: GabeFernandez310 <[email protected]>
Signed-off-by: GabeFernandez310 <[email protected]>
) * Add The `TO_SECONDS` Function To The SQL Plugin (#232) * Added Basic Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added IT Test Signed-off-by: GabeFernandez310 <[email protected]> * Added Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Changed Integration Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added Test For Time Type Signed-off-by: GabeFernandez310 <[email protected]> * Added Documentation Signed-off-by: GabeFernandez310 <[email protected]> * Addressed PR Comments Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Docs and Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Checkstyle Signed-off-by: GabeFernandez310 <[email protected]> * Changed DateTimeFormatter Priority Signed-off-by: GabeFernandez310 <[email protected]> * Added More Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Updated Docs Signed-off-by: GabeFernandez310 <[email protected]> * Reworked Implementation For Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Cleanup Signed-off-by: GabeFernandez310 <[email protected]> * Added Test Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Implementation And Code Coverage Signed-off-by: GabeFernandez310 <[email protected]> * Changed getFormatter Function Signed-off-by: GabeFernandez310 <[email protected]> * Added Comments Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]> * Removed Unneeded Code Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]> (cherry picked from commit d38a6ec)
) * Add The `TO_SECONDS` Function To The SQL Plugin (#232) * Added Basic Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added IT Test Signed-off-by: GabeFernandez310 <[email protected]> * Added Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Changed Integration Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added Test For Time Type Signed-off-by: GabeFernandez310 <[email protected]> * Added Documentation Signed-off-by: GabeFernandez310 <[email protected]> * Addressed PR Comments Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Docs and Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Checkstyle Signed-off-by: GabeFernandez310 <[email protected]> * Changed DateTimeFormatter Priority Signed-off-by: GabeFernandez310 <[email protected]> * Added More Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Updated Docs Signed-off-by: GabeFernandez310 <[email protected]> * Reworked Implementation For Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Cleanup Signed-off-by: GabeFernandez310 <[email protected]> * Added Test Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Implementation And Code Coverage Signed-off-by: GabeFernandez310 <[email protected]> * Changed getFormatter Function Signed-off-by: GabeFernandez310 <[email protected]> * Added Comments Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]> * Removed Unneeded Code Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]>
) (opensearch-project#1447) * Add The `TO_SECONDS` Function To The SQL Plugin (#232) * Added Basic Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added IT Test Signed-off-by: GabeFernandez310 <[email protected]> * Added Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Changed Integration Tests Signed-off-by: GabeFernandez310 <[email protected]> * Added Test For Time Type Signed-off-by: GabeFernandez310 <[email protected]> * Added Documentation Signed-off-by: GabeFernandez310 <[email protected]> * Addressed PR Comments Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Docs and Implementation Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Checkstyle Signed-off-by: GabeFernandez310 <[email protected]> * Changed DateTimeFormatter Priority Signed-off-by: GabeFernandez310 <[email protected]> * Added More Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Updated Docs Signed-off-by: GabeFernandez310 <[email protected]> * Reworked Implementation For Formatters Signed-off-by: GabeFernandez310 <[email protected]> * Cleanup Signed-off-by: GabeFernandez310 <[email protected]> * Added Test Signed-off-by: GabeFernandez310 <[email protected]> * Fixed Implementation And Code Coverage Signed-off-by: GabeFernandez310 <[email protected]> * Changed getFormatter Function Signed-off-by: GabeFernandez310 <[email protected]> * Added Comments Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]> * Removed Unneeded Code Signed-off-by: GabeFernandez310 <[email protected]> --------- Signed-off-by: GabeFernandez310 <[email protected]> (cherry picked from commit d38a6ec)
Description
Adds the
to_seconds
function to the SQL plugin. Takes aDATE
/TIME
/DATETIME
/TIMESTAMP
/STRING
/INTEGER
representing a point in time, and converts it to seconds since the year 0. This function is based off of MySQL. For arguments of typeTIME
, the function takes the current date at the given time. ForINTEGER
, the integer is parsed as a date (e.g.950501
==1995-05-01
).Examples:
SELECT TO_SECONDS(950501);
->62966505600
SELECT TO_SECONDS('2009-11-29');
->63426672000
SELECT TO_SECONDS('2009-11-29 13:43:32');
->63426721412
Issues Resolved
#722
Check List
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.