rengolin/HPCC-Platform — comment on commit 07712c56f74ff7d009a25c2237e2b3e1bf221a45
File: rtl/include/eclhelper.hpp line 1403
By ghalliday:

Here we need to be very careful to preserve backward compatibility. In particular we try and keep it so that old compiled workunits still work in a new system without needing to recompile the queries.

i) Helper functions always need to add functions at the end of the interface

ii) If a new function is added to an interface, and there is no existing getFlags() then you need to add a new TAItemparg_ and implement selectInterface for that id in CHThorTempTable.
(See TAIsortarg_2 as an example).
Then when the function needs to be called the interface needs to call selectInterface first to see if the object implements that interface.

iii) The general direction is to have these interfaces with no default implementation, and to provide the default implementation in CHThorTempTable in eclhelper_base.hpp. There are plenty of exceptions.

iv) In general if an option isn't dynamically configurable I have tended to add a getFlags() member instead of individual functions for each flag. The main reasons are i) less problems with backward compatibility when adding a new flag and ii) fewer virtual functions = smaller dlls.