cfeed_artificial_table_backend_t exists. Currently it's only hooked up to in_memory_artificial_table_backend_t and it hasn't been tested.
Implement read_row_changes() on artificial_table_t.
Make artificial table changefeeds work in simple cases.
Changefeeds on rethinkdb.issues
Support change-feeds on rethinkdb.cluster_config.
Changefeeds theoretically work on all pseudo-tables now.
Add test for changefeeds on system tables. Remove some stub implementations of read_changes() that throw errors.
Fix #3376.
Split cfeed_artificial_table_backend_t::machinery_t::run into several functions for clarity.
Pass change specs by move.
Fix minor typos and style issues.
Use visitor instead of boost::get to check type of changefeed
Initialize begin_destruction_was_called; catch base_exc_t instead of exc_t.
Use empty ql::datum_t instead of ql::datum_t::null() to indicate insertion and deletion in changefeed msg_t. Also, inline send_all_diffs() into diff_all().
Make repeating_timer_t accept a function callback. Fix artificial table changefeed machinery expiration.
Put THROWS_NOTHING annotation on interruptor.
Remove declaration for method that no longer exists.
Split cfeed_artificial_table_backend_t into one part that manages creating and destroying the machinery, and another part that actually implements the machinery. This will make it easier to do changefeeds on the logs table.
Make base_table_t countable. This means that changefeed keyspecs are copyable. So now vector_datum_stream_t::get_change_spec() is safe to call multiple times.
Use std::set<datum_t> with a special comparator instead of a stupic hack with std::map.