public IRowCursor CreateCursor(IChannelProvider provider, IRowCursor[] inputs)
                {
                    Contracts.AssertValue(provider);
                    int cthd = Interlocked.Exchange(ref _cthd, 0);

                    provider.Check(cthd > 1, "Consolidator can only be used once");
                    provider.Check(Utils.Size(inputs) == cthd, "Unexpected number of cursors");

                    // ConsolidateGeneric does all the standard validity checks: all cursors non-null,
                    // all have the same schema, all have the same active columns, and all active
                    // column types are cachable.
                    using (var ch = provider.Start("Consolidator"))
                    {
                        return(DataViewUtils.ConsolidateGeneric(provider, inputs, BatchSize));
                    }
                }