Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DBIx::Class::Helper::RUsertContributedaPerlHDocur::ResultSet::SetOperations(3)

NAME
       DBIx::Class::Helper::ResultSet::SetOperations - Do set operations with
       DBIx::Class

SYNOPSIS
	package	MyApp::Schema::ResultSet::Foo;

	__PACKAGE__->load_components(qw{Helper::ResultSet::SetOperations});

	...

	1;

       And then	elsewhere, like	in a controller:

	my $rs1	= $rs->search({	foo => 'bar' });
	my $rs2	= $rs->search({	baz => 'biff' });
	for ($rs1->union($rs2)->all) { ... }

DESCRIPTION
       This component allows you to use	various	set operations with your
       ResultSets.  See	"NOTE" in DBIx::Class::Helper::ResultSet for a nice
       way to apply it to your entire schema.

       Component throws	exceptions if ResultSets have different	ResultClasses
       or different "Columns Specs."

       The basic idea here is that in SQL if you use a set operation they must
       be selecting the	same columns names, so that the	results	will all
       match.  The deal	with the ResultClasses is that DBIC needs to inflate
       the results the same for	the entire ResultSet, so if one	were to	try to
       apply something like a union in a table with the	same column name but
       different classes DBIC wouldn't be doing	what you would expect.

       A nice way to use this is with
       DBIx::Class::ResultClass::HashRefInflator.

       You might have something	like the following sketch autocompletion code:

	my $rs1	= $schema->resultset('Album')->search({
	   name	=> { -like => "$input%"	}
	}, {
	  columns => [qw( id name ), {
	     tablename => \['?', [{} =>	'album']],
	  }],
	});

	my $rs2	= $schema->resultset('Artist')->search({
	   name	=> { -like => "$input%"	}
	}, {
	  columns => [qw( id name ), {
	     tablename => \['?', [{} =>	'artist']],
	  }],
	});

	my $rs3	= $schema->resultset('Song')->search({
	   name	=> { -like => "$input%"	}
	}, {
	  columns => [qw( id name ), {
	     tablename => \['?', [{} =>	'song']],
	  }],
	});

	$_->result_class('DBIx::Class::ResultClass::HashRefInflator')
	  for ($rs1, $rs2, $rs3);

	my $data = [$rs1->union([$rs2, $rs3])->all];

METHODS
   union
   union_all
   intersect
   intersect_all
   except
   except_all
       All of these methods take a single ResultSet or an ArrayRef of
       ResultSets as the parameter only	parameter.

       On Oracle "except" will issue a "MINUS" operation.

AUTHOR
       Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

COPYRIGHT AND LICENSE
       This software is	copyright (c) 2017 by Arthur Axel "fREW" Schmidt.

       This is free software; you can redistribute it and/or modify it under
       the same	terms as the Perl 5 programming	language system	itself.

perl v5.24.1		      DBIx::Class::Helper::ResultSet::SetOperations(3)

NAME | SYNOPSIS | DESCRIPTION | METHODS | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=DBIx::Class::Helper::ResultSet::SetOperations&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help