Merge the last bits of indirect callchain optimization
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / PK.pm
index c45071f..0ef470b 100644 (file)
@@ -5,6 +5,9 @@ use warnings;
 
 use base qw/DBIx::Class::Row/;
 
+use DBIx::Class::_Util 'fail_on_internal_call';
+use namespace::clean;
+
 =head1 NAME
 
 DBIx::Class::PK - Primary Key class
@@ -27,12 +30,16 @@ a class method.
 
 =cut
 
-sub id {
-  my ($self) = @_;
-  $self->throw_exception( "Can't call id() as a class method" )
-    unless ref $self;
-  my @id_vals = $self->_ident_values;
-  return (wantarray ? @id_vals : $id_vals[0]);
+sub id :DBIC_method_is_indirect_sugar {
+  DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
+
+  $_[0]->throw_exception( "Can't call id() as a class method" )
+    unless ref $_[0];
+
+  wantarray
+    ? $_[0]->_ident_values
+    : ($_[0]->_ident_values)[0]   # FIXME - horrible horrible legacy crap
+  ;
 }
 
 sub _ident_values {
@@ -134,15 +141,17 @@ sub _mk_ident_cond {
   return \%cond;
 }
 
-1;
-
-=head1 AUTHOR AND CONTRIBUTORS
+=head1 FURTHER QUESTIONS?
 
-See L<AUTHOR|DBIx::Class/AUTHOR> and L<CONTRIBUTORS|DBIx::Class/CONTRIBUTORS> in DBIx::Class
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
 
-=head1 LICENSE
+=head1 COPYRIGHT AND LICENSE
 
-You may distribute this code under the same terms as Perl itself.
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
 
 =cut
 
+1;