drizzle-team / drizzle-team/drizzle-orm

[FEATURE]: Allow specifying types for sql raw statements

Open
#4,087 1 comment 1 reaction 0 assignees View on GitHub
enhancement priority qb/crud qb/execute
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.