Convert date to timestamptz

Jjamalabe4/20/2023
Hello. I'm trying to convert the following query from TypeORM querybuilder to Kysely:
itemRepository
.createQueryBuilder()
.select()
.where({ id })
.andWhere('sys_period @> :timestamp::timestamptz', { timestamp })
.getOne();

My attempt:
db.selectFrom('item')
.selectAll()
.where('id', '=', id)
.where('sys_period', '@>', [timestamp]);
However type is mismatched, I need to somehow convert the Date to a timestamptz. Any idea where I could define such mapping?
KNKristian Notari4/20/2023
In case of need you can always rely on kysely sql to create raw sql. I mean that you can always cast values to something using raw sql like:
sql<YourTimestamptzType>`${timestamp}::timestamptz`


However, in your case, it really depends how you're mapping table types. Here sys_period I imagine is a column of type timestamptz. How have you mapped it as type in typescript? It depends on the driver you're using, but it probabily would end up being a Date itself, so you can type it that way and then you get the comparison working again
Jjamalabe4/20/2023
Column sys_period is defined that way (it's a tstzrange, I want to use the @> to check if it contains the date):
export const sysPeriodSettings: ColumnOptions & PrimaryColumnOptions = { name: 'sys_period', type: 'tstzrange', nullable: false, default: () => 'tstzrange(now(), null)', }; // In entity: @PrimaryColumn(sysPeriodSettings) sysPeriod: string; // A string because TypeORM does not support timestamp ranges
How mapping is done is a good question as at the moment it's magically handled by TypeORM.
KNKristian Notari4/20/2023
Ok, but how's going to be handled with kysely and the driver you're going to use? Cause if it's going to be a string aswell, I don't know what the kysely @> operator is going to enforce the right side to be. Whatever it's going to want as right side, you can always provide that with raw sql as I showed to you earlier
db.selectFrom('item')
        .selectAll()
        .where('id', '=', id)
        .where('sys_period', '@>', sql<WhateverYouNeed>`${timestamp}::timestamptz`);
KNKristian Notari4/20/2023
and you could create yourself a little helper function to help you go from Date to RawBuilder<WhateverYouNeed> by using raw sql template underneath