forked from sqldelight/sqldelight
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add 5273 Postrgesql extract from temporal types (sqldelight#5274)
* Add Postgresql EXTRACT function extract temporal fields * Add tests fixture test integration test * Integration Test todo - bind arg test "?" needs cast e.g `?::TIMESTAMP` * Add TIME and DATE literals Add Support for: SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); SELECT EXTRACT(HOUR FROM TIME '10:30:45'); * Update Test.s SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); SELECT EXTRACT(HOUR FROM TIME '10:30:45'); * Add date and time literals To support Extract * Date and Time tests Literal Date and Time tests * Add Date and Time test Integration Test for Extract * Update PostgreSqlTypeResolver.kt Add error to validate temporal types * Add Interval test Integration test for INTERVAL returns double(3) * Update PostgreSql.bnf Add latest temporal fields (22)
- Loading branch information
Showing
7 changed files
with
129 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
.../app/cash/sqldelight/dialects/postgresql/grammar/mixins/ExtractTemporalExpressionMixin.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package app.cash.sqldelight.dialects.postgresql.grammar.mixins | ||
|
||
import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlExtractTemporalExpression | ||
import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl | ||
import com.alecstrong.sql.psi.core.psi.SqlExpr | ||
import com.intellij.lang.ASTNode | ||
|
||
/** | ||
* e.g access expr node for nullable type see `PostgreSqlTypeResolver extractTemporalExpression` | ||
* EXTRACT(HOUR FROM TIME '10:30:45'), | ||
* EXTRACT(DAY FROM created_date) | ||
*/ | ||
internal abstract class ExtractTemporalExpressionMixin(node: ASTNode) : | ||
SqlCompositeElementImpl(node), | ||
SqlExpr, | ||
PostgreSqlExtractTemporalExpression { | ||
val expr get() = children.filterIsInstance<SqlExpr>().first() | ||
} |
16 changes: 16 additions & 0 deletions
16
...ects/postgresql/src/testFixtures/resources/fixtures_postgresql/extract-expressions/Test.s
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
CREATE TABLE Events( | ||
start_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', start_at) IN (00,30)), | ||
end_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', end_at) IN (00,30)), | ||
duration INT GENERATED ALWAYS AS (EXTRACT(epoch FROM end_at - start_at)/ 60) stored, | ||
created_date DATE | ||
); | ||
|
||
SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:45'); | ||
|
||
SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); | ||
|
||
SELECT EXTRACT(HOUR FROM TIME '10:30:45'); | ||
|
||
SELECT EXTRACT(EPOCH FROM INTERVAL '1 day 2 hours'); | ||
|
||
SELECT EXTRACT(HOUR FROM created_date) FROM Events; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
...tion-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Extract.sq
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
CREATE TABLE Events( | ||
start_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', start_at) IN (00,30)), | ||
end_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', end_at) IN (00,30)), | ||
duration INT GENERATED ALWAYS AS (EXTRACT(epoch FROM end_at - start_at)/ 60) stored, | ||
created_date DATE | ||
); | ||
|
||
select: | ||
SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'), | ||
EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:45'), | ||
EXTRACT(EPOCH FROM INTERVAL '1 day 2 hours'), | ||
EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'), | ||
EXTRACT(MINUTE FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'), | ||
EXTRACT(DAY FROM created_date), | ||
EXTRACT(MONTH FROM DATE '2023-05-15'), | ||
EXTRACT(HOUR FROM TIME '10:30:45'), | ||
EXTRACT(MONTH FROM INTERVAL '2 years 3 months') | ||
FROM Events; | ||
|
||
insert: | ||
INSERT INTO Events (start_at, end_at, created_date) VALUES (?, ?, ?); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters