drizzle-team / drizzle-team/drizzle-orm
[FEATURE]: Allow specifying types for sql raw statements
- Dominant language
- TypeScript
- Stars
- 35.8k
- Forks
- 1.6k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 4
Description
### Feature hasn't been suggested before.
- [x] I have verified this feature I'm about to request hasn't been suggested before.
### Describe the enhancement you want to request
How do I specify the types for a raw sql statement? I have the following code, but I have to override the types to unknown before I can get the types out.
```typescript
interface SQLResults {
numResponses: number;
opsTeam: number;
}
const csFeedbackMTD = sql`
SELECT a.ops_team AS opsTeam, COUNT(DISTINCT(a.customer_fk)) AS numResponses
FROM (
SELECT ${eventsTable.customer}, ${eventsTable.opsTeam}
FROM ${eventsTable}
WHERE
${eventsTable.type} IN(8, 14) AND
${eventsTable.effectiveDate} BETWEEN ${format(startDate, "yyyy-MM-dd")} AND ${format(endDate, "yyyy-MM-dd")}
UNION ALL
SELECT ${eventsTable.customer}, ${eventsTable.opsTeam}
FROM ${eventsTable}
WHERE
${eventsTable.type} = 6 AND
${eventsTable.scoredByEntity} = 1 AND
${eventsTable.effectiveDate} BETWEEN ${format(startDate, "yyyy-MM-dd")} AND ${format(endDate, "yyyy-MM-dd")}
) a
LEFT OUTER JOIN ${customersTable} ON a.customer_fk = ${customersTable.id}
WHERE
${customersTable.startDate} < DATE_SUB(CURDATE(),INTERVAL 10 DAY)
AND
a.ops_team IS NOT NULL
GROUP BY a.ops_team`;
// This type override is wrong, this is because the database.execute type is wrong
const [result] = (await database.execute(csFeedbackMTD)) as unknown as [SQLResults[]];
// I've also tries this, but it isn't working either
//const [result] = await database.execute(csFeedbackMTD);
```
Contributor guide
Assessment
This issue has not been assessed yet.