mirror of
https://github.com/ershisan99/db-studio.git
synced 2025-12-16 20:59:23 +00:00
add postgres where clause for table data query.
add ui for where clause
This commit is contained in:
@@ -24,7 +24,11 @@ export interface Driver {
|
||||
): Promise<any[]>;
|
||||
getTableData(
|
||||
credentials: Credentials,
|
||||
args: WithSortPagination<{ tableName: string; dbName: string }>,
|
||||
args: WithSortPagination<{
|
||||
tableName: string;
|
||||
dbName: string;
|
||||
whereQuery?: string;
|
||||
}>,
|
||||
): Promise<{
|
||||
count: number;
|
||||
data: Record<string, any>[];
|
||||
|
||||
@@ -159,22 +159,31 @@ export class PostgresDriver implements Driver {
|
||||
page,
|
||||
sortDesc,
|
||||
sortField,
|
||||
}: WithSortPagination<{ tableName: string; dbName: string }>,
|
||||
whereQuery,
|
||||
}: WithSortPagination<{
|
||||
tableName: string;
|
||||
dbName: string;
|
||||
whereQuery?: string;
|
||||
}>,
|
||||
) {
|
||||
const sql = await this.queryRunner(credentials);
|
||||
|
||||
const offset = (perPage * page).toString();
|
||||
const rows = sql`
|
||||
SELECT COUNT(*)
|
||||
FROM ${sql(dbName)}.${sql(tableName)}`;
|
||||
|
||||
const tables = sql`
|
||||
const rowsQuery = `
|
||||
SELECT COUNT(*)
|
||||
FROM "${dbName}"."${tableName}"
|
||||
${whereQuery ? `WHERE ${whereQuery}` : ""}`;
|
||||
|
||||
const tablesQuery = `
|
||||
SELECT *
|
||||
FROM ${sql(dbName)}.${sql(tableName)}
|
||||
${sortField ? sql`ORDER BY ${sql(sortField)} ${sortDesc ? sql`DESC` : sql`ASC`}` : sql``}
|
||||
FROM "${dbName}"."${tableName}"
|
||||
${whereQuery ? `WHERE ${whereQuery}` : ""}
|
||||
${sortField ? `ORDER BY "${sortField}" ${sortDesc ? "DESC" : "ASC"}` : ""}
|
||||
LIMIT ${perPage} OFFSET ${offset}
|
||||
`;
|
||||
|
||||
const rows = sql.unsafe(rowsQuery);
|
||||
const tables = sql.unsafe(tablesQuery);
|
||||
const [[count], data] = await Promise.all([rows, tables]);
|
||||
|
||||
void sql.end();
|
||||
|
||||
@@ -95,7 +95,13 @@ const app = new Elysia({ prefix: "/api" })
|
||||
"/databases/:dbName/tables/:tableName/data",
|
||||
async ({ query, params, jwt, set, cookie: { auth } }) => {
|
||||
const { tableName, dbName } = params;
|
||||
const { perPage = "50", page = "0", sortField, sortDesc } = query;
|
||||
const {
|
||||
perPage = "50",
|
||||
page = "0",
|
||||
sortField,
|
||||
sortDesc,
|
||||
whereQuery,
|
||||
} = query;
|
||||
const credentials = await jwt.verify(auth.value);
|
||||
|
||||
if (!credentials) {
|
||||
@@ -111,6 +117,7 @@ const app = new Elysia({ prefix: "/api" })
|
||||
page: Number.parseInt(page, 10),
|
||||
sortField,
|
||||
sortDesc: sortDesc === "true",
|
||||
whereQuery,
|
||||
});
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user