{"version":3,"sources":["../../src/postgres/countDistinct.ts"],"sourcesContent":["import type { PgTableWithColumns } from 'drizzle-orm/pg-core'\n\nimport { count, sql } from 'drizzle-orm'\n\nimport type { BasePostgresAdapter, CountDistinct } from './types.js'\n\nexport const countDistinct: CountDistinct = async function countDistinct(\n this: BasePostgresAdapter,\n { column, db, joins, tableName, where },\n) {\n // When we don't have any joins - use a simple COUNT(*) query.\n if (joins.length === 0) {\n const countResult = await db\n .select({\n count: column ? count(sql`DISTINCT ${column}`) : count(),\n })\n .from(this.tables[tableName])\n .where(where)\n\n return Number(countResult?.[0]?.count ?? 0)\n }\n\n let query = db\n .select({\n count: sql`COUNT(1) OVER()`,\n })\n .from(this.tables[tableName])\n .where(where)\n .groupBy(column || this.tables[tableName].id)\n .limit(1)\n .$dynamic()\n\n joins.forEach(({ type, condition, table }) => {\n query = query[type ?? 'leftJoin'](table as PgTableWithColumns, condition)\n })\n\n // When we have any joins, we need to count each individual ID only once.\n // COUNT(*) doesn't work for this well in this case, as it also counts joined tables.\n // SELECT (COUNT DISTINCT id) has a very slow performance on large tables.\n // Instead, COUNT (GROUP BY id) can be used which is still slower than COUNT(*) but acceptable.\n const countResult = await query\n\n return Number(countResult?.[0]?.count ?? 0)\n}\n"],"names":["count","sql","countDistinct","column","db","joins","tableName","where","length","countResult","select","from","tables","Number","query","groupBy","id","limit","$dynamic","forEach","type","condition","table"],"mappings":"AAEA,SAASA,KAAK,EAAEC,GAAG,QAAQ,cAAa;AAIxC,OAAO,MAAMC,gBAA+B,eAAeA,cAEzD,EAAEC,MAAM,EAAEC,EAAE,EAAEC,KAAK,EAAEC,SAAS,EAAEC,KAAK,EAAE;IAEvC,8DAA8D;IAC9D,IAAIF,MAAMG,MAAM,KAAK,GAAG;QACtB,MAAMC,cAAc,MAAML,GACvBM,MAAM,CAAC;YACNV,OAAOG,SAASH,MAAMC,GAAG,CAAC,SAAS,EAAEE,OAAO,CAAC,IAAIH;QACnD,GACCW,IAAI,CAAC,IAAI,CAACC,MAAM,CAACN,UAAU,EAC3BC,KAAK,CAACA;QAET,OAAOM,OAAOJ,aAAa,CAAC,EAAE,EAAET,SAAS;IAC3C;IAEA,IAAIc,QAAQV,GACTM,MAAM,CAAC;QACNV,OAAOC,GAAG,CAAC,eAAe,CAAC;IAC7B,GACCU,IAAI,CAAC,IAAI,CAACC,MAAM,CAACN,UAAU,EAC3BC,KAAK,CAACA,OACNQ,OAAO,CAACZ,UAAU,IAAI,CAACS,MAAM,CAACN,UAAU,CAACU,EAAE,EAC3CC,KAAK,CAAC,GACNC,QAAQ;IAEXb,MAAMc,OAAO,CAAC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,KAAK,EAAE;QACvCR,QAAQA,KAAK,CAACM,QAAQ,WAAW,CAACE,OAAkCD;IACtE;IAEA,yEAAyE;IACzE,qFAAqF;IACrF,0EAA0E;IAC1E,+FAA+F;IAC/F,MAAMZ,cAAc,MAAMK;IAE1B,OAAOD,OAAOJ,aAAa,CAAC,EAAE,EAAET,SAAS;AAC3C,EAAC"}