summaryrefslogtreecommitdiff
path: root/LedgerSMB/DBObject.pm
blob: 77869f7f907e612364a0535c1b22052ac21514c9 (plain)
  1. =head1 NAME
  2. LedgerSMB::DBObject - LedgerSMB class for building objects from db relations
  3. =head1 SYOPSIS
  4. This module creates object instances based on LedgerSMB's in-database ORM.
  5. =head1 METHODS
  6. Most methods are dynamically created. The following methods are static, however.
  7. =item make_object hashref, string,
  8. This creates a new data object instance based on information in the PostgreSQL
  9. catalogs.
  10. =back
  11. =cut
  12. use LedgerSMB;
  13. package LedgerSMB::DBObject;
  14. use strict;
  15. no strict 'refs';
  16. use warnings;
  17. sub AUTOLOAD {
  18. my ($ref) = shift @_;
  19. my ($funcname) = shift @_;
  20. my $query =
  21. "SELECT proname, proargnames FROM pg_proc WHERE proname = ?";
  22. my $sth = $self->{__dbh}->prepare($query);
  23. $sth->execute($funcname);
  24. my $ref;
  25. $ref = $sth->fetchrow_hashref(NAME_lc);
  26. my $m_name = $ref->{proname};
  27. my $args = $ref->{proargnames};
  28. my @proc_args;
  29. if ($m_name ~= s/$name\_//){
  30. push @{$self->{__methods}}, $m_name;
  31. if ($args){
  32. for $arg (@$args){
  33. if ($arg =~ s/^in_//){
  34. push @proc_args, $ref->{$arg};
  35. }
  36. }
  37. }
  38. else {
  39. @proc_args = @_;
  40. }
  41. }
  42. LedgerSMB::callproc($funcname, @proc_args);
  43. }