Created by adam186 63 days ago Viewed 535 times 0 Points
No comments yet
import { Resource } from "https://deno.land/x/windmill@v1.70.1/mod.ts";
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";
/**
* @param count Count algorithm to use to count rows in the table or view.
* `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the hood.
* `"planned"`: Approximated but fast count algorithm. Uses the Postgres statistics under the hood.
* `"estimated"`: Uses exact count for low numbers and planned count for high numbers.
*
* @param head When set to `true`, `data` will not be returned.
* Useful if you only need the count.
*
* @param filter Learn more at https://supabase.com/docs/reference/javascript/filter
*
* @param order Learn more at https://supabase.com/docs/reference/javascript/order
*
* @param limit Learn more at https://supabase.com/docs/reference/javascript/limit
*/
export async function main(
auth: Resource<"supabase">,
table: string,
columns?: string,
count?: "exact" | "planned" | "estimated",
head?: boolean,
filter?: {
column: string;
operator: string;
value: any;
},
order?: {
column: string;
foreignTable: string;
ascending?: boolean;
nullsFirst?: boolean;
},
limit?: {
count: number;
foreignTable?: string;
},
) {
const client = createClient(auth.url, auth.key);
const options = (head || count) ? { head, count } : undefined;
let query = client.from(table).select(columns || undefined, options);
if (filter?.column) {
query = query.filter(filter.column, filter.operator, filter.value);
}
if (order?.column) {
const { column, ...options } = order;
query = query.order(column, options);
}
if (limit?.count) {
const { count, foreignTable } = limit;
query = query.limit(count, foreignTable ? { foreignTable } : undefined);
}
return await query;
}
No comments yet