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

FreeBSD Manual Pages

  
 
  

home | help
App::Netdisco::DB::ExpUsertContributed PeApp::Netdisco::DB::ExplicitLocking(3)

NAME
       App::Netdisco::DB::ExplicitLocking - Support for	PostgreSQL Lock	Modes

SYNOPSIS
       In your DBIx::Class schema:

	package	My::Schema;
	__PACKAGE__->load_components('+App::Netdisco::DB::ExplicitLocking');

       Then, in	your application code:

	use App::Netdisco::DB::ExplicitLocking ':modes';
	$schema->txn_do_locked($table, MODE_NAME, sub {	... });

       This also works for the ResultSet:

	package	My::Schema::ResultSet::TableName;
	__PACKAGE__->load_components('+App::Netdisco::DB::ExplicitLocking');

       Then, in	your application code:

	use App::Netdisco::DB::ExplicitLocking ':modes';
	$schema->resultset('TableName')->txn_do_locked(MODE_NAME, sub {	... });

DESCRIPTION
       This DBIx::Class	component provides an easy way to execute PostgreSQL
       table locks before a transaction	block.

       You can load the	component in either the	Schema class or	ResultSet
       class (or both) and then	use an interface very similar to
       "DBIx::Class"'s "txn_do()".

       The package also	exports	constants for each of the table	lock modes
       supported by PostgreSQL,	which must be used if specifying the mode
       (default	mode is	"ACCESS	EXCLUSIVE").

EXPORTS
       With the	":modes" tag (as in SYNOPSIS above) the	following constants
       are exported and	must be	used if	specifying the lock mode:

       o   "ACCESS_SHARE"

       o   "ROW_SHARE"

       o   "ROW_EXCLUSIVE"

       o   "SHARE_UPDATE_EXCLUSIVE"

       o   "SHARE"

       o   "SHARE_ROW_EXCLUSIVE"

       o   "EXCLUSIVE"

       o   "ACCESS_EXCLUSIVE"

METHODS
   "$schema->txn_do_locked($table|\@tables, MODE_NAME?,	$subref)"
       This is the method signature used when the component is loaded into
       your Schema class. The reason you might want to use this	over the
       ResultSet version (below) is to specify multiple	tables to be locked
       before the transaction.

       The first argument is one or more tables, and is	required. Note that
       these are the real table	names in PostgreSQL, and not "DBIx::Class"
       ResultSet aliases or anything like that.

       The mode	name is	optional, and defaults to "ACCESS EXCLUSIVE". You must
       use one of the exported constants in this parameter.

       Finally pass a subroutine reference, just as you	would to the normal
       "DBIx::Class" "txn_do()"	method.	Note that additional arguments are not
       supported.

   "$resultset->txn_do_locked(MODE_NAME?, $subref)"
       This is the method signature used when the component is loaded into
       your ResultSet class. If	you don't yet have a ResultSet class (which is
       the default - normally only Result classes are created) then you	can
       create a	stub which simply loads	this component (and inherits from
       "DBIx::Class::ResultSet").

       This is the simplest way	to use this module if you only want to lock
       one table before	your transaction block.

       The first argument is the optional mode name, which defaults to "ACCESS
       EXCLUSIVE". You must use	one of the exported constants in this
       parameter.

       The second argument is a	subroutine reference, just as you would	pass
       to the normal "DBIx::Class" "txn_do()" method. Note that	additional
       arguments are not supported.

perl v5.32.1			  2021-03App::Netdisco::DB::ExplicitLocking(3)

NAME | SYNOPSIS | DESCRIPTION | EXPORTS | METHODS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=App::Netdisco::DB::ExplicitLocking&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help