I totally agree - but this has the advantage of returning something like a well-defined object that hews to an interface, as long as you have the model set up.
The trade-offs are usually worth it, vs, doing something like:
No, "row" is a generic type, all concrete rows have concrete types narrowing the generic type with an ordered sequence of element tags and element types. (Relations are typed similarly to rows, since they are containers for rows of homogenous type.)
The trade-offs are usually worth it, vs, doing something like: