* Find common conditions between two predicates. * Returns an array of conditions that appear in both predicates.
( predicate1: BasicExpression<boolean>, predicate2: BasicExpression<boolean>, )
| 919 | * Returns an array of conditions that appear in both predicates. |
| 920 | */ |
| 921 | function findCommonConditions( |
| 922 | predicate1: BasicExpression<boolean>, |
| 923 | predicate2: BasicExpression<boolean>, |
| 924 | ): Array<BasicExpression<boolean>> { |
| 925 | const conditions1 = extractAllConditions(predicate1) |
| 926 | const conditions2 = extractAllConditions(predicate2) |
| 927 | |
| 928 | const common: Array<BasicExpression<boolean>> = [] |
| 929 | |
| 930 | for (const cond1 of conditions1) { |
| 931 | for (const cond2 of conditions2) { |
| 932 | if (areExpressionsEqual(cond1, cond2)) { |
| 933 | // Avoid duplicates |
| 934 | if (!common.some((c) => areExpressionsEqual(c, cond1))) { |
| 935 | common.push(cond1) |
| 936 | } |
| 937 | break |
| 938 | } |
| 939 | } |
| 940 | } |
| 941 | |
| 942 | return common |
| 943 | } |
| 944 | |
| 945 | /** |
| 946 | * Extract all individual conditions from a predicate, flattening AND operations. |
no test coverage detected