@Inject
public MetadataManager(FeaturesConfig featuresConfig,
TypeManager typeManager,
JsonCodec<ViewDefinition> viewCodec,
BlockEncodingSerde blockEncodingSerde,
SessionPropertyManager sessionPropertyManager,
TablePropertyManager tablePropertyManager,
TransactionManager transactionManager)
{
functions = new FunctionRegistry(typeManager, blockEncodingSerde, featuresConfig.isExperimentalSyntaxEnabled());
procedures = new ProcedureRegistry();
this.typeManager = requireNonNull(typeManager, "types is null");
this.viewCodec = requireNonNull(viewCodec, "viewCodec is null");
this.blockEncodingSerde = requireNonNull(blockEncodingSerde, "blockEncodingSerde is null");
this.sessionPropertyManager = requireNonNull(sessionPropertyManager, "sessionPropertyManager is null");
this.tablePropertyManager = requireNonNull(tablePropertyManager, "tablePropertyManager is null");
this.transactionManager = requireNonNull(transactionManager, "transactionManager is null");
verifyComparableOrderableContract();
}