Skip to content

Commit

Permalink
fix(formula): fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
wpxp123456 authored and wpxp123456 committed Oct 18, 2024
1 parent f9c6148 commit 30c4d01
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 21 deletions.
24 changes: 24 additions & 0 deletions packages/engine-formula/src/basics/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ type DatabaseValueType = string | number | null;
export function checkDatabase(database: BaseValueObject) {
const databaseValues: DatabaseValueType[][] = [];

if (database.isError()) {
return {
isError: true,
errorObject: database as ErrorValueObject,
databaseValues,
};
}

const rowCount = database.isArray() ? (database as ArrayValueObject).getRowCount() : 1;
const columnCount = database.isArray() ? (database as ArrayValueObject).getColumnCount() : 1;

Expand Down Expand Up @@ -74,6 +82,14 @@ export function checkDatabase(database: BaseValueObject) {
export function checkField(field: BaseValueObject, database: DatabaseValueType[][]) {
let fieldIndex: number = -1;

if (field.isError()) {
return {
isError: true,
errorObject: field as ErrorValueObject,
fieldIndex,
};
}

const rowCount = field.isArray() ? (field as ArrayValueObject).getRowCount() : 1;
const columnCount = field.isArray() ? (field as ArrayValueObject).getColumnCount() : 1;

Expand Down Expand Up @@ -135,6 +151,14 @@ export function checkField(field: BaseValueObject, database: DatabaseValueType[]
export function checkCriteria(criteria: BaseValueObject) {
const criteriaValues: DatabaseValueType[][] = [];

if (criteria.isError()) {
return {
isError: true,
errorObject: criteria as ErrorValueObject,
criteriaValues,
};
}

const rowCount = criteria.isArray() ? (criteria as ArrayValueObject).getRowCount() : 1;
const columnCount = criteria.isArray() ? (criteria as ArrayValueObject).getColumnCount() : 1;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@

import { describe, expect, it } from 'vitest';

import { ArrayValueObject, transformToValueObject } from '../../../../engine/value-object/array-value-object';
import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object';
import { getObjectValue } from '../../../__tests__/create-function-test-bed';
import { FUNCTION_NAMES_LOGICAL } from '../../function-names';
import { If } from '../index';
import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object';
import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object';

describe('Test if function', () => {
const testFunction = new If(FUNCTION_NAMES_LOGICAL.IF);
Expand All @@ -29,15 +30,15 @@ describe('Test if function', () => {
const logicTest = BooleanValueObject.create(true);
const valueIfTrue = NumberValueObject.create(1);
const result = testFunction.calculate(logicTest, valueIfTrue);
expect(result.getValue()).toBe(1);
expect(getObjectValue(result)).toBe(1);
});

it('LogicalTest and valueIfTrue and valueIfFalse', () => {
const logicTest = BooleanValueObject.create(false);
const valueIfTrue = NumberValueObject.create(1);
const valueIfFalse = NumberValueObject.create(2);
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(result.getValue()).toBe(2);
expect(getObjectValue(result)).toBe(2);
});

it('LogicalTest is array', () => {
Expand All @@ -56,7 +57,7 @@ describe('Test if function', () => {
});
const valueIfTrue = NumberValueObject.create(1);
const result = testFunction.calculate(logicTest, valueIfTrue);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[false],
[1],
[1],
Expand All @@ -79,7 +80,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[1],
[2],
[3],
Expand All @@ -101,7 +102,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue);
expect(result.getValue()).toBe(false);
expect(getObjectValue(result)).toBe(false);
});

it('ValueIfFalse is array', () => {
Expand All @@ -121,7 +122,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[1],
[2],
[3],
Expand Down Expand Up @@ -159,7 +160,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[1],
[false],
[3],
Expand Down Expand Up @@ -200,7 +201,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
['yes'],
[2],
['yes'],
Expand Down Expand Up @@ -242,7 +243,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[1],
[2],
[3],
Expand Down Expand Up @@ -299,7 +300,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
[1],
[7],
[3],
Expand Down Expand Up @@ -347,7 +348,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
['no1', 'yes2', '#N/A', '#N/A'],
['yes1', 'yes2', '#N/A', '#N/A'],
['no1', 'yes2', '#N/A', '#N/A'],
Expand Down Expand Up @@ -397,7 +398,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
['no1', 'no2', 'no3', '#N/A'],
['yes2', 'yes3', 'yes4', 'yes5'],
['#N/A', '#N/A', '#N/A', '#N/A'],
Expand Down Expand Up @@ -447,7 +448,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
['no1', 'yes2', '#N/A', '#N/A'],
['no2', 'yes3', '#N/A', '#N/A'],
['no3', 'yes4', '#N/A', '#N/A'],
Expand Down Expand Up @@ -494,7 +495,7 @@ describe('Test if function', () => {
column: 0,
});
const result = testFunction.calculate(logicTest, valueIfTrue, valueIfFalse);
expect(transformToValue(result.getArrayValue())).toStrictEqual([
expect(getObjectValue(result)).toStrictEqual([
['no1', 'no2', 'no3', '#N/A'],
['yes1', 'yes2', 'yes3', 'yes4'],
['no1', 'no2', 'no3', '#N/A'],
Expand Down
6 changes: 1 addition & 5 deletions packages/engine-formula/src/functions/logical/if/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
* limitations under the License.
*/

import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { ErrorType } from '../../../basics/error-type';
import { expandArrayValueObject } from '../../../engine/utils/array-object';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject, NullValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';
Expand All @@ -31,10 +31,6 @@ export class If extends BaseFunction {
return logicalTest;
}

if (valueIfTrue.isError()) {
return valueIfTrue;
}

// get single value object
const _logicalTest = this._getSingleValueObject(logicalTest);

Expand Down

0 comments on commit 30c4d01

Please sign in to comment.