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.
Merge remote-tracking branch 'origin/tim/admin-changefeeds-2862' into tim/logs-2884
Make efficient changefeeds on rethinkdb.logs.