Reading part of a file?

If I do a range query to my gateway or a partial read using the FUSE mount – does IPFS fetch only the needed blocks to service my query, or does it still fetch the whole file?