Skip to content

Commit 1f550f0

Browse files
authored
Improve performance of comparison transformations (#1739)
1 parent c86657f commit 1f550f0

18 files changed

Lines changed: 300 additions & 38 deletions

File tree

shell.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
let
22
nixpkgs = fetchTarball {
3-
url = "https://github.com/NixOS/nixpkgs/archive/d2e52032da935f4972579f132250f3c3f47136d1.tar.gz";
3+
url = "https://github.com/NixOS/nixpkgs/archive/88a5945d774ff733c2ecd65247aba714a1731fe7.tar.gz";
4+
45
};
56

67
lockedPkgs = import nixpkgs {

src/core/etl/src/Flow/ETL/Function/Equals.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '==');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '==');
2426

2527
return $left == $right;
2628
}

src/core/etl/src/Flow/ETL/Function/GreaterThan.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '>');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '>');
2426

2527
if ($left === null || $right === null) {
2628
return false;

src/core/etl/src/Flow/ETL/Function/GreaterThanEqual.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '>=');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '>=');
2426

2527
if ($left === null || $right === null) {
2628
return false;

src/core/etl/src/Flow/ETL/Function/Greatest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ public function __construct(
2020
public function eval(Row $row) : mixed
2121
{
2222
$extractedValues = [];
23+
$extractedTypes = [];
2324

2425
foreach ($this->values as $value) {
2526
$extractedValues[] = (new Parameter($value))->eval($row);
27+
$extractedTypes[] = (new Parameter($value))->asType($row);
2628
}
2729

2830
if (!\count($extractedValues)) {
2931
return null;
3032
}
3133

32-
(new ValueComparator())->assertAllComparable($extractedValues, '>');
34+
(new ValueComparator())->assertAllTypesComparable($extractedTypes, '>');
3335

3436
return max($extractedValues);
3537
}

src/core/etl/src/Flow/ETL/Function/Least.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ public function __construct(
2020
public function eval(Row $row) : mixed
2121
{
2222
$extractedValues = [];
23+
$extractedTypes = [];
2324

2425
foreach ($this->values as $value) {
2526
$extractedValues[] = (new Parameter($value))->eval($row);
27+
$extractedTypes[] = (new Parameter($value))->asType($row);
2628
}
2729

2830
if (!\count($extractedValues)) {
2931
return null;
3032
}
3133

32-
(new ValueComparator())->assertAllComparable($extractedValues, '<');
34+
(new ValueComparator())->assertAllTypesComparable($extractedTypes, '<');
3335

3436
return \min($extractedValues);
3537
}

src/core/etl/src/Flow/ETL/Function/LessThan.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '<');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '<');
2426

2527
if ($left === null || $right === null) {
2628
return false;

src/core/etl/src/Flow/ETL/Function/LessThanEqual.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '<=');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '<=');
2426

2527
if ($left === null || $right === null) {
2628
return false;

src/core/etl/src/Flow/ETL/Function/NotEquals.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '!=');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '!=');
2426

2527
return $left != $right;
2628
}

src/core/etl/src/Flow/ETL/Function/NotSame.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function __construct(
1818
public function eval(Row $row) : bool
1919
{
2020
$left = (new Parameter($this->left))->eval($row);
21+
$leftType = (new Parameter($this->left))->asType($row);
2122
$right = (new Parameter($this->right))->eval($row);
23+
$rightType = (new Parameter($this->right))->asType($row);
2224

23-
(new ValueComparator())->assertComparable($left, $right, '!==');
25+
(new ValueComparator())->assertComparableTypes($leftType, $rightType, '!==');
2426

2527
return $left !== $right;
2628
}

0 commit comments

Comments
 (0)