added column metadata to make the sql backend more interoperable with
other backends
also opens the opportunity for more optimizations and checks (like
prohibiting null values for nonnull columns)

the generator can be adjusted in a later step, as that would be a
backwards incompatible change