When overwriting the Read method (that has a %CacheString return type) on a new class that inherits %Stream.FileCharacter class, returns an error about incorrect return type, must be Binary, even if it matched the real signature.
Looking at the compile global information we can see:
^oddCOM("%Stream.FileBinary","m","Read",42)="%Library.Binary"
After further investigation we realise that there is a generator method looking at the OdbcType class definition.
Setting LONGVARCHAR results in:
^oddCOM("User.CStream","m","Read",42)="%Library.String"