mirror of https://github.com/nocodb/nocodb
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
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); |
|
} |
|
}
|
|
|