多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

82 lines
2.2 KiB

import Noco from '../Noco';
import { CacheGetType, CacheScope, MetaTable } from '../utils/globals';
import NocoCache from '../cache/NocoCache';
import { extractProps } from '../helpers/extractProps';
import Column from './Column';
import type { RollupType } from 'nocodb-sdk';
export const ROLLUP_FUNCTIONS = <const>[
'count',
'min',
'max',
'avg',
'countDistinct',
'sumDistinct',
'avgDistinct',
];
export default class RollupColumn implements RollupType {
id: string;
fk_column_id;
fk_relation_column_id;
fk_rollup_column_id;
rollup_function: (typeof ROLLUP_FUNCTIONS)[number];
constructor(data: Partial<RollupColumn>) {
Object.assign(this, data);
}
public static async insert(
data: Partial<RollupColumn>,
ncMeta = Noco.ncMeta,
) {
const insertObj = extractProps(data, [
'fk_column_id',
'fk_relation_column_id',
'fk_rollup_column_id',
'rollup_function',
]);
await ncMeta.metaInsert2(null, null, MetaTable.COL_ROLLUP, insertObj);
await NocoCache.appendToList(
CacheScope.COL_ROLLUP,
[data.fk_rollup_column_id],
`${CacheScope.COL_ROLLUP}:${data.fk_column_id}`,
);
await NocoCache.appendToList(
CacheScope.COL_ROLLUP,
[data.fk_relation_column_id],
`${CacheScope.COL_ROLLUP}:${data.fk_column_id}`,
);
return this.read(data.fk_column_id, ncMeta);
}
public static async read(columnId: string, ncMeta = Noco.ncMeta) {
let column =
columnId &&
(await NocoCache.get(
`${CacheScope.COL_ROLLUP}:${columnId}`,
CacheGetType.TYPE_OBJECT,
));
if (!column) {
column = await ncMeta.metaGet2(
null, //,
null, //model.db_alias,
MetaTable.COL_ROLLUP,
{ fk_column_id: columnId },
);
await NocoCache.set(`${CacheScope.COL_ROLLUP}:${columnId}`, column);
}
return column ? new RollupColumn(column) : null;
}
public async getRollupColumn(ncMeta = Noco.ncMeta): Promise<Column> {
return Column.get({ colId: this.fk_rollup_column_id }, ncMeta);
}
public async getRelationColumn(ncMeta = Noco.ncMeta): Promise<Column> {
return Column.get({ colId: this.fk_relation_column_id }, ncMeta);
}
}