| 939 | } |
| 940 | |
| 941 | function normalizePredicateValues( |
| 942 | predicate: Predicate, |
| 943 | resolveColumn: (column: string) => ResolvedPredicateColumn, |
| 944 | ): Predicate { |
| 945 | if (predicate.type === 'comparison') { |
| 946 | let column = resolveColumn(predicate.column) |
| 947 | |
| 948 | if (predicate.valueType === 'column') { |
| 949 | resolveColumn(predicate.value) |
| 950 | return predicate |
| 951 | } |
| 952 | |
| 953 | if (predicate.operator === 'in' || predicate.operator === 'notIn') { |
| 954 | if (!Array.isArray(predicate.value)) { |
| 955 | throw new DataTableValidationError( |
| 956 | 'Invalid filter value for column "' + |
| 957 | column.columnName + |
| 958 | '" in table "' + |
| 959 | column.tableName + |
| 960 | '"', |
| 961 | [{ message: 'Expected an array value for "' + predicate.operator + '" predicate' }], |
| 962 | { |
| 963 | metadata: { |
| 964 | table: column.tableName, |
| 965 | column: column.columnName, |
| 966 | }, |
| 967 | }, |
| 968 | ) |
| 969 | } |
| 970 | |
| 971 | return predicate |
| 972 | } |
| 973 | |
| 974 | return predicate |
| 975 | } |
| 976 | |
| 977 | if (predicate.type === 'between') { |
| 978 | resolveColumn(predicate.column) |
| 979 | return predicate |
| 980 | } |
| 981 | |
| 982 | if (predicate.type === 'null') { |
| 983 | resolveColumn(predicate.column) |
| 984 | return predicate |
| 985 | } |
| 986 | |
| 987 | return { |
| 988 | ...predicate, |
| 989 | predicates: predicate.predicates.map((child) => normalizePredicateValues(child, resolveColumn)), |
| 990 | } |
| 991 | } |