Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added more hooks to tad and made existing ones more expressive #272

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ node_modules
.DS_Store
npm-debug.log
.vscode
lerna-debug.log
lerna-debug.log
.idea
80 changes: 51 additions & 29 deletions packages/tadviewer/src/PivotRequester.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import log from "loglevel";
import * as reltab from "reltab";
import * as aggtree from "aggtree";
import { PagedDataView, DataRow } from "./PagedDataView";
import { ViewParams } from "./ViewParams";
import { AppState } from "./AppState";
import { QueryView } from "./QueryView";
import {
ReltabConnection,
DataSourceId,
DataSourceConnection,
getColumnHistogramMap,
ColumnHistogramMap,
Expand Down Expand Up @@ -97,15 +94,25 @@ const fastFilterRowCount = async (
baseRowCount: number,
filterExp: reltab.FilterExp,
filterQuery: reltab.QueryExp,
onViewRowCount?: (query: reltab.QueryExp) => void
onViewRowCount?: (
query: reltab.QueryExp,
type: "filtered" | "unfiltered" | "view"
) => void,
onViewRowCountResolved?: (
query: reltab.QueryExp,
rowCount: number,
type: "filtered" | "unfiltered" | "view"
) => void
): Promise<number> => {
if (filterExp.opArgs.length === 0) {
// short circuit!
return baseRowCount;
}

onViewRowCount?.(filterQuery);
return rt.rowCount(filterQuery);
onViewRowCount?.(filterQuery, "filtered");
const resolvedNumber = await rt.rowCount(filterQuery);
onViewRowCountResolved?.(filterQuery, resolvedNumber, "filtered");
return resolvedNumber;
};
/*
* hacky opt for using filterRowCount as viewRowCount if not pivoted
Expand All @@ -116,15 +123,25 @@ const fastViewRowCount = async (
filterRowCount: number,
vpivots: Array<string>,
viewQuery: reltab.QueryExp,
onViewRowCount?: (query: reltab.QueryExp) => void
onViewRowCount?: (
query: reltab.QueryExp,
type: "filtered" | "unfiltered" | "view"
) => void,
onViewRowCountResolved?: (
query: reltab.QueryExp,
rowCount: number,
type: "filtered" | "unfiltered" | "view"
) => void
): Promise<number> => {
if (vpivots.length === 0) {
// short circuit!
return filterRowCount;
}

onViewRowCount?.(viewQuery);
return rt.rowCount(viewQuery);
onViewRowCount?.(viewQuery, "view");
const resolvedNumber = await rt.rowCount(viewQuery);
onViewRowCountResolved?.(viewQuery, resolvedNumber, "view");
return resolvedNumber;
};
/**
* Use the current ViewParams to construct a QueryExp to send to
Expand All @@ -140,12 +157,15 @@ const requestQueryView = async (
viewParams: ViewParams,
showRecordCount: boolean,
prevQueryView: QueryView | null | undefined,
onViewQuery?: (
onViewRowCount?: (
query: reltab.QueryExp,
offset?: number,
limit?: number
type: "filtered" | "unfiltered" | "view"
) => void,
onViewRowCount?: (query: reltab.QueryExp) => void
onViewRowCountResolved?: (
query: reltab.QueryExp,
rowCount: number,
type: "filtered" | "unfiltered" | "view"
) => void
): Promise<QueryView> => {
const schemaCols = baseSchema.columns;
const aggMap: any = {};
Expand All @@ -168,21 +188,24 @@ const requestQueryView = async (
);
const treeQuery = await ptree.getSortedTreeQuery(viewParams.openPaths); // const t0 = performance.now() // eslint-disable-line

onViewRowCount?.(baseQuery);
onViewRowCount?.(baseQuery, "unfiltered");
const baseRowCount = await rt.rowCount(baseQuery);
onViewRowCountResolved?.(baseQuery, baseRowCount, "unfiltered");
const filterRowCount = await fastFilterRowCount(
rt,
baseRowCount,
viewParams.filterExp,
filterQuery,
onViewRowCount
onViewRowCount,
onViewRowCountResolved
);
const rowCount = await fastViewRowCount(
rt,
filterRowCount,
viewParams.vpivots,
treeQuery,
onViewRowCount
onViewRowCount,
onViewRowCountResolved
); // const t1 = performance.now() // eslint-disable-line
// console.log('gathering row counts took ', (t1 - t0) / 1000, ' sec')

Expand Down Expand Up @@ -285,23 +308,24 @@ export class PivotRequester {
errorCallback?: (e: Error) => void;
setLoadingCallback: (loading: boolean) => void;

onViewQuery?: (
query: reltab.QueryExp,
offset?: number,
limit?: number
) => void;
onViewRowCount?: (query: reltab.QueryExp) => void;

constructor(
stateRef: oneref.StateRef<AppState>,
errorCallback?: (e: Error) => void,
setLoadingCallback?: (loading: boolean) => void,
onViewQuery?: (
public onViewQuery?: (
query: reltab.QueryExp,
offset?: number,
limit?: number
) => void,
onViewRowCount?: (query: reltab.QueryExp) => void
public onViewRowCount?: (
query: reltab.QueryExp,
type: "filtered" | "unfiltered" | "view"
) => void,
public onViewRowCountResolved?: (
query: reltab.QueryExp,
rowCount: number,
type: "filtered" | "unfiltered" | "view"
) => void
) {
const appState = mutableGet(stateRef);
this.pendingQueryRequest = null;
Expand All @@ -312,8 +336,6 @@ export class PivotRequester {
this.pendingLimit = 0;
this.errorCallback = errorCallback;
this.setLoadingCallback = setLoadingCallback || noopSetLoadingCallback;
this.onViewQuery = onViewQuery;
this.onViewRowCount = onViewRowCount;

addStateChangeListener(stateRef, (_) => {
this.onStateChange(stateRef);
Expand Down Expand Up @@ -411,8 +433,8 @@ export class PivotRequester {
this.pendingViewParams,
appState.showRecordCount,
queryView,
this.onViewQuery,
this.onViewRowCount
this.onViewRowCount,
this.onViewRowCountResolved
);
this.pendingQueryRequest = qreq;
this.pendingDataRequest = qreq
Expand Down
17 changes: 13 additions & 4 deletions packages/tadviewer/src/components/TadViewerPane.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
/**
* A Tad Viewer pane for embedding a tad view of a SQL query on a data source
*/
import log from "loglevel";
import { mkRef, mutableGet, refContainer, StateRef } from "oneref";
import * as React from "react";
import { useMemo, useRef, useState } from "react";
import { useRef, useState } from "react";
import {
DataSourceConnection,
DataSourcePath,
Expand Down Expand Up @@ -75,7 +74,15 @@ export interface TadViewerPaneProps {
rightFooterSlot?: JSX.Element;
onFilter?: (filterExp: FilterExp) => void;
onViewQuery?: (query: QueryExp, offset?: number, limit?: number) => void;
onViewRowCount?: (query: QueryExp) => void;
onViewRowCount?: (
query: QueryExp,
type: "filtered" | "unfiltered" | "view"
) => void;
onViewRowCountResolved?: (
query: QueryExp,
rowCount: number,
type: "filtered" | "unfiltered" | "view"
) => void;
}

export function TadViewerPane({
Expand All @@ -89,6 +96,7 @@ export function TadViewerPane({
onFilter,
onViewQuery,
onViewRowCount,
onViewRowCountResolved,
}: TadViewerPaneProps): JSX.Element | null {
const [appStateRef, setAppStateRef] = useState<StateRef<AppState> | null>(
null
Expand Down Expand Up @@ -118,7 +126,8 @@ export function TadViewerPane({
errorCallback,
setLoadingCallback,
onViewQuery,
onViewRowCount
onViewRowCount,
onViewRowCountResolved
);
setPivotRequester(preq);
}
Expand Down
Loading