Why does drizzle want to request the same column twice from db?
So basically this is my function:
and what I get from logger is this query
async getUserByToken({ token }: { token: string }) {
const sq = this.db
.select()
.from(bansTable)
.where(gt(bansTable.issuedUntil, dayjs().toDate()))
.as("sq");
const data = await this.db
.select({
id: sessionsTable.id,
token: sessionsTable.token,
refreshToken: sessionsTable.refreshToken,
rejectedAt: sessionsTable.rejectedAt,
createdAt: sessionsTable.createdAt,
user: jsonBuildObject({
id: usersTable.id,
username: usersTable.username,
discordUsername: usersTable.discordUsername,
discordId: usersTable.discordId,
createdAt: usersTable.createdAt,
email: usersTable.email,
}),
bans: jsonAggBuildObject({
id: sq.id,
issuedTo: sq.issuedTo,
issuedUntil: sq.issuedUntil,
issuedBy: sq.issuedBy,
reason: sq.reason,
issuedAt: sq.issuedAt,
}),
})
.from(sessionsTable)
.leftJoin(usersTable, eq(sessionsTable.userId, usersTable.id))
.leftJoin(sq, eq(usersTable.id, sq.issuedTo))
.where(eq(sessionsTable.token, token))
.groupBy(usersTable.id, sessionsTable.id);
return takeFirst(data);
}
async getUserByToken({ token }: { token: string }) {
const sq = this.db
.select()
.from(bansTable)
.where(gt(bansTable.issuedUntil, dayjs().toDate()))
.as("sq");
const data = await this.db
.select({
id: sessionsTable.id,
token: sessionsTable.token,
refreshToken: sessionsTable.refreshToken,
rejectedAt: sessionsTable.rejectedAt,
createdAt: sessionsTable.createdAt,
user: jsonBuildObject({
id: usersTable.id,
username: usersTable.username,
discordUsername: usersTable.discordUsername,
discordId: usersTable.discordId,
createdAt: usersTable.createdAt,
email: usersTable.email,
}),
bans: jsonAggBuildObject({
id: sq.id,
issuedTo: sq.issuedTo,
issuedUntil: sq.issuedUntil,
issuedBy: sq.issuedBy,
reason: sq.reason,
issuedAt: sq.issuedAt,
}),
})
.from(sessionsTable)
.leftJoin(usersTable, eq(sessionsTable.userId, usersTable.id))
.leftJoin(sq, eq(usersTable.id, sq.issuedTo))
.where(eq(sessionsTable.token, token))
.groupBy(usersTable.id, sessionsTable.id);
return takeFirst(data);
}
2 Replies
Query: select "sessions"."id", "sessions"."token", "sessions"."refresh_token", "sessions"."rejected_at", "sessions"."created_at", json_build_object('id',"users"."id",'username',"users"."username",'discordUsername',"users"."discord_username",'discordId',"users"."discord_id",'createdAt',"users"."created_at",'email',"users"."email"), coalesce(
json_agg(json_build_object('id',"sq"."id",'issuedTo',"sq"."issued_to",'issuedUntil',"sq"."issued_at",'issuedBy',"sq"."issued_by",'reason',"sq"."reason",'issuedAt',"sq"."issued_at")
)
FILTER (WHERE "sq"."id" IS NOT NULL AND "sq"."issued_to" IS NOT NULL AND "sq"."issued_at" IS NOT NULL AND "sq"."issued_by" IS NOT NULL AND "sq"."reason" IS NOT NULL AND "sq"."issued_at" IS NOT NULL)
,'[]') from "sessions" left join "users" on "sessions"."user_id" = "users"."id" left join (select "id", "issued_at", "issued_at", "issued_by", "issued_to", "reason" from "bans" where "bans"."issued_at" > $1) "sq" on "users"."id" = "sq"."issued_to" where "sessions"."token" = $2 group by "users"."id", "sessions"."id"
Query: select "sessions"."id", "sessions"."token", "sessions"."refresh_token", "sessions"."rejected_at", "sessions"."created_at", json_build_object('id',"users"."id",'username',"users"."username",'discordUsername',"users"."discord_username",'discordId',"users"."discord_id",'createdAt',"users"."created_at",'email',"users"."email"), coalesce(
json_agg(json_build_object('id',"sq"."id",'issuedTo',"sq"."issued_to",'issuedUntil',"sq"."issued_at",'issuedBy',"sq"."issued_by",'reason',"sq"."reason",'issuedAt',"sq"."issued_at")
)
FILTER (WHERE "sq"."id" IS NOT NULL AND "sq"."issued_to" IS NOT NULL AND "sq"."issued_at" IS NOT NULL AND "sq"."issued_by" IS NOT NULL AND "sq"."reason" IS NOT NULL AND "sq"."issued_at" IS NOT NULL)
,'[]') from "sessions" left join "users" on "sessions"."user_id" = "users"."id" left join (select "id", "issued_at", "issued_at", "issued_by", "issued_to", "reason" from "bans" where "bans"."issued_at" > $1) "sq" on "users"."id" = "sq"."issued_to" where "sessions"."token" = $2 group by "users"."id", "sessions"."id"
Check your table definition for
bansTable
you might have two columns that although they look to have different name, the database name might be issues_at
When I say the database name, I mean the string you pass as the first parameter to the column definition