mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-09 07:29:24 +08:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
/**
|
|
* This file is part of the NocoBase (R) project.
|
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
* Authors: NocoBase Team.
|
|
*
|
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
*/
|
|
|
|
import { Processor, Instruction, JOB_STATUS, FlowNodeModel } from '@nocobase/plugin-workflow';
|
|
|
|
export default class extends Instruction {
|
|
async run(node: FlowNodeModel, input, processor: Processor) {
|
|
const dataSourceName = node.config.dataSource || 'main';
|
|
// @ts-ignore
|
|
const { db } = this.workflow.app.dataSourceManager.dataSources.get(dataSourceName).collectionManager;
|
|
if (!db) {
|
|
throw new Error(`type of data source "${node.config.dataSource}" is not database`);
|
|
}
|
|
const sql = processor.getParsedValue(node.config.sql || '', node.id).trim();
|
|
if (!sql) {
|
|
return {
|
|
status: JOB_STATUS.RESOLVED,
|
|
};
|
|
}
|
|
|
|
const [result = null, meta = null] =
|
|
(await db.sequelize.query(sql, {
|
|
transaction: this.workflow.useDataSourceTransaction(dataSourceName, processor.transaction),
|
|
// plain: true,
|
|
// model: db.getCollection(node.config.collection).model
|
|
})) ?? [];
|
|
|
|
return {
|
|
result: node.config.withMeta ? [result, meta] : result,
|
|
status: JOB_STATUS.RESOLVED,
|
|
};
|
|
}
|
|
}
|