← Back to team overview

oqgraph-dev team mailing list archive

Re: Expected result of a 'no_search' operation?

 

Hi Andrew

> NO_SEARCH causes different behaviour depending on how it is used:
> 
> In my branch lines 707-749 of graphcore.cc
> 
> NO_SEARCH alone returns a vertices_cursor(share)
> 
> but
> 
> NO_SEARCH with HAVE_DEST does

Possibly this was an attempt by Antony to speed up queries that do have either or both those restrictions.
Antony?

Regards,
Arjen.


> if ((op & HAVE_DEST) &&
> (cursor || (cursor= new (std::nothrow) stack_cursor(share))) &&
> dest)
> {
> graph_traits<Graph>::in_edge_iterator ei, ei_end;
> for (boost::tuples::tie(ei, ei_end)= in_edges(*dest, share->g); ei
> != ei_end; ++ei)
> {
> Vertex v= source(*ei, share->g);
> static_cast<stack_cursor*>(cursor)->
> results.push(reference(++seq, v, *ei,
> get(boost::edge_weight, share->g, *ei)));
> }
> }
> 
> NO_SEARCH with HAVE_ORIG does
> 
> if ((cursor= new (std::nothrow) stack_cursor(share)) && orig)
> {
> graph_traits<Graph>::out_edge_iterator ei, ei_end;
> for (boost::tuples::tie(ei, ei_end)= out_edges(*orig, share->g); ei
> != ei_end; ++ei)
> {
> Vertex v= target(*ei, share->g);
> static_cast<stack_cursor*>(cursor)->
> results.push(reference(++seq, v, *ei,
> get(boost::edge_weight, share->g, *ei)));
> }
> }
> 
> and falls through to the HAVE_DEST handler above
> 
> I dont (yet) understand the above graph code, but I'll instrument this
> to see
> which is being called, although an educated guess is that the third
> case is if
> I assume that HAVE_ORIG and HAVE_DEST are derived from columns in the
> query...
> 
> In the process of that I should further be able to learn how the boost
> graph
> code actually works
> 
> 
> It seems that basic.test has no queries that exercise no_search
> without dest
> or orig, so I'll add some. Same goes for no latch there are no tests
> yet either
> 
> --Andrew
> 
> 
> On 29/05/13 08:08, Arjen Lentz wrote:
> > Hi Andrew
> >
> >> what should a no_search latch return?
> >
> > For latch=0/no_search, the table should look as inserted (i.e. like
> > a regular table).
> >
> > I was just wondering if you'd also set "no_search" as the default,
> > but I reckon it might be better to use an empty string or NULL
> > rather than no_search. Can you change that without causing hassles
> > elsewhere?
> >
> >
> >> Given the data below, there is only one directed link between
> >> vertexes
> >> 1,2 and one directed link between vertexes 2,1
> >>
> >> So by my logic if you are looking for 'things' with a destid of
> >> vertex
> >> 2 and and source vertext of 1 then only one row should be returned?
> >
> > yes.
> >
> >
> >> INSERT INTO graph_base(from_id, to_id) VALUES (1,2), (2,1);
> >> INSERT INTO graph_base(from_id, to_id) VALUES (1,3), (3,1);
> >> INSERT INTO graph_base(from_id, to_id) VALUES (3,4), (4,3);
> >> INSERT INTO graph_base(from_id, to_id) VALUES (5,6), (6,5);
> >>
> >> SELECT * FROM graph WHERE latch='no_search' and destid=2 and
> >> origid=1;
> >>
> >> yields
> >>
> >> latch origid destid weight seq linkid
> >> no_search 1 2 1 3 1
> >> no_search 1 2 1 2 3
> >> no_search 1 2 1 1 2
> >>
> >>
> >> (And simlar for the integer latch equivalent)
> >>
> >> latch origid destid weight seq linkid
> >> 0 1 2 1 3 1
> >> 0 1 2 1 2 3
> >> 0 1 2 1 1 2
> >
> > Without a latch command, seq/linkid should come back NULL.
> > So it appears the computation engine is doing some path search
> > there, as there is an seq.
> > The result above is wrong, but I'm very curious what it is actually
> > doing? (which bit of code is getting executed?)
> >
> > You could install a MariaDB 5.3 to compare behaviour with v2, but
> > asking me works also ;-)
> >
> >
> > Without a latch, you can return either any rows that match the
> > origid/destid/weight conditions (as they're the only real columns),
> > or you can be lazy and return everything - the server core will
> > filter it for you according to the WHERE conditions!
> > The latter is useful because it allows us to cheaply return the
> > correct result for constructs like WHERE origid BETWEEN 10 and 20
> > without processing pushdown conditions (something we will want to do
> > for other tasks, such as restricting search depth, but that's a
> > separate gig).
> >
> >
> > Regards,
> > Arjen.
> 
> 
> --
> Mailing list: https://launchpad.net/~oqgraph-dev
> Post to : oqgraph-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~oqgraph-dev
> More help : https://help.launchpad.net/ListHelp

-- 
Arjen Lentz, Exec.Director @ Open Query (http://openquery.com)
Australian peace of mind for your MySQL/MariaDB infrastructure.

Follow us at http://openquery.com/blog/ & http://twitter.com/openquery



References