You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@arrow.apache.org by "Vyas Ramasubramani (Jira)" <ji...@apache.org> on 2022/11/02 00:41:00 UTC

[jira] [Created] (ARROW-18217) Multiple Filesystem subclasses are missing an override for Equals

Vyas Ramasubramani created ARROW-18217:
------------------------------------------

             Summary: Multiple Filesystem subclasses are missing an override for Equals
                 Key: ARROW-18217
                 URL: https://issues.apache.org/jira/browse/ARROW-18217
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
    Affects Versions: 10.0.0, 9.0.0
            Reporter: Vyas Ramasubramani


Currently the `Filesystem` class contains two overloads for the `Equals` method:

```
virtual bool Equals(const FileSystem& other) const = 0;
virtual bool Equals(const std::shared_ptr<FileSystem>& other) const {
return Equals(*other);
}
```

The second is a trivial call to the first for ease of use. The first method is pure virtual and _must_ be overridden by subclasses. The problem is that overriding a single overload of a method also shadows all other overloads. As a result, it is no longer possible to call the `shared_ptr` version of the method. This appears to be the case for the `SubTreeFileSystem` and the `SlowFileSystem` in `filesystem.h` as well as the `S3FileSystem` in `s3fs.h`. There may be other classes with this problem as well, those are just the ones that I noticed. My guess is that what was intended here is to pull the method into the child class's namespace via a using declaration i.e. add `using FileSystem::Equals` to each child class.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)