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

FreeBSD Manual Pages

  
 
  

home | help
DBIx::Class::Helper::RUsertContributedCPerl:Doelper::ResultSet::VirtualView(3)

NAME
       DBIx::Class::Helper::ResultSet::VirtualView - Clean up your SQL
       namespace (DEPRECATED)

SYNOPSIS
	# note that this is normally a component for a ResultSet
	package	MySchema::ResultSet::Bar;

	use strict;
	use warnings;

	use parent 'DBIx::Class::ResultSet';

	__PACKAGE__->load_components('Helper::ResultSet::VirtualView');

	# and then in code that	uses the ResultSet Join	with relation x
	my $rs = $schema->resultset('Bar')->search({'x.name' =>	'abc'},{ join => 'x' });

	# 'x' now pollutes the query namespace

	# So the following works as expected
	my $ok_rs = $rs->search({'x.other' => 1});

	# But this doesn't: instead of finding a 'Bar' related to two x	rows (abc and
	# def) we look for one row with	contradictory terms and	join in	another	table
	# (aliased 'x_2') which	we never use
	my $broken_rs =	$rs->search({'x.name' => 'def'});

	my $rs2	= $rs->as_virtual_view;

	# doesn't work - 'x' is	no longer accessible in	$rs2, having been sealed away
	my $not_joined_rs = $rs2->search({'x.other' => 1});

	# works	as expected: finds a 'table' row related to two	x rows (abc and	def)
	my $correctly_joined_rs	= $rs2->search({'x.name' => 'def'});

DESCRIPTION
       This component is will allow you	to clean up your SQL namespace.	 See
       "NOTE" in DBIx::Class::Helper::ResultSet	for a nice way to apply	it to
       your entire schema.

DEPRECATED
       This component has been suplanted by
       DBIx::Class::ResultSet::as_subselect_rs.	 In the	next major version (3)
       we will begin issuing a warning on it's use.  In	the major version
       after that (4) we will remove it	entirely.

METHODS
   as_virtual_view
       Act as a	barrier	to SQL symbols.	 The resultset provided	will be	made
       into a "virtual view" by	including it as	a subquery within the from
       clause.	From this point	on, any	joined tables are inaccessible to
       ->search	on the resultset (as if	it were	simply where-filtered without
       joins).	See "SYNOPSIS" for example.

NOTE
       You don't have to use this as a Component.  If you prefer you can use
       it in the following manner:

	# in code using	ResultSet:
	use DBIx::Class:Helper::VirtualView;

	my $new_rs = DBIx::Class::Helper::VirtualView::as_virtual_view($rs);

THANKS
       Thanks to ijw from #dbix-class for the idea for this helper (originally
       called seal), most of the code, and most	of the documentation.

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::VirtualView(3)

NAME | SYNOPSIS | DESCRIPTION | DEPRECATED | METHODS | NOTE | THANKS | 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::VirtualView&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help