← Back to team overview

oqgraph-dev team mailing list archive

Re: Reverse graph queries

 

Hi Andrew,

Thanks for the offer! I'm currently mostly stuck on trying to understand the 
compile error I'm getting (attached). There's simply too much information 
there and I don't know which is the bit I need to focus on.

There is

error: no match for ‘operator==’  (operand types are ‘const 
oqgraph3::in_edge_iterator’ and ‘const oqgraph3::in_edge_iterator’)
note: candidate: bool oqgraph3::in_edge_iterator::operator==(const self&) 
<near match>

and

error: no match for ‘operator*’ (operand type is ‘const 
oqgraph3::in_edge_iterator’)
note: candidate: oqgraph3::in_edge_iterator::value_type 
oqgraph3::in_edge_iterator::operator*() <near match>

and

note:   ‘const oqgraph3::in_edge_iterator’ is not derived from ‘const 
boost::iterators::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>’

which look like the most-likely suspects, but there might be something else I 
don't see currently.

If these are indeed the points to tackle, then I'm not really sure what to 
do...

Grs,
Heinz

On Monday, 17 October 2016 18:08:57 CEST Andrew McDonnell wrote:
> Hi Heinz
> 
> Unfortunately I havent looked at any of this for some time.
> 
> Please do let me know areas you need help, and I can at least try and guide
> you through, with luck we can muddle through together
> 
> cheers,
> Andrew
> 
> On 08/10/16 19:45, Heinz Wiesinger wrote:
> > Hello all!
> > 
> > As part of finishing up the implementation of my "leaves" algorithm I
> > looked into reverse qraph queries and unfortunately found that none of
> > them work as expected :(
> > 
> > Bug filed: https://jira.mariadb.org/browse/MDEV-10980
> > 
> > I tried looking into the code and saw that a reverse graph is generated
> > 
> > reverse_graph<Graph> r(share->g);
> > 
> > but not used. Simply replacing the uses (replace share->g with r) however
> > results in compiler errors about missing operator overloads in the
> > iterators. I can try fix this but I would need some pointers, as it is,
> > it is slightly beyond me :(
> > 
> > Grs,
> > Heinz

[ 61%] Building CXX object storage/oqgraph/CMakeFiles/oqgraph.dir/graphcore.cc.o
In file included from /usr/include/boost/iterator/reverse_iterator.hpp:12:0,
                 from /usr/include/boost/range/reverse_iterator.hpp:21,
                 from /usr/include/boost/range/rbegin.hpp:19,
                 from /usr/include/boost/range/functions.hpp:23,
                 from /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:29,
                 from /usr/include/boost/ptr_container/ptr_sequence_adapter.hpp:20,
                 from /usr/include/boost/ptr_container/ptr_deque.hpp:20,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_thunk.h:39,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:27,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/usr/include/boost/iterator/iterator_adaptor.hpp: In instantiation of ‘bool boost::iterators::iterator_adaptor<Derived, Base, Value, Traversal, Reference, Difference>::equal(const boost::iterators::iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D>&) const [with OtherDerived = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; OtherIterator = oqgraph3::in_edge_iterator; V = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; C = boost::iterators::use_default; R = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; D = boost::iterators::use_default; Derived = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; Base = oqgraph3::in_edge_iterator; Value = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; Traversal = boost::iterators::use_default; Reference = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; Difference = boost::iterators::use_default]’:
/usr/include/boost/iterator/iterator_facade.hpp:567:29:   required from ‘static bool boost::iterators::iterator_core_access::equal(const Facade1&, const Facade2&, mpl_::true_) [with Facade1 = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; Facade2 = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/iterator/iterator_facade.hpp:900:3:   required from ‘typename boost::iterators::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::iterators::detail::always_bool2, Derived1, Derived2>::type>::type boost::iterators::operator!=(const boost::iterators::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>&, const boost::iterators::iterator_facade<Derived2, V2, TC2, Reference2, Difference2>&) [with Derived1 = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; V1 = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; TC1 = boost::iterators::single_pass_traversal_tag; Reference1 = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; Difference1 = long int; Derived2 = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; V2 = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; TC2 = boost::iterators::single_pass_traversal_tag; Reference2 = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; Difference2 = long int; typename boost::iterators::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::iterators::detail::always_bool2, Derived1, Derived2>::type>::type = bool]’
/usr/include/boost/graph/breadth_first_search.hpp:80:57:   required from ‘void boost::breadth_first_visit(const IncidenceGraph&, SourceIterator, SourceIterator, Buffer&, BFSVisitor, ColorMap) [with IncidenceGraph = boost::reverse_graph<oqgraph3::graph>; Buffer = boost::queue<long long unsigned int>; BFSVisitor = boost::bfs_visitor<std::pair<boost::predecessor_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::on_tree_edge>, std::pair<boost::distance_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> >, boost::on_tree_edge>, open_query::oqgraph_visit_dist<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> > > > > >; ColorMap = boost::two_bit_judy_map<oqgraph3::vertex_index_property_map>; SourceIterator = long long unsigned int*]’
/usr/include/boost/graph/breadth_first_search.hpp:104:24:   required from ‘void boost::breadth_first_visit(const IncidenceGraph&, typename boost::graph_traits<Graph>::vertex_descriptor, Buffer&, BFSVisitor, ColorMap) [with IncidenceGraph = boost::reverse_graph<oqgraph3::graph>; Buffer = boost::queue<long long unsigned int>; BFSVisitor = boost::bfs_visitor<std::pair<boost::predecessor_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::on_tree_edge>, std::pair<boost::distance_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> >, boost::on_tree_edge>, open_query::oqgraph_visit_dist<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> > > > > >; ColorMap = boost::two_bit_judy_map<oqgraph3::vertex_index_property_map>; typename boost::graph_traits<Graph>::vertex_descriptor = long long unsigned int]’
/mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:995:60:   required from here
/usr/include/boost/iterator/iterator_adaptor.hpp:307:29: error: no match for ‘operator==’ (operand types are ‘const oqgraph3::in_edge_iterator’ and ‘const oqgraph3::in_edge_iterator’)
           return m_iterator == x.base();
                             ^
In file included from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28:0,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:161:10: note: candidate: bool oqgraph3::in_edge_iterator::operator==(const self&) <near match>
     bool operator==(const self& x) { return _cursor == x._cursor; }
          ^
/mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:161:10: note:   passing ‘const oqgraph3::in_edge_iterator*’ as ‘this’ argument discards qualifiers
In file included from /usr/include/boost/iterator/iterator_adaptor.hpp:15:0,
                 from /usr/include/boost/iterator/reverse_iterator.hpp:12,
                 from /usr/include/boost/range/reverse_iterator.hpp:21,
                 from /usr/include/boost/range/rbegin.hpp:19,
                 from /usr/include/boost/range/functions.hpp:23,
                 from /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:29,
                 from /usr/include/boost/ptr_container/ptr_sequence_adapter.hpp:20,
                 from /usr/include/boost/ptr_container/ptr_deque.hpp:20,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_thunk.h:39,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:27,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/usr/include/boost/iterator/iterator_facade.hpp:899:3: note: candidate: template<class Derived1, class V1, class TC1, class Reference1, class Difference1, class Derived2, class V2, class TC2, class Reference2, class Difference2> typename boost::iterators::detail::enable_if_interoperable<Derived1, Derived2, typename boost::mpl::apply2<boost::iterators::detail::always_bool2, Derived1, Derived2>::type>::type boost::iterators::operator==(const boost::iterators::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>&, const boost::iterators::iterator_facade<Derived2, V2, TC2, Reference2, Difference2>&)
   BOOST_ITERATOR_FACADE_RELATION(==, return, equal)
   ^
/usr/include/boost/iterator/iterator_facade.hpp:899:3: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/iterator/reverse_iterator.hpp:12:0,
                 from /usr/include/boost/range/reverse_iterator.hpp:21,
                 from /usr/include/boost/range/rbegin.hpp:19,
                 from /usr/include/boost/range/functions.hpp:23,
                 from /usr/include/boost/ptr_container/detail/reversible_ptr_container.hpp:29,
                 from /usr/include/boost/ptr_container/ptr_sequence_adapter.hpp:20,
                 from /usr/include/boost/ptr_container/ptr_deque.hpp:20,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_thunk.h:39,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:27,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/usr/include/boost/iterator/iterator_adaptor.hpp:307:29: note:   ‘const oqgraph3::in_edge_iterator’ is not derived from ‘const boost::iterators::iterator_facade<Derived1, V1, TC1, Reference1, Difference1>’
           return m_iterator == x.base();
                             ^
In file included from /usr/include/boost/graph/reverse_graph.hpp:11:0,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:39:
/usr/include/boost/iterator/transform_iterator.hpp: In instantiation of ‘typename boost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type::reference boost::iterators::transform_iterator<UnaryFunction, Iterator, Reference, Value>::dereference() const [with UnaryFunc = boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>; Iterator = oqgraph3::in_edge_iterator; Reference = boost::iterators::use_default; Value = boost::iterators::use_default; typename boost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type::reference = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>]’:
/usr/include/boost/iterator/iterator_facade.hpp:549:32:   required from ‘static typename Facade::reference boost::iterators::iterator_core_access::dereference(const Facade&) [with Facade = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; typename Facade::reference = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>]’
/usr/include/boost/iterator/iterator_facade.hpp:655:53:   required from ‘boost::iterators::detail::iterator_facade_base<Derived, Value, CategoryOrTraversal, Reference, Difference, false, false>::reference boost::iterators::detail::iterator_facade_base<Derived, Value, CategoryOrTraversal, Reference, Difference, false, false>::operator*() const [with Derived = boost::iterators::transform_iterator<boost::detail::reverse_graph_edge_descriptor_maker<oqgraph3::edge_info>, oqgraph3::in_edge_iterator, boost::iterators::use_default, boost::iterators::use_default>; Value = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; CategoryOrTraversal = boost::iterators::single_pass_traversal_tag; Reference = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>; Difference = long int; boost::iterators::detail::iterator_facade_base<Derived, Value, CategoryOrTraversal, Reference, Difference, false, false>::reference = boost::detail::reverse_graph_edge_descriptor<oqgraph3::edge_info>]’
/usr/include/boost/graph/breadth_first_search.hpp:81:27:   required from ‘void boost::breadth_first_visit(const IncidenceGraph&, SourceIterator, SourceIterator, Buffer&, BFSVisitor, ColorMap) [with IncidenceGraph = boost::reverse_graph<oqgraph3::graph>; Buffer = boost::queue<long long unsigned int>; BFSVisitor = boost::bfs_visitor<std::pair<boost::predecessor_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::on_tree_edge>, std::pair<boost::distance_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> >, boost::on_tree_edge>, open_query::oqgraph_visit_dist<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> > > > > >; ColorMap = boost::two_bit_judy_map<oqgraph3::vertex_index_property_map>; SourceIterator = long long unsigned int*]’
/usr/include/boost/graph/breadth_first_search.hpp:104:24:   required from ‘void boost::breadth_first_visit(const IncidenceGraph&, typename boost::graph_traits<Graph>::vertex_descriptor, Buffer&, BFSVisitor, ColorMap) [with IncidenceGraph = boost::reverse_graph<oqgraph3::graph>; Buffer = boost::queue<long long unsigned int>; BFSVisitor = boost::bfs_visitor<std::pair<boost::predecessor_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::on_tree_edge>, std::pair<boost::distance_recorder<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> >, boost::on_tree_edge>, open_query::oqgraph_visit_dist<boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, long long unsigned int> >, boost::associative_property_map<boost::unordered::unordered_map<long long unsigned int, double> > > > > >; ColorMap = boost::two_bit_judy_map<oqgraph3::vertex_index_property_map>; typename boost::graph_traits<Graph>::vertex_descriptor = long long unsigned int]’
/mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:995:60:   required from here
/usr/include/boost/iterator/transform_iterator.hpp:122:18: error: no match for ‘operator*’ (operand type is ‘const oqgraph3::in_edge_iterator’)
     { return m_f(*this->base()); }
                  ^
In file included from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28:0,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:157:16: note: candidate: oqgraph3::in_edge_iterator::value_type oqgraph3::in_edge_iterator::operator*() <near match>
     value_type operator*() { return value_type(_cursor); }
                ^
/mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:157:16: note:   passing ‘const oqgraph3::in_edge_iterator*’ as ‘this’ argument discards qualifiers
In file included from /usr/include/boost/property_map/property_map.hpp:20:0,
                 from /usr/include/boost/graph/adjacency_list.hpp:36,
                 from /usr/include/boost/graph/directed_graph.hpp:10,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:33,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/usr/include/boost/concept_archetype.hpp:315:3: note: candidate: template<class Base> boost::multipliable_archetype<Base> boost::operator*(const boost::multipliable_archetype<Base>&, const boost::multipliable_archetype<Base>&)
   BOOST_DEFINE_OPERATOR_ARCHETYPE(*, multipliable)
   ^
/usr/include/boost/concept_archetype.hpp:315:3: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/graph/reverse_graph.hpp:11:0,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:39:
/usr/include/boost/iterator/transform_iterator.hpp:122:18: note:   ‘const oqgraph3::in_edge_iterator’ is not derived from ‘const boost::multipliable_archetype<Base>’
     { return m_f(*this->base()); }
                  ^
In file included from /usr/include/boost/property_map/property_map.hpp:20:0,
                 from /usr/include/boost/graph/adjacency_list.hpp:36,
                 from /usr/include/boost/graph/directed_graph.hpp:10,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/oqgraph_shim.h:33,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore-graph.h:28,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:29:
/usr/include/boost/concept_archetype.hpp:343:3: note: candidate: template<class Return, class BaseFirst, class BaseSecond> Return boost::operator*(const boost::time_op_first_archetype<Return, BaseFirst>&, const boost::time_op_second_archetype<Return, BaseSecond>&)
   BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(*, time_op)
   ^
/usr/include/boost/concept_archetype.hpp:343:3: note:   template argument deduction/substitution failed:
In file included from /usr/include/boost/graph/reverse_graph.hpp:11:0,
                 from /mnt/progs/projects/mariadb/server/storage/oqgraph/graphcore.cc:39:
/usr/include/boost/iterator/transform_iterator.hpp:122:18: note:   ‘const oqgraph3::in_edge_iterator’ is not derived from ‘const boost::time_op_first_archetype<Return, BaseFirst>’
     { return m_f(*this->base()); }
                  ^
storage/oqgraph/CMakeFiles/oqgraph.dir/build.make:86: recipe for target 'storage/oqgraph/CMakeFiles/oqgraph.dir/graphcore.cc.o' failed
make[2]: *** [storage/oqgraph/CMakeFiles/oqgraph.dir/graphcore.cc.o] Error 1
CMakeFiles/Makefile2:2848: recipe for target 'storage/oqgraph/CMakeFiles/oqgraph.dir/all' failed
make[1]: *** [storage/oqgraph/CMakeFiles/oqgraph.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

Attachment: signature.asc
Description: This is a digitally signed message part.


Follow ups

References