Skip to content
Open
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ celerybeat.pid
**/node_modules
node_modules
.vscode/*
.cursor/*
*.pyc
.vscode.env

Expand Down
17 changes: 1 addition & 16 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -1,19 +1,4 @@
{
"tabWidth": 4,
"singleQuote": true,
"importOrder": [
"<THIRD_PARTY_MODULES>",
"^[a-zA-Z]+/(.*)$",
"^(..?/)+[a-zA-Z/]+$",
"^./(.*).scss$"
],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true,
"importOrderCaseInsensitive": true,
"importOrderParserPlugins": [
"typescript",
"jsx",
"classProperties",
"decorators-legacy"
]
"singleQuote": true
}
21 changes: 15 additions & 6 deletions querybook/webapp/lib/query-result/detector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { isNumeric } from 'lib/utils/number';
import { isCellValNull } from './helper';
import { IColumnDetector } from './types';

const columnDetectors: IColumnDetector[] = [
const defaultColumnDetectors: IColumnDetector[] = [
{
type: 'string',
priority: 0,
Expand Down Expand Up @@ -61,11 +61,16 @@ const columnDetectors: IColumnDetector[] = [
return false;
},
},
]
.concat(window.CUSTOM_COLUMN_DETECTORS ?? [])
.sort((a, b) => b.priority - a.priority) as IColumnDetector[];
];

const getCustomColumnDetectors = (): IColumnDetector[] =>
window.CUSTOM_COLUMN_DETECTORS ?? [];

export function getColumnTypesForTable(columns: string[], rows: any[][]) {
const sortedColumnDetectors = (defaultColumnDetectors as IColumnDetector[])
.concat(getCustomColumnDetectors())
.sort((a, b) => b.priority - a.priority);

const sizeOfSample = Math.max(
DETECTOR_MIN_SAMPLE_SIZE,
Math.floor(rows.length / 100)
Expand All @@ -76,11 +81,15 @@ export function getColumnTypesForTable(columns: string[], rows: any[][]) {
.filter((value) => !isCellValNull(value));

const sampledRowValues = sampleSize(notNullRowValues, sizeOfSample);
return findColumnType(colName, sampledRowValues);
return findColumnType(colName, sampledRowValues, sortedColumnDetectors);
});
}

export function findColumnType(columnName: string, values: any[]) {
export function findColumnType(
columnName: string,
values: any[],
columnDetectors: IColumnDetector[]
) {
for (const detector of columnDetectors) {
if (detector.checker(columnName, values)) {
return detector.type;
Expand Down
51 changes: 29 additions & 22 deletions querybook/webapp/lib/query-result/transformer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const ReactJsonTheme: ThemeObject = {
base0F: 'var(--text)', // int value
};

const queryResultTransformers: IColumnTransformer[] = [
const defaultQueryResultTransformers: IColumnTransformer[] = [
{
key: 'with-comma',
name: 'With Comma',
Expand Down Expand Up @@ -127,31 +127,38 @@ const queryResultTransformers: IColumnTransformer[] = [
}
},
},
]
.concat(window.CUSTOM_COLUMN_TRANSFORMERS ?? [])
.sort((a, b) => b.priority - a.priority) as IColumnTransformer[];
];

const transformersForType: Record<
string,
[IColumnTransformer[], IColumnTransformer | null]
> = queryResultTransformers.reduce(
(hash: typeof transformersForType, transformer) => {
for (const type of transformer.appliesToType) {
if (!(type in hash)) {
hash[type] = [[], null];
}
const getCustomColumnTransformers = (): IColumnTransformer[] =>
window.CUSTOM_COLUMN_TRANSFORMERS ?? [];

export function getTransformersForType(colType: string) {
const queryResultTransformers = (
defaultQueryResultTransformers as IColumnTransformer[]
)
.concat(getCustomColumnTransformers())
.sort((a, b) => b.priority - a.priority);

const transformersForType: Record<
string,
[IColumnTransformer[], IColumnTransformer | null]
> = queryResultTransformers.reduce(
(hash: typeof transformersForType, transformer) => {
for (const type of transformer.appliesToType) {
if (!(type in hash)) {
hash[type] = [[], null];
}

hash[type][0].push(transformer);
if (transformer.auto && hash[type][1] == null) {
hash[type][1] = transformer;
hash[type][0].push(transformer);
if (transformer.auto && hash[type][1] == null) {
hash[type][1] = transformer;
}
}
}

return hash;
},
{}
);
return hash;
},
{}
);

export function getTransformersForType(colType: string) {
return transformersForType[colType] ?? [[], null];
}
Loading