NAME
DBIx::Class::Graph
VERSION
version 1.02
SYNOPSIS
package MySchema::Graph;
use base 'DBIx::Class';
__PACKAGE__->load_components("Graph", "Core");
__PACKAGE__->table("tree");
__PACKAGE__->add_columns("id", "name", "parent_id");
__PACKAGE__->connect_graph(predecessor => "parent_id");
my @children = $rs->get_vertex($id)->successors;
my @vertices = $rs->vertices;
# do other cool stuff like calculating distances etc.
DESCRIPTION
This module allows to create and interact with a directed graph. It will take care of storing the information in a relational database. It uses Graph for calculations. This module extends the DBIx::Class::ResultSet. Some methods are added to the resultset, some to the row objects.
NAME
DBIx::Class::Graph - Represent a graph in a relational database using DBIC
CONFIGURATION
load_components
__PACKAGE__->load_components(qw(Graph Core));
To use this module it has to loaded via load_components
in the result class.
resultset_class
XXX
connect_graph(@opt)
__PACKAGE__->connect_graph( predecessor => 'parent_id' );
__PACKAGE__->connect_graph( successor => 'child_id' );
__PACKAGE__->connect_graph( predecessor => { parents => 'parent_id' } );
__PACKAGE__->connect_graph( successor => { childs => 'child_id' } );
The first argument defines how the tree is build. You can either specify predecessor
or successor
.
The name of the relation to the next vertex is defined by the second argument.
METHODS
ResultSet methods
get_vertex($id)
finds a vertex by searching the underlying resultset for $id
in the primary key column (only single primary keys are supported). It's not as smart as the original "find" in DBIx::Class::ResultSet because it looks on the primary key(s) for $id
only.
Result methods
The following methods are imported from Graph:
delete_vertex connected_component_by_vertex biconnected_component_by_vertex
weakly_connected_component_by_vertex strongly_connected_component_by_vertex
is_sink_vertex is_source_vertex is_successorless_vertex is_successorful_vertex
is_predecessorless_vertex is_predecessorful_vertex is_isolated_vertex is_interior
is_exterior is_self_loop_vertex successors neighbours predecessors degree
in_degree out_degree edges_at edges_from edges_to get_vertex_count random_successor
random_predecessor vertices_at
FAQ
How do I sort the nodes?
Simply sort the resultset
$rs->search(undef, {order_by => "title ASC"})->graph;
CAVEATS
Multigraph
Multipgraphs are not supported. This means you there can only be one edge per vertex pair and direction.
Speed
you should consider caching the Graph object if you are working with large number of vertices.
SEE ALSO
DBIx::Class::Tree, DBIx::Class::NestedSet
BUGS
See "CAVEATS"
AUTHOR
Moritz Onken, <onken@houseofdesign.de>
I am also avaiable on the DBIx::Class mailinglist
COPYRIGHT AND LICENSE
Copyright (C) 2008 by Moritz Onken
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
AUTHOR
Moritz Onken <onken@netcubed.de>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2010 by Moritz Onken.
This is free software, licensed under:
The (three-clause) BSD License