protected function _transformTupleComparison(TupleComparison $expression, $query)
    {
        $fields = $expression->getField();

        if (!is_array($fields)) {
            return;
        }

        $value = $expression->getValue();
        $op = $expression->getOperator();
        $true = new QueryExpression('1');

        if ($value instanceof Query) {
            $selected = array_values($value->clause('select'));
            foreach ($fields as $i => $field) {
                $value->andWhere([$field . " $op" => new IdentifierExpression($selected[$i])]);
            }
            $value->select($true, true);
            $expression->setField($true);
            $expression->setOperator('=');

            return;
        }

        $surrogate = $query->getConnection()
            ->newQuery()
            ->select($true);

        if (!is_array(current($value))) {
            $value = [$value];
        }

        $conditions = ['OR' => []];
        foreach ($value as $tuple) {
            $item = [];
            foreach (array_values($tuple) as $i => $value) {
                $item[] = [$fields[$i] => $value];
            }
            $conditions['OR'][] = $item;
        }
        $surrogate->where($conditions);

        $expression->setField($true);
        $expression->setValue($surrogate);
        $expression->setOperator('=');
    }