Skip to content

Commit

Permalink
Merge pull request #397 from BranislavLazic/add-pg-generate-series
Browse files Browse the repository at this point in the history
Add Postgres GENERATE_SERIES function
  • Loading branch information
go-jet authored Oct 28, 2024
2 parents 02f19ff + dfafd14 commit bee431f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
9 changes: 9 additions & 0 deletions postgres/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,15 @@ func DATE_TRUNC(field unit, source Expression, timezone ...string) TimestampExpr
return jet.NewTimestampFunc("DATE_TRUNC", jet.FixedLiteral(unitToString(field)), source)
}

// GENERATE_SERIES generates a series of values from start to stop, with a step size of step.
func GENERATE_SERIES(start Expression, stop Expression, step ...Expression) Expression {
if len(step) > 0 {
return jet.NewFunc("GENERATE_SERIES", []Expression{start, stop, step[0]}, nil)
}

return jet.NewFunc("GENERATE_SERIES", []Expression{start, stop}, nil)
}

// --------------- Conditional Expressions Functions -------------//

// COALESCE function returns the first of its arguments that is not null.
Expand Down
13 changes: 13 additions & 0 deletions postgres/functions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,16 @@ func TestDATE_TRUNC(t *testing.T) {
"DATE_TRUNC('DAY', NOW() + INTERVAL '1 HOUR', 'Australia/Sydney')",
)
}

func TestGENERATE_SERIES(t *testing.T) {
assertSerialize(
t,
GENERATE_SERIES(NOW(), NOW().ADD(INTERVAL(10, DAY))),
"GENERATE_SERIES(NOW(), NOW() + INTERVAL '10 DAY')",
)
assertSerialize(
t,
GENERATE_SERIES(NOW(), NOW().ADD(INTERVAL(10, DAY)), INTERVAL(2, DAY)),
"GENERATE_SERIES(NOW(), NOW() + INTERVAL '10 DAY', INTERVAL '2 DAY')",
)
}

0 comments on commit bee431f

Please sign in to comment.