table of contents
DBIx::Class::Storage::DBI::Oracle::Generic(3pm) | User Contributed Perl Documentation | DBIx::Class::Storage::DBI::Oracle::Generic(3pm) |
NAME¶
DBIx::Class::Storage::DBI::Oracle::Generic - Oracle Support for DBIx::Class
SYNOPSIS¶
# In your result (table) classes use base 'DBIx::Class::Core'; __PACKAGE__->add_columns({ id => { sequence => 'mysequence', auto_nextval => 1 } }); __PACKAGE__->set_primary_key('id'); # Somewhere in your Code # add some data to a table with a hierarchical relationship $schema->resultset('Person')->create ({ firstname => 'foo', lastname => 'bar', children => [ { firstname => 'child1', lastname => 'bar', children => [ { firstname => 'grandchild', lastname => 'bar', } ], }, { firstname => 'child2', lastname => 'bar', }, ], }); # select from the hierarchical relationship my $rs = $schema->resultset('Person')->search({}, { 'start_with' => { 'firstname' => 'foo', 'lastname' => 'bar' }, 'connect_by' => { 'parentid' => { '-prior' => { -ident => 'personid' } }, 'order_siblings_by' => { -asc => 'name' }, }; ); # this will select the whole tree starting from person "foo bar", creating # following query: # SELECT # me.persionid me.firstname, me.lastname, me.parentid # FROM # person me # START WITH # firstname = 'foo' and lastname = 'bar' # CONNECT BY # parentid = prior personid # ORDER SIBLINGS BY # firstname ASC
DESCRIPTION¶
This class implements base Oracle support. The subclass DBIx::Class::Storage::DBI::Oracle::WhereJoins is for "(+)" joins in Oracle versions before 9.0.
METHODS¶
get_autoinc_seq¶
Returns the sequence name for an autoincrement column
datetime_parser_type¶
This sets the proper DateTime::Format module for use with DBIx::Class::InflateColumn::DateTime.
connect_call_datetime_setup¶
Used as:
on_connect_call => 'datetime_setup'
In connect_info to set the session nls date, and timestamp values for use with DBIx::Class::InflateColumn::DateTime and the necessary environment variables for DateTime::Format::Oracle, which is used by it.
Maximum allowable precision is used, unless the environment variables have already been set.
These are the defaults used:
$ENV{NLS_DATE_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS'; $ENV{NLS_TIMESTAMP_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF'; $ENV{NLS_TIMESTAMP_TZ_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF TZHTZM';
To get more than second precision with DBIx::Class::InflateColumn::DateTime for your timestamps, use something like this:
use Time::HiRes 'time'; my $ts = DateTime->from_epoch(epoch => time);
relname_to_table_alias¶
DBIx::Class uses DBIx::Class::Relationship names as table aliases in queries.
Unfortunately, Oracle doesn't support identifiers over 30 chars in length, so the DBIx::Class::Relationship name is shortened and appended with half of an MD5 hash.
See "relname_to_table_alias" in DBIx::Class::Storage::DBI.
with_deferred_fk_checks¶
Runs a coderef between:
alter session set constraints = deferred ... alter session set constraints = immediate
to defer foreign key checks.
Constraints must be declared "DEFERRABLE" for this to work.
ATTRIBUTES¶
Following additional attributes can be used in resultsets.
connect_by or connect_by_nocycle¶
A hashref of conditions used to specify the relationship between parent rows and child rows of the hierarchy.
connect_by => { parentid => 'prior personid' } # adds a connect by statement to the query: # SELECT # me.persionid me.firstname, me.lastname, me.parentid # FROM # person me # CONNECT BY # parentid = prior persionid connect_by_nocycle => { parentid => 'prior personid' } # adds a connect by statement to the query: # SELECT # me.persionid me.firstname, me.lastname, me.parentid # FROM # person me # CONNECT BY NOCYCLE # parentid = prior persionid
start_with¶
A hashref of conditions which specify the root row(s) of the hierarchy.
It uses the same syntax as "search" in DBIx::Class::ResultSet
start_with => { firstname => 'Foo', lastname => 'Bar' } # SELECT # me.persionid me.firstname, me.lastname, me.parentid # FROM # person me # START WITH # firstname = 'foo' and lastname = 'bar' # CONNECT BY # parentid = prior persionid
order_siblings_by¶
Which column(s) to order the siblings by.
It uses the same syntax as "order_by" in DBIx::Class::ResultSet
'order_siblings_by' => 'firstname ASC' # SELECT # me.persionid me.firstname, me.lastname, me.parentid # FROM # person me # CONNECT BY # parentid = prior persionid # ORDER SIBLINGS BY # firstname ASC
FURTHER QUESTIONS?¶
Check the list of additional DBIC resources.
COPYRIGHT AND LICENSE¶
This module is free software copyright by the DBIx::Class (DBIC) authors. You can redistribute it and/or modify it under the same terms as the DBIx::Class library.
2025-02-01 | perl v5.40.0 |