class CommandFactories implements DdlCommandFactory {

  @Override
  public DdlCommand create(
      final String sqlExpression,
      final DdlStatement ddlStatement,
      final SessionConfig config
  ) {
    return FACTORIES
        .getOrDefault(ddlStatement.getClass(), (statement, cf, ci) -> {
          throw new KsqlException(
              "Unable to find ddl command factory for statement:"
                  + statement.getClass()
                  + " valid statements:"
                  + FACTORIES.keySet()
          );
        })
        .handle(
            this,
            new CallInfo(sqlExpression, config),
            ddlStatement);
  }

  public  CommandFactories(final ServiceContext serviceContext, final MetaStore metaStore);
  @VisibleForTesting  CommandFactories(
      final CreateSourceFactory createSourceFactory,
      final DropSourceFactory dropSourceFactory,
      final RegisterTypeFactory registerTypeFactory,
      final DropTypeFactory dropTypeFactory
  );

}