[rt-devel] patch for proper MakeMaker-based install of DBIx modules
ivan
ivan-rt-devel at 420.am
Sat Aug 12 04:49:26 EDT 2000
Jesse, do you have a CPAN ID yet? That's where this sort of this really
belongs, especially if you're now using general DBIx:: namespace.
# proper MakeMaker-based installation for the DBIx modules
#
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# If you have a decent Bourne-type shell:
# STEP 2: Run the shell with this file as input.
# If you don't have such a shell, you may need to manually create/delete
# the files/directories as shown below.
# STEP 3: Run the 'patch' program with this file as input.
#
# These are the commands needed to create/delete files/directories:
#
mkdir 'lib/DBIx/DBIx-EasySearch'
chmod 0755 'lib/DBIx/DBIx-EasySearch'
mkdir 'lib/DBIx/DBIx-EasySearch/blib'
chmod 0755 'lib/DBIx/DBIx-EasySearch/blib'
mkdir 'lib/DBIx/DBIx-EasySearch/blib/lib'
chmod 0755 'lib/DBIx/DBIx-EasySearch/blib/lib'
mkdir 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx'
chmod 0755 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx'
mkdir 'lib/DBIx/DBIx-EasySearch/blib/man3'
chmod 0755 'lib/DBIx/DBIx-EasySearch/blib/man3'
mkdir 'lib/DBIx/DBIx-Handle'
chmod 0755 'lib/DBIx/DBIx-Handle'
mkdir 'lib/DBIx/DBIx-Handle/blib'
chmod 0755 'lib/DBIx/DBIx-Handle/blib'
mkdir 'lib/DBIx/DBIx-Handle/blib/lib'
chmod 0755 'lib/DBIx/DBIx-Handle/blib/lib'
mkdir 'lib/DBIx/DBIx-Handle/blib/lib/DBIx'
chmod 0755 'lib/DBIx/DBIx-Handle/blib/lib/DBIx'
mkdir 'lib/DBIx/DBIx-Handle/blib/man3'
chmod 0755 'lib/DBIx/DBIx-Handle/blib/man3'
mkdir 'lib/DBIx/DBIx-Record'
chmod 0755 'lib/DBIx/DBIx-Record'
mkdir 'lib/DBIx/DBIx-Record/blib'
chmod 0755 'lib/DBIx/DBIx-Record/blib'
mkdir 'lib/DBIx/DBIx-Record/blib/lib'
chmod 0755 'lib/DBIx/DBIx-Record/blib/lib'
mkdir 'lib/DBIx/DBIx-Record/blib/lib/DBIx'
chmod 0755 'lib/DBIx/DBIx-Record/blib/lib/DBIx'
mkdir 'lib/DBIx/DBIx-Record/blib/man3'
chmod 0755 'lib/DBIx/DBIx-Record/blib/man3'
rm -f 'lib/DBIx/Record.pm'
rm -f 'lib/DBIx/Handle.pm'
rm -f 'lib/DBIx/EasySearch.pm'
touch 'lib/DBIx/DBIx-EasySearch/Changes'
chmod 0644 'lib/DBIx/DBIx-EasySearch/Changes'
touch 'lib/DBIx/DBIx-EasySearch/EasySearch.pm'
chmod 0755 'lib/DBIx/DBIx-EasySearch/EasySearch.pm'
touch 'lib/DBIx/DBIx-EasySearch/MANIFEST'
chmod 0644 'lib/DBIx/DBIx-EasySearch/MANIFEST'
touch 'lib/DBIx/DBIx-EasySearch/Makefile'
chmod 0644 'lib/DBIx/DBIx-EasySearch/Makefile'
touch 'lib/DBIx/DBIx-EasySearch/Makefile.PL'
chmod 0644 'lib/DBIx/DBIx-EasySearch/Makefile.PL'
touch 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm'
chmod 0555 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm'
touch 'lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm'
chmod 0644 'lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm'
touch 'lib/DBIx/DBIx-EasySearch/test.pl'
chmod 0644 'lib/DBIx/DBIx-EasySearch/test.pl'
touch 'lib/DBIx/DBIx-Handle/Changes'
chmod 0644 'lib/DBIx/DBIx-Handle/Changes'
touch 'lib/DBIx/DBIx-Handle/Handle.pm'
chmod 0755 'lib/DBIx/DBIx-Handle/Handle.pm'
touch 'lib/DBIx/DBIx-Handle/MANIFEST'
chmod 0644 'lib/DBIx/DBIx-Handle/MANIFEST'
touch 'lib/DBIx/DBIx-Handle/Makefile'
chmod 0644 'lib/DBIx/DBIx-Handle/Makefile'
touch 'lib/DBIx/DBIx-Handle/Makefile.PL'
chmod 0644 'lib/DBIx/DBIx-Handle/Makefile.PL'
touch 'lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm'
chmod 0555 'lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm'
touch 'lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm'
chmod 0644 'lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm'
touch 'lib/DBIx/DBIx-Handle/test.pl'
chmod 0644 'lib/DBIx/DBIx-Handle/test.pl'
touch 'lib/DBIx/DBIx-Record/Changes'
chmod 0644 'lib/DBIx/DBIx-Record/Changes'
touch 'lib/DBIx/DBIx-Record/MANIFEST'
chmod 0644 'lib/DBIx/DBIx-Record/MANIFEST'
touch 'lib/DBIx/DBIx-Record/Makefile'
chmod 0644 'lib/DBIx/DBIx-Record/Makefile'
touch 'lib/DBIx/DBIx-Record/Makefile.PL'
chmod 0644 'lib/DBIx/DBIx-Record/Makefile.PL'
touch 'lib/DBIx/DBIx-Record/Record.pm'
chmod 0755 'lib/DBIx/DBIx-Record/Record.pm'
touch 'lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm'
chmod 0555 'lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm'
touch 'lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm'
chmod 0644 'lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm'
touch 'lib/DBIx/DBIx-Record/test.pl'
chmod 0644 'lib/DBIx/DBIx-Record/test.pl'
#
# This command terminates the shell and need not be executed manually.
exit
#
#### End of Preamble ####
#### Patch data follows ####
diff -c 'baseline/README' 'work/README'
Index: ./README
*** ./README Thu Aug 10 04:41:51 2000
--- ./README Fri Aug 11 23:48:22 2000
***************
*** 92,98 ****
GENERAL INSTALLATION
--------------------
! 0 Install JVDBIx
1 Unpack this distribution SOMWHERE OTHER THAN where you want to install RT
--- 92,101 ----
GENERAL INSTALLATION
--------------------
! 0 Install the DBIx modules
!
! cd /lib/DBIx
! for a in DBIx*; do ( cd $a; perl Makefile.PL && make install ); done
1 Unpack this distribution SOMWHERE OTHER THAN where you want to install RT
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/Changes'
Index: ./lib/DBIx/DBIx-EasySearch/Changes
*** ./lib/DBIx/DBIx-EasySearch/Changes Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/Changes Fri Aug 11 23:28:59 2000
***************
*** 0 ****
--- 1,5 ----
+ Revision history for Perl extension DBIx::EasySearch.
+
+ 0.01 Fri Aug 11 23:28:59 2000
+ - original version; created by h2xs 1.19
+
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/EasySearch.pm'
Index: ./lib/DBIx/DBIx-EasySearch/EasySearch.pm
*** ./lib/DBIx/DBIx-EasySearch/EasySearch.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/EasySearch.pm Fri Aug 11 23:48:52 2000
***************
*** 0 ****
--- 1,716 ----
+ # $Header: /proj/maps/src/rt/lib/DBIx/DBIx-EasySearch/EasySearch.pm,v 1.1 2000/08/12 06:48:51 ivan Exp $
+
+ # {{{ Version, package, new, etc
+ package DBIx::EasySearch;
+
+ use strict;
+ use vars qw($VERSION);
+
+ $VERSION = '0.05';
+
+ # {{{ sub new
+
+ #instantiate a new object.
+
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return ($self)
+ }
+ # }}}
+
+ # }}}
+
+ # {{{ Methods dealing with Record objects (navigation)
+
+ # {{{ sub Next
+
+ sub Next {
+ my $self = shift;
+ my @row;
+
+ if (!$self->_isLimited) {
+ return(0);
+ }
+ if ($self->{'must_redo_search'} != 0) {
+ $self->_DoSearch();
+ }
+
+ if ($self->{'itemscount'} < $self->{'rows'}) {
+ #increment the itemcounter.
+ $self->{'itemscount'}++;
+ #serve out that item
+ return ($self->{'items'}[$self->{'itemscount'}]);
+ }
+ else {
+ #we've gone through the whole list.
+ #reset the count.
+ $self->{'itemscount'} = 0;
+ return(undef);
+ }
+ }
+
+ # }}}
+
+ # {{{ sub GotoFirstItem
+ sub GotoFirstItem {
+ my $self = shift;
+ $self->GotoItem(0);
+ }
+ # }}}
+
+ # {{{ sub GotoItem
+
+ sub GotoItem {
+ my $self = shift;
+ my $item = shift;
+ $self->{'itemscount'} = $item;
+ }
+
+ # }}}
+
+ # {{{ sub First
+
+ sub First {
+ my $self = shift;
+ #Reset the itemcount
+ $self->GotoFirstItem();
+ return ($self->Next);
+ }
+
+ # }}}
+
+ # {{{ sub NewItem
+ sub NewItem {
+ my $self = shift;
+ my $foo = (caller(1))[3];
+ die "DBIx::EasySearch needs to be subclassed. you can't use it directly. ($foo)\n";
+ }
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with Restrictions (where subclauses) and ordering
+
+ # {{{ sub UnLimit
+ sub UnLimit {
+ my $self=shift;
+ $self->_isLimited(-1);
+ }
+
+ # }}}
+
+ # {{{ sub Limit
+
+ # This clearly needs to be documented a bit ... this is how TobiX has
+ # understood this:
+
+ # TABLE can be set to something different than this table if a join is
+ # wanted (that means we can't do recursive joins as for now). Unless
+ # ALIAS is set, the join criterias will be taken from EXT_LINKFIELD
+ # and INT_LINKFIELD and added to the criterias. If ALIAS is set, new
+ # criterias about the foreign table will be added.
+
+ # VALUE should always be set and will always be quoted. Maybe TYPE
+ # should imply that the value shouldn't be quoted? IMO (TobiX) we
+ # shouldn't use quoted values, we should rather use placeholders and
+ # pass the arguments when executing the statement. This will also
+ # allow us to alter limits and reexecute the search with a low cost by
+ # keeping the statement handler.
+
+ # ENTRYAGGREGATOR might be or or and or whatever :) TobiX hasn't
+ # understood how to recurse (like (true or (false and true) or (true
+ # and true and true)))
+
+ # OPERATOR is whatever should be putted in between the FIELD and the
+ # VALUE.
+
+ # ORDERBY is the SQL ORDERBY
+
+ # ORDER can be ASCending or DESCending.
+
+ sub Limit {
+ my $self = shift;
+ my %args = (
+ TABLE => $self->{'table'},
+ FIELD => undef,
+ VALUE => undef,
+ ALIAS => undef,
+ TYPE => undef, #TODO: figure out why this is here
+ ENTRYAGGREGATOR => 'or',
+ INT_LINKFIELD => ($self->{'primary_key'} || 'id'),
+ EXT_LINKFIELD => 'id',
+ OPERATOR => '=',
+ ORDERBY => undef,
+ ORDER => undef,
+
+ @_ # get the real argumentlist
+ );
+
+ my ($Alias);
+
+ if ($args{'FIELD'}) {
+ #If it's a like, we supply the %s around the search term
+ if ($args{'OPERATOR'} eq "LIKE") {
+ $args{'VALUE'} = "%".$args{'VALUE'} ."%";
+ }
+ $args{'VALUE'} = $self->_Handle->dbh->quote($args{'VALUE'});
+ }
+
+ $Alias = $self->_GenericRestriction(%args);
+ warn "No table alias set!"
+ unless $Alias;
+
+ # {{{ Set $self->{order} - can be "ASC"ending or "DESC"ending.
+ if ($args{'ORDER'}) {
+ $self->{'order'} = $args{'ORDER'};
+ }
+ # }}}
+
+ # {{{ If we're setting an OrderBy, set $self->{'orderby'} here
+ if ($args{'ORDERBY'}) {
+ # 1. if an alias was passed in, use that.
+ if ($args{'ALIAS'}) {
+ $self->{'orderby'} = $args{'ALIAS'}.".".$args{'ORDERBY'};
+ }
+ # 2. if an alias was generated, use that.
+ elsif ($Alias) {
+ $self->{'orderby'} = "$Alias.".$args{'ORDERBY'};
+ }
+ # 3. use the primary
+ else {
+ $self->{'orderby'} = "main.".$args{'ORDERBY'};
+ }
+ }
+ # }}}
+
+ # We're now limited. people can do searches.
+
+ $self->_isLimited(1);
+
+ if (defined ($Alias)) {
+ return($Alias);
+ }
+ else {
+ return(0);
+ }
+ }
+
+ # }}}
+
+ # {{{ sub ShowRestrictions
+
+ #Show Restrictions
+ sub ShowRestrictions {
+ my $self = shift;
+ $self->_CompileGenericRestrictions();
+ $self->_CompileSubClauses();
+ return($self->{'where_clause'});
+
+ }
+
+ # }}}
+
+ # {{{ sub ImportRestrictions
+
+ #import a restrictions clause
+ sub ImportRestrictions {
+ my $self = shift;
+ $self->{'where_clause'} = shift;
+ }
+ # }}}
+
+ # {{{ sub _GenericRestriction
+
+ sub _GenericRestriction {
+ my $self = shift;
+ my %args = (
+ TABLE => $self->{'table'},
+ FIELD => undef,
+ VALUE => undef, #TODO: $Value should take an array of values and generate
+ #the proper where clause.
+ ALIAS => undef,
+ ENTRYAGGREGATOR => undef,
+ OPERATOR => '=',
+ INT_LINKFIELD => undef,
+ EXT_LINKFIELD => undef,
+ RESTRICTION_TYPE => 'generic',
+ @_);
+ my ($QualifiedField);
+
+ #since we're changing the search criteria, we need to redo the search
+ $self->{'must_redo_search'}=1;
+
+
+ # {{{ if there's no alias set, we need to set it
+
+ if (!$args{'ALIAS'}) {
+
+ #if the table we're looking at is the same as the main table
+ if ($args{'TABLE'} eq $self->{'table'}) {
+
+ # main is the alias of the "primary table.
+ # TODO this code assumes no self joins on that table.
+ # if someone can name a case where we'd want to do that, I'll change it.
+
+ $args{'ALIAS'} = 'main';
+ }
+
+ # {{{ if we're joining, we need to work out the table alias
+
+ else {
+ $args{'ALIAS'}=$self->NewAlias($args{'TABLE'})
+ or warn;
+
+ warn "missing input parameter INT_LINKFIELD"
+ unless $args{'INT_LINKFIELD'};
+ warn "missing input parameter EXT_LINKFIELD"
+ unless $args{'EXT_LINKFIELD'};
+
+ # we need to build the table of links.
+ $self->{'table_links'} .= "AND main.". $args{'INT_LINKFIELD'}."=".
+ $args{'ALIAS'}.".".$args{'EXT_LINKFIELD'};
+ }
+
+ # }}}
+ }
+
+ # }}}
+
+ # If we were just setting an alias, return
+ if (!$args{'FIELD'}) {
+ return ($args{'ALIAS'});
+ }
+
+ #Set this to the name of the field and the alias.
+ $QualifiedField = $args{'ALIAS'}.".".$args{'FIELD'};
+ print STDERR "DBIx::EasySearch->_GenericRestriction QualifiedField is $QualifiedField\n"
+ if ($self->DEBUG);
+
+ #If we're overwriting this sort of restriction,
+ # TODO: Something seems wrong here ... I kept getting warnings until I putted in all this crap.
+ # Shouldn't we have a default setting somewhere? -- TobiX
+ if (((exists $args{'ENTRYAGGREGATOR'}) and ($args{'ENTRYAGGREGATOR'}||"") eq 'none') or
+ (!$self->{'restrictions'}{"$QualifiedField"})) {
+ $self->{'restrictions'}{"$QualifiedField"} =
+ "($QualifiedField $args{'OPERATOR'} $args{'VALUE'})";
+
+ }
+ else {
+ $self->{'restrictions'}{"$QualifiedField"} .=
+ " $args{'ENTRYAGGREGATOR'} ($QualifiedField $args{'OPERATOR'} $args{'VALUE'})";
+
+ }
+
+ return ($args{'ALIAS'});
+
+ }
+
+ # }}}
+
+ # {{{ sub _AddRestriction
+ sub _AddSubClause {
+ my $self = shift;
+ my $clauseid = shift;
+ my $subclause = shift;
+
+ $self->{'subclauses'}{"$clauseid"} = $subclause;
+
+ }
+ # }}}
+
+ # {{{ sub _WhereClause
+
+ sub _WhereClause {
+ my $self = shift;
+ my ($subclause, $where_clause);
+
+ #Go through all the generic restrictions and build up the "generic_restrictions" subclause
+ # That's the only one that EasySearch builds itself.
+ # Arguably, the abstraction should be better, but I don't really see where to put it.
+ $self->_CompileGenericRestrictions();
+
+ #Go through all restriction types. Build the where clause from the
+ #Various subclauses.
+ foreach $subclause (keys %{ $self->{'subclauses'}}) {
+ # Now, build up the where clause
+ if (defined ($where_clause)) {
+ $where_clause .= " AND ";
+ }
+
+ warn "$self $subclause doesn't exist"
+ if (!defined $self->{'subclauses'}{"$subclause"});
+ $where_clause .= $self->{'subclauses'}{"$subclause"};
+ }
+
+ $where_clause = " WHERE " . $where_clause if ($where_clause ne '');
+ return ($where_clause);
+ }
+
+ # }}}
+
+ # {{{ sub _CompileGenericRestrictions
+
+ #Compile the restrictions to a WHERE Clause
+
+ sub _CompileGenericRestrictions {
+ my $self = shift;
+ my ($restriction);
+ $self->{'subclauses'}{'generic_restrictions'} = undef;
+
+ #Go through all the restrictions of this type. Buld up the generic subclause
+ foreach $restriction (keys %{ $self->{'restrictions'}}) {
+ if (defined $self->{'subclauses'}{'generic_restrictions'}) {
+ $self->{'subclauses'}{'generic_restrictions'} .= " AND ";
+ }
+ $self->{'subclauses'}{'generic_restrictions'} .=
+ "(" . $self->{'restrictions'}{"$restriction"} . ")";
+ }
+ }
+
+ # }}}
+
+ # {{{ sub _Order
+
+ # This routine returns what the result set should be ordered by
+ sub _Order {
+
+ my $self = shift;
+ my $OrderClause;
+
+ if ($self->{'orderby'}) {
+ $OrderClause = " ORDER BY ". $self->{'orderby'};
+ }
+ else {
+ $OrderClause = " ORDER BY main.".$self->{'primary_key'}." ";
+ }
+ return ($OrderClause);
+ }
+
+ # }}}
+
+ # {{{ sub _OrderBy
+
+ # This routine returns whether the result set should be sorted Ascending or Descending
+
+ sub _OrderBy {
+ my $self = shift;
+ my $order_by;
+ if ($self->{'order'} =~ /^[dD]es/) {
+ $order_by = " DESC";
+ }
+ else {
+ $order_by = " ASC";
+ }
+ return($order_by);
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ routines dealing with table aliases
+
+ # {{{ sub NewAlias
+ sub NewAlias {
+ #TODO Stub
+
+ my $self = shift;
+ my $table = shift || die "Missing parameter";
+ my $alias=$table."_".$self->{'alias_count'};
+
+ $self->{'aliases'}[$self->{'alias_count'}]{'alias'} = $alias;
+ $self->{'aliases'}[$self->{'alias_count'}]{'table'} = $table;
+
+ $self->{'alias_count'}++;
+
+ return $alias;
+ }
+ # }}}
+
+ # {{{ sub _TableAliases
+
+ sub _TableAliases {
+ my $self = shift;
+
+ # Set up the first alias. for the _main_ table
+ my $compiled_aliases = $self->{'table'}." AS main";
+
+ # Go through all the other aliases we set up and build the compiled
+ # aliases string
+
+ for my $count (0..($self->{'alias_count'}-1)) {
+ $compiled_aliases .= ", ".
+ $self->{'aliases'}[$count]{'table'}. " as ".
+ $self->{'aliases'}[$count]{'alias'};
+ }
+
+ return ($compiled_aliases);
+ }
+
+ # }}}
+
+
+ # things we'll want to add:
+ # get aliases
+ # add restirction clause
+ #
+
+ # }}}
+
+ # {{{ private utility methods
+
+ # {{{ sub _Init
+
+ #Initialize the object
+
+ sub _Init {
+ my $self = shift;
+ my %args = ( Handle => undef,
+ @_
+ );
+ $self->{'DBIxHandle'} = $args{'Handle'};
+ $self->{'must_redo_search'}=1;
+ $self->{'itemscount'}=0;
+ $self->{'tables'} = "";
+ $self->{'auxillary_tables'} = "";
+ $self->{'where_clause'} = "";
+ $self->{'table_links'} = "";
+ $self->{'limit_clause'} = "";
+ $self->{'order'} = "";
+ $self->{'alias_count'} = 0;
+ $self->{'first_row'} = 0;
+ #we have no limit statements. DoSearch won't work.
+ $self->_isLimited(0);
+ }
+
+ # }}}
+
+ # {{{ sub _Handle
+ sub _Handle {
+ my $self = shift;
+ return ($self->{'DBIxHandle'});
+ }
+ # }}}
+
+ # {{{ sub _DoSearch
+
+ sub _DoSearch {
+ my $self = shift;
+ my ($QueryString, $Order);
+
+
+ $QueryString = "SELECT distinct main.* FROM " . $self->_TableAliases;
+
+
+ $QueryString .= $self->_WhereClause . " ".
+ $self->{'table_links'}. " "
+ if ($self->_isLimited > 0);
+
+ $QueryString .= $self->_Order . $self->_OrderBy . $self->_Limit;
+
+ print STDERR "DBIx::EasySearch->DoSearch Query: $QueryString\n"
+ if ($self->DEBUG);
+
+ # {{{ <Replaced missing fold top mark>
+
+ # {{{ get $self->{'records'} out of the database
+ $self->{'records'} = $self->_Handle->dbh->prepare($QueryString);
+
+ if (!$self->{'records'}) {
+ die "Error:" . $self->_Handle->dbh->errstr . "\n";
+ }
+ if (!$self->{'records'}->execute) {
+ die "DBIx::EasySearch error:" . $self->{'records'}->errstr . "\n\tQuery String is $QueryString\n";
+ }
+
+ # }}}
+
+ # populate $self->{'rows'} for $Count;
+ $self->{'rows'} = $self->{'records'}->rows();
+
+ my $counter = 0;
+
+ # {{{ Iterate through all the rows returned and get child objects
+ # TODO: this could be made much more efficient
+
+ while (my $row = $self->{'records'}->fetchrow_hashref()) {
+
+ $counter++;
+
+ $self->{'items'}[$counter] = $self->NewItem();
+ $self->{'items'}[$counter]->LoadFromHash($row);
+
+ print STDERR "ID is ". $self->{'items'}[$counter]->Id()."\n"
+ if ($self->DEBUG);
+
+ }
+
+ # TODO: It makes sense keeping and reusing the records statement
+ # handler. Anyway, I don't see that we need it anymore with the
+ # current design, and the statement handler will not easily be
+ # stored persistantly.
+
+ $self->{records}->finish;
+ delete $self->{records};
+
+ # }}}
+
+ $self->{'must_redo_search'}=0;
+
+ return($self->Count);
+ }
+
+ # }}}
+
+
+ # {{{ sub _Limit
+
+ sub _Limit {
+ my $self = shift;
+
+ my $limit_clause;
+
+ # LIMIT clauses are used for restricting ourselves to subsets of the search.
+ if ( $self->Rows) {
+ $limit_clause = " LIMIT ";
+ if ($self->FirstRow != 0) {
+ $limit_clause .= $self->FirstRow . ", ";
+ }
+ $limit_clause .= $self->Rows;
+ }
+ else {
+ $limit_clause = "";
+ }
+ return $limit_clause;
+ }
+ # }}}
+
+ # {{{ sub _isLimited
+ sub _isLimited {
+ my $self = shift;
+ if (@_) {
+ $self->{'is_limited'} = shift;
+ }
+ else {
+ return ($self->{'is_limited'});
+ }
+ }
+ # }}}
+
+ # }}} Private utility methods
+
+ # {{{ sub Rows
+
+ # This restricts the # of rows returned in a result
+
+ sub Rows {
+ my $self = shift;
+ if (@_) {
+ $self->{'show_rows'} = shift;
+ }
+ return ($self->{'show_rows'});
+
+ }
+ # }}}
+
+ # {{{ sub FirstRow
+
+ # returns the first row
+ sub FirstRow {
+ my $self = shift;
+ if (@_) {
+ $self->{'first_row'} = shift;
+
+ #SQL starts counting at 0
+ $self->{'first_row'}--;
+ }
+ return ($self->{'first_row'});
+
+ }
+
+ # }}}
+
+ # {{{ Public utility methods
+
+ # {{{ Counter, Count and IsLast
+ sub Counter {
+ return $_[0]->{'itemscount'};
+ }
+
+ # {{{ sub Count
+ sub Count {
+ my $self = shift;
+
+ if ($self->{'must_redo_search'}) {
+ return ($self->_DoSearch);
+ }
+ else {
+ return($self->{'rows'});
+ }
+ }
+
+ sub IsLast {
+ return $_[0]->{'itemscount'}==$_[0]->{'rows'};
+ }
+ # }}}
+
+
+
+ # {{{ sub DEBUG
+ sub DEBUG {
+ my $self = shift;
+ if (@_) {
+ $self->{'DEBUG'} = shift;
+ }
+ return ($self->{'DEBUG'});
+ }
+
+ # }}}
+
+ # }}}
+
+ # }}}
+
+ 1;
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::EasySearch - Perl extension for easy SQL SELECT Statement generation
+
+ =head1 SYNOPSIS
+
+ use DBIx::EasySearch;
+
+ then read the code. (yes, i'm being lame)
+
+ =head1 DESCRIPTION
+
+ Jesse is lame and hasn't written docs yet
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ DBIx::Handle, DBIx::Record, perl(1).
+
+ =cut
+
+ # }}}
+
+
+
+
+
+
+
+
+
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/MANIFEST'
Index: ./lib/DBIx/DBIx-EasySearch/MANIFEST
*** ./lib/DBIx/DBIx-EasySearch/MANIFEST Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/MANIFEST Fri Aug 11 23:29:00 2000
***************
*** 0 ****
--- 1,5 ----
+ Changes
+ EasySearch.pm
+ MANIFEST
+ Makefile.PL
+ test.pl
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/Makefile'
Index: ./lib/DBIx/DBIx-EasySearch/Makefile
*** ./lib/DBIx/DBIx-EasySearch/Makefile Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/Makefile Fri Aug 11 23:43:17 2000
***************
*** 0 ****
--- 1,654 ----
+ # This Makefile is for the DBIx::EasySearch extension to perl.
+ #
+ # It was generated automatically by MakeMaker version
+ # 5.4302 (Revision: 1.222) from the contents of
+ # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+ #
+ # ANY CHANGES MADE HERE WILL BE LOST!
+ #
+ # MakeMaker ARGV: ()
+ #
+ # MakeMaker Parameters:
+
+ # NAME => q[DBIx::EasySearch]
+ # VERSION_FROM => q[EasySearch.pm]
+
+ # --- MakeMaker post_initialize section:
+
+
+ # --- MakeMaker const_config section:
+
+ # These definitions are from config.sh (via /usr/lib/perl5/5.005/i386-linux/Config.pm)
+
+ # They may have been overridden via Makefile.PL or on the command line
+ AR = ar
+ CC = cc
+ CCCDLFLAGS = -fPIC
+ CCDLFLAGS = -rdynamic
+ DLEXT = so
+ DLSRC = dl_dlopen.xs
+ LD = cc
+ LDDLFLAGS = -shared -L/usr/local/lib
+ LDFLAGS = -L/usr/local/lib
+ LIBC =
+ LIB_EXT = .a
+ OBJ_EXT = .o
+ OSNAME = linux
+ OSVERS = 2.2.15pre14
+ RANLIB = :
+ SO = so
+ EXE_EXT =
+
+
+ # --- MakeMaker constants section:
+ AR_STATIC_ARGS = cr
+ NAME = DBIx::EasySearch
+ DISTNAME = DBIx-EasySearch
+ NAME_SYM = DBIx_EasySearch
+ VERSION = 0.05
+ VERSION_SYM = 0_05
+ XS_VERSION = 0.05
+ INST_BIN = blib/bin
+ INST_EXE = blib/script
+ INST_LIB = blib/lib
+ INST_ARCHLIB = blib/arch
+ INST_SCRIPT = blib/script
+ PREFIX = /usr
+ INSTALLDIRS = site
+ INSTALLPRIVLIB = $(PREFIX)/lib/perl5
+ INSTALLARCHLIB = $(PREFIX)/lib/perl5/5.005/i386-linux
+ INSTALLSITELIB = /usr/local/lib/site_perl
+ INSTALLSITEARCH = /usr/local/lib/site_perl/i386-linux
+ INSTALLBIN = $(PREFIX)/bin
+ INSTALLSCRIPT = $(PREFIX)/bin
+ PERL_LIB = /usr/lib/perl5/5.005
+ PERL_ARCHLIB = /usr/lib/perl5/5.005/i386-linux
+ SITELIBEXP = /usr/local/lib/site_perl
+ SITEARCHEXP = /usr/local/lib/site_perl/i386-linux
+ LIBPERL_A = libperl.a
+ FIRST_MAKEFILE = Makefile
+ MAKE_APERL_FILE = Makefile.aperl
+ PERLMAINCC = $(CC)
+ PERL_INC = /usr/lib/perl5/5.005/i386-linux/CORE
+ PERL = /usr/bin/perl
+ FULLPERL = /usr/bin/perl
+
+ VERSION_MACRO = VERSION
+ DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+ XS_VERSION_MACRO = XS_VERSION
+ XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+
+ MAKEMAKER = /usr/lib/perl5/5.005/ExtUtils/MakeMaker.pm
+ MM_VERSION = 5.4302
+
+ # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+ # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+ # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
+ # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+ # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+ FULLEXT = DBIx/EasySearch
+ BASEEXT = EasySearch
+ PARENT_NAME = DBIx
+ DLBASE = $(BASEEXT)
+ VERSION_FROM = EasySearch.pm
+ OBJECT =
+ LDFROM = $(OBJECT)
+ LINKTYPE = dynamic
+
+ # Handy lists of source code files:
+ XS_FILES=
+ C_FILES =
+ O_FILES =
+ H_FILES =
+ MAN1PODS =
+ MAN3PODS = EasySearch.pm
+ INST_MAN1DIR = blib/man1
+ INSTALLMAN1DIR = /usr/local/man/man1
+ MAN1EXT = 1p
+ INST_MAN3DIR = blib/man3
+ INSTALLMAN3DIR = /usr/local/man/man3
+ MAN3EXT = 3pm
+ PERM_RW = 644
+ PERM_RWX = 755
+
+ # work around a famous dec-osf make(1) feature(?):
+ makemakerdflt: all
+
+ .SUFFIXES: .xs .c .C .cpp .cxx .cc $(OBJ_EXT)
+
+ # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
+ # some make implementations will delete the Makefile when we rebuild it. Because
+ # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
+ # does so. Our milage may vary.
+ # .PRECIOUS: Makefile # seems to be not necessary anymore
+
+ .PHONY: all config static dynamic test linkext manifest
+
+ # Where is the Config information that we are using/depend on
+ CONFIGDEP = $(PERL_ARCHLIB)/Config.pm $(PERL_INC)/config.h
+
+ # Where to put things:
+ INST_LIBDIR = $(INST_LIB)/DBIx
+ INST_ARCHLIBDIR = $(INST_ARCHLIB)/DBIx
+
+ INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+ INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+ INST_STATIC =
+ INST_DYNAMIC =
+ INST_BOOT =
+
+ EXPORT_LIST =
+
+ PERL_ARCHIVE =
+
+ TO_INST_PM = EasySearch.pm
+
+ PM_TO_BLIB = EasySearch.pm \
+ $(INST_LIBDIR)/EasySearch.pm
+
+
+ # --- MakeMaker tool_autosplit section:
+
+ # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+ AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
+
+
+ # --- MakeMaker tool_xsubpp section:
+
+
+ # --- MakeMaker tools_other section:
+
+ SHELL = /bin/sh
+ CHMOD = chmod
+ CP = cp
+ LD = cc
+ MV = mv
+ NOOP = $(SHELL) -c true
+ RM_F = rm -f
+ RM_RF = rm -rf
+ TEST_F = test -f
+ TOUCH = touch
+ UMASK_NULL = umask 0
+ DEV_NULL = > /dev/null 2>&1
+
+ # The following is a portable way to say mkdir -p
+ # To see which directories are created, change the if 0 to if 1
+ MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
+
+ # This helps us to minimize the effect of the .exists files A yet
+ # better solution would be to have a stable file in the perl
+ # distribution with a timestamp of zero. But this solution doesn't
+ # need any changes to the core distribution and works with older perls
+ EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
+
+ # Here we warn users that an old packlist file was found somewhere,
+ # and that they should call some uninstall routine
+ WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \
+ -e 'print "WARNING: I have found an old package in\n";' \
+ -e 'print "\t$$ARGV[0].\n";' \
+ -e 'print "Please make sure the two installations are not conflicting\n";'
+
+ UNINST=0
+ VERBINST=1
+
+ MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
+ -e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
+
+ DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
+ -e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", shift, ">";' \
+ -e 'print "=over 4";' \
+ -e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
+ -e 'print "=back";'
+
+ UNINSTALL = $(PERL) -MExtUtils::Install \
+ -e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
+ -e 'print " packlist above carefully.\n There may be errors. Remove the";' \
+ -e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
+
+
+ # --- MakeMaker dist section:
+
+ DISTVNAME = $(DISTNAME)-$(VERSION)
+ TAR = tar
+ TARFLAGS = cvf
+ ZIP = zip
+ ZIPFLAGS = -r
+ COMPRESS = gzip --best
+ SUFFIX = .gz
+ SHAR = shar
+ PREOP = @$(NOOP)
+ POSTOP = @$(NOOP)
+ TO_UNIX = @$(NOOP)
+ CI = ci -u
+ RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+ DIST_CP = best
+ DIST_DEFAULT = tardist
+
+
+ # --- MakeMaker macro section:
+
+
+ # --- MakeMaker depend section:
+
+
+ # --- MakeMaker cflags section:
+
+
+ # --- MakeMaker const_loadlibs section:
+
+
+ # --- MakeMaker const_cccmd section:
+
+
+ # --- MakeMaker post_constants section:
+
+
+ # --- MakeMaker pasthru section:
+
+ PASTHRU = LIB="$(LIB)"\
+ LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"\
+ OPTIMIZE="$(OPTIMIZE)"
+
+
+ # --- MakeMaker c_o section:
+
+
+ # --- MakeMaker xs_c section:
+
+
+ # --- MakeMaker xs_o section:
+
+
+ # --- MakeMaker top_targets section:
+
+ #all :: config $(INST_PM) subdirs linkext manifypods
+
+ all :: pure_all manifypods
+ @$(NOOP)
+
+ pure_all :: config pm_to_blib subdirs linkext
+ @$(NOOP)
+
+ subdirs :: $(MYEXTLIB)
+ @$(NOOP)
+
+ config :: Makefile $(INST_LIBDIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_ARCHAUTODIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_AUTODIR)/.exists
+ @$(NOOP)
+
+ config :: Version_check
+ @$(NOOP)
+
+
+ $(INST_AUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_AUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_AUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
+
+ $(INST_LIBDIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_LIBDIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_LIBDIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
+
+ $(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_ARCHAUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
+
+ config :: $(INST_MAN3DIR)/.exists
+ @$(NOOP)
+
+
+ $(INST_MAN3DIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_MAN3DIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_MAN3DIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
+
+ help:
+ perldoc ExtUtils::MakeMaker
+
+ Version_check:
+ @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ -MExtUtils::MakeMaker=Version_check \
+ -e "Version_check('$(MM_VERSION)')"
+
+
+ # --- MakeMaker linkext section:
+
+ linkext :: $(LINKTYPE)
+ @$(NOOP)
+
+
+ # --- MakeMaker dlsyms section:
+
+
+ # --- MakeMaker dynamic section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make dynamic"
+ #dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
+ dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT)
+ @$(NOOP)
+
+
+ # --- MakeMaker dynamic_bs section:
+
+ BOOTSTRAP =
+
+
+ # --- MakeMaker dynamic_lib section:
+
+
+ # --- MakeMaker static section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make static"
+ #static :: Makefile $(INST_STATIC) $(INST_PM)
+ static :: Makefile $(INST_STATIC)
+ @$(NOOP)
+
+
+ # --- MakeMaker static_lib section:
+
+
+ # --- MakeMaker manifypods section:
+ POD2MAN_EXE = /usr/bin/pod2man
+ POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \
+ -e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "Makefile";' \
+ -e 'print "Manifying $$m{$$_}\n";' \
+ -e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\047t install $$m{$$_}\n";' \
+ -e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
+
+ manifypods : pure_all EasySearch.pm
+ @$(POD2MAN) \
+ EasySearch.pm \
+ $(INST_MAN3DIR)/DBIx::EasySearch.$(MAN3EXT)
+
+ # --- MakeMaker processPL section:
+
+
+ # --- MakeMaker installbin section:
+
+
+ # --- MakeMaker subdirs section:
+
+ # none
+
+ # --- MakeMaker clean section:
+
+ # Delete temporary files but do not touch installed files. We don't delete
+ # the Makefile here so a later make realclean still has a makefile to use.
+
+ clean ::
+ -rm -rf ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all perlmain.c mon.out core so_locations pm_to_blib *~ */*~ */*/*~ *$(OBJ_EXT) *$(LIB_EXT) perl.exe $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
+ -mv Makefile Makefile.old $(DEV_NULL)
+
+
+ # --- MakeMaker realclean section:
+
+ # Delete temporary files (via clean) and also delete installed files
+ realclean purge :: clean
+ rm -rf $(INST_AUTODIR) $(INST_ARCHAUTODIR)
+ rm -f $(INST_LIBDIR)/EasySearch.pm
+ rm -rf Makefile Makefile.old
+
+
+ # --- MakeMaker dist_basics section:
+
+ distclean :: realclean distcheck
+
+ distcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \
+ -e fullcheck
+
+ skipcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \
+ -e skipcheck
+
+ manifest :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \
+ -e mkmanifest
+
+
+ # --- MakeMaker dist_core section:
+
+ dist : $(DIST_DEFAULT)
+ @$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
+ -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "Makefile";'
+
+ tardist : $(DISTVNAME).tar$(SUFFIX)
+
+ zipdist : $(DISTVNAME).zip
+
+ $(DISTVNAME).tar$(SUFFIX) : distdir
+ $(PREOP)
+ $(TO_UNIX)
+ $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(COMPRESS) $(DISTVNAME).tar
+ $(POSTOP)
+
+ $(DISTVNAME).zip : distdir
+ $(PREOP)
+ $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+ uutardist : $(DISTVNAME).tar$(SUFFIX)
+ uuencode $(DISTVNAME).tar$(SUFFIX) \
+ $(DISTVNAME).tar$(SUFFIX) > \
+ $(DISTVNAME).tar$(SUFFIX)_uu
+
+ shdist : distdir
+ $(PREOP)
+ $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+
+ # --- MakeMaker dist_dir section:
+
+ distdir :
+ $(RM_RF) $(DISTVNAME)
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+
+ # --- MakeMaker dist_test section:
+
+ disttest : distdir
+ cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE)
+ cd $(DISTVNAME) && $(MAKE) test
+
+
+ # --- MakeMaker dist_ci section:
+
+ ci :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \
+ -e "@all = keys %{ maniread() };" \
+ -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \
+ -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
+
+
+ # --- MakeMaker install section:
+
+ install :: all pure_install doc_install
+
+ install_perl :: all pure_perl_install doc_perl_install
+
+ install_site :: all pure_site_install doc_site_install
+
+ install_ :: install_site
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_install :: pure_$(INSTALLDIRS)_install
+
+ doc_install :: doc_$(INSTALLDIRS)_install
+ @echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
+
+ pure__install : pure_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ doc__install : doc_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_perl_install ::
+ @$(MOD_INSTALL) \
+ read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(INSTALLARCHLIB) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+ pure_site_install ::
+ @$(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLSITELIB) \
+ $(INST_ARCHLIB) $(INSTALLSITEARCH) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+ doc_perl_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLPRIVLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+ doc_site_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+
+ uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+
+ uninstall_from_perldirs ::
+ @$(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+ uninstall_from_sitedirs ::
+ @$(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+ # --- MakeMaker force section:
+ # Phony target to force checking subdirectories.
+ FORCE:
+ @$(NOOP)
+
+
+ # --- MakeMaker perldepend section:
+
+
+ # --- MakeMaker makefile section:
+
+ # We take a very conservative approach here, but it\'s worth it.
+ # We move Makefile to Makefile.old here to avoid gnu make looping.
+ Makefile : Makefile.PL $(CONFIGDEP)
+ @echo "Makefile out-of-date with respect to $?"
+ @echo "Cleaning current config before rebuilding Makefile..."
+ -@$(RM_F) Makefile.old
+ -@$(MV) Makefile Makefile.old
+ -$(MAKE) -f Makefile.old clean $(DEV_NULL) || $(NOOP)
+ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL
+ @echo "==> Your Makefile has been rebuilt. <=="
+ @echo "==> Please rerun the make command. <=="
+ false
+
+ # To change behavior to :: would be nice, but would break Tk b9.02
+ # so you find such a warning below the dist target.
+ #Makefile :: $(VERSION_FROM)
+ # @echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
+
+
+ # --- MakeMaker staticmake section:
+
+ # --- MakeMaker makeaperl section ---
+ MAP_TARGET = perl
+ FULLPERL = /usr/bin/perl
+
+ $(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+ $(MAKE) -f $(MAKE_APERL_FILE) $@
+
+ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
+ @echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ @$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ Makefile.PL DIR= \
+ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+ # --- MakeMaker test section:
+
+ TEST_VERBOSE=0
+ TEST_TYPE=test_$(LINKTYPE)
+ TEST_FILE = test.pl
+ TEST_FILES =
+ TESTDB_SW = -d
+
+ testdb :: testdb_$(LINKTYPE)
+
+ test :: $(TEST_TYPE)
+
+ test_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) $(TESTDB_SW) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ test_ : test_dynamic
+
+ test_static :: test_dynamic
+ testdb_static :: testdb_dynamic
+
+
+ # --- MakeMaker ppd section:
+ # Creates a PPD (Perl Package Description) for a binary distribution.
+ ppd:
+ @$(PERL) -e "print qq{<SOFTPKG NAME=\"DBIx-EasySearch\" VERSION=\"0,05,0,0\">\n}. qq{\t<TITLE>DBIx-EasySearch</TITLE>\n}. qq{\t<ABSTRACT></ABSTRACT>\n}. qq{\t<AUTHOR></AUTHOR>\n}. qq{\t<IMPLEMENTATION>\n}. qq{\t\t<OS NAME=\"$(OSNAME)\" />\n}. qq{\t\t<A
RCHITECTURE NAME=\"i386-linux\" />\n}. qq{\t\t<CODEBASE HREF=\"\" />\n}. qq{\t</IMPLEMENTATION>\n}. qq{</SOFTPKG>\n}" > DBIx-EasySearch.ppd
+
+ # --- MakeMaker pm_to_blib section:
+
+ pm_to_blib: $(TO_INST_PM)
+ @$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
+ "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
+ -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'$(INST_LIB)/auto')"
+ @$(TOUCH) $@
+
+
+ # --- MakeMaker selfdocument section:
+
+
+ # --- MakeMaker postamble section:
+
+
+ # End.
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/Makefile.PL'
Index: ./lib/DBIx/DBIx-EasySearch/Makefile.PL
*** ./lib/DBIx/DBIx-EasySearch/Makefile.PL Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/Makefile.PL Fri Aug 11 23:28:59 2000
***************
*** 0 ****
--- 1,7 ----
+ use ExtUtils::MakeMaker;
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+ WriteMakefile(
+ 'NAME' => 'DBIx::EasySearch',
+ 'VERSION_FROM' => 'EasySearch.pm', # finds $VERSION
+ );
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm'
Index: ./lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm
*** ./lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm Fri Aug 11 18:07:18 2000
***************
*** 0 ****
--- 1,716 ----
+ # $Header: /cvsroot/twort/rt/lib/DBIx/EasySearch.pm,v 1.2 2000/08/03 13:15:03 tobix Exp $
+
+ # {{{ Version, package, new, etc
+ package DBIx::EasySearch;
+
+ use strict;
+ use vars qw($VERSION);
+
+ $VERSION = '0.05';
+
+ # {{{ sub new
+
+ #instantiate a new object.
+
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return ($self)
+ }
+ # }}}
+
+ # }}}
+
+ # {{{ Methods dealing with Record objects (navigation)
+
+ # {{{ sub Next
+
+ sub Next {
+ my $self = shift;
+ my @row;
+
+ if (!$self->_isLimited) {
+ return(0);
+ }
+ if ($self->{'must_redo_search'} != 0) {
+ $self->_DoSearch();
+ }
+
+ if ($self->{'itemscount'} < $self->{'rows'}) {
+ #increment the itemcounter.
+ $self->{'itemscount'}++;
+ #serve out that item
+ return ($self->{'items'}[$self->{'itemscount'}]);
+ }
+ else {
+ #we've gone through the whole list.
+ #reset the count.
+ $self->{'itemscount'} = 0;
+ return(undef);
+ }
+ }
+
+ # }}}
+
+ # {{{ sub GotoFirstItem
+ sub GotoFirstItem {
+ my $self = shift;
+ $self->GotoItem(0);
+ }
+ # }}}
+
+ # {{{ sub GotoItem
+
+ sub GotoItem {
+ my $self = shift;
+ my $item = shift;
+ $self->{'itemscount'} = $item;
+ }
+
+ # }}}
+
+ # {{{ sub First
+
+ sub First {
+ my $self = shift;
+ #Reset the itemcount
+ $self->GotoFirstItem();
+ return ($self->Next);
+ }
+
+ # }}}
+
+ # {{{ sub NewItem
+ sub NewItem {
+ my $self = shift;
+ my $foo = (caller(1))[3];
+ die "DBIx::EasySearch needs to be subclassed. you can't use it directly. ($foo)\n";
+ }
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with Restrictions (where subclauses) and ordering
+
+ # {{{ sub UnLimit
+ sub UnLimit {
+ my $self=shift;
+ $self->_isLimited(-1);
+ }
+
+ # }}}
+
+ # {{{ sub Limit
+
+ # This clearly needs to be documented a bit ... this is how TobiX has
+ # understood this:
+
+ # TABLE can be set to something different than this table if a join is
+ # wanted (that means we can't do recursive joins as for now). Unless
+ # ALIAS is set, the join criterias will be taken from EXT_LINKFIELD
+ # and INT_LINKFIELD and added to the criterias. If ALIAS is set, new
+ # criterias about the foreign table will be added.
+
+ # VALUE should always be set and will always be quoted. Maybe TYPE
+ # should imply that the value shouldn't be quoted? IMO (TobiX) we
+ # shouldn't use quoted values, we should rather use placeholders and
+ # pass the arguments when executing the statement. This will also
+ # allow us to alter limits and reexecute the search with a low cost by
+ # keeping the statement handler.
+
+ # ENTRYAGGREGATOR might be or or and or whatever :) TobiX hasn't
+ # understood how to recurse (like (true or (false and true) or (true
+ # and true and true)))
+
+ # OPERATOR is whatever should be putted in between the FIELD and the
+ # VALUE.
+
+ # ORDERBY is the SQL ORDERBY
+
+ # ORDER can be ASCending or DESCending.
+
+ sub Limit {
+ my $self = shift;
+ my %args = (
+ TABLE => $self->{'table'},
+ FIELD => undef,
+ VALUE => undef,
+ ALIAS => undef,
+ TYPE => undef, #TODO: figure out why this is here
+ ENTRYAGGREGATOR => 'or',
+ INT_LINKFIELD => ($self->{'primary_key'} || 'id'),
+ EXT_LINKFIELD => 'id',
+ OPERATOR => '=',
+ ORDERBY => undef,
+ ORDER => undef,
+
+ @_ # get the real argumentlist
+ );
+
+ my ($Alias);
+
+ if ($args{'FIELD'}) {
+ #If it's a like, we supply the %s around the search term
+ if ($args{'OPERATOR'} eq "LIKE") {
+ $args{'VALUE'} = "%".$args{'VALUE'} ."%";
+ }
+ $args{'VALUE'} = $self->_Handle->dbh->quote($args{'VALUE'});
+ }
+
+ $Alias = $self->_GenericRestriction(%args);
+ warn "No table alias set!"
+ unless $Alias;
+
+ # {{{ Set $self->{order} - can be "ASC"ending or "DESC"ending.
+ if ($args{'ORDER'}) {
+ $self->{'order'} = $args{'ORDER'};
+ }
+ # }}}
+
+ # {{{ If we're setting an OrderBy, set $self->{'orderby'} here
+ if ($args{'ORDERBY'}) {
+ # 1. if an alias was passed in, use that.
+ if ($args{'ALIAS'}) {
+ $self->{'orderby'} = $args{'ALIAS'}.".".$args{'ORDERBY'};
+ }
+ # 2. if an alias was generated, use that.
+ elsif ($Alias) {
+ $self->{'orderby'} = "$Alias.".$args{'ORDERBY'};
+ }
+ # 3. use the primary
+ else {
+ $self->{'orderby'} = "main.".$args{'ORDERBY'};
+ }
+ }
+ # }}}
+
+ # We're now limited. people can do searches.
+
+ $self->_isLimited(1);
+
+ if (defined ($Alias)) {
+ return($Alias);
+ }
+ else {
+ return(0);
+ }
+ }
+
+ # }}}
+
+ # {{{ sub ShowRestrictions
+
+ #Show Restrictions
+ sub ShowRestrictions {
+ my $self = shift;
+ $self->_CompileGenericRestrictions();
+ $self->_CompileSubClauses();
+ return($self->{'where_clause'});
+
+ }
+
+ # }}}
+
+ # {{{ sub ImportRestrictions
+
+ #import a restrictions clause
+ sub ImportRestrictions {
+ my $self = shift;
+ $self->{'where_clause'} = shift;
+ }
+ # }}}
+
+ # {{{ sub _GenericRestriction
+
+ sub _GenericRestriction {
+ my $self = shift;
+ my %args = (
+ TABLE => $self->{'table'},
+ FIELD => undef,
+ VALUE => undef, #TODO: $Value should take an array of values and generate
+ #the proper where clause.
+ ALIAS => undef,
+ ENTRYAGGREGATOR => undef,
+ OPERATOR => '=',
+ INT_LINKFIELD => undef,
+ EXT_LINKFIELD => undef,
+ RESTRICTION_TYPE => 'generic',
+ @_);
+ my ($QualifiedField);
+
+ #since we're changing the search criteria, we need to redo the search
+ $self->{'must_redo_search'}=1;
+
+
+ # {{{ if there's no alias set, we need to set it
+
+ if (!$args{'ALIAS'}) {
+
+ #if the table we're looking at is the same as the main table
+ if ($args{'TABLE'} eq $self->{'table'}) {
+
+ # main is the alias of the "primary table.
+ # TODO this code assumes no self joins on that table.
+ # if someone can name a case where we'd want to do that, I'll change it.
+
+ $args{'ALIAS'} = 'main';
+ }
+
+ # {{{ if we're joining, we need to work out the table alias
+
+ else {
+ $args{'ALIAS'}=$self->NewAlias($args{'TABLE'})
+ or warn;
+
+ warn "missing input parameter INT_LINKFIELD"
+ unless $args{'INT_LINKFIELD'};
+ warn "missing input parameter EXT_LINKFIELD"
+ unless $args{'EXT_LINKFIELD'};
+
+ # we need to build the table of links.
+ $self->{'table_links'} .= "AND main.". $args{'INT_LINKFIELD'}."=".
+ $args{'ALIAS'}.".".$args{'EXT_LINKFIELD'};
+ }
+
+ # }}}
+ }
+
+ # }}}
+
+ # If we were just setting an alias, return
+ if (!$args{'FIELD'}) {
+ return ($args{'ALIAS'});
+ }
+
+ #Set this to the name of the field and the alias.
+ $QualifiedField = $args{'ALIAS'}.".".$args{'FIELD'};
+ print STDERR "DBIx::EasySearch->_GenericRestriction QualifiedField is $QualifiedField\n"
+ if ($self->DEBUG);
+
+ #If we're overwriting this sort of restriction,
+ # TODO: Something seems wrong here ... I kept getting warnings until I putted in all this crap.
+ # Shouldn't we have a default setting somewhere? -- TobiX
+ if (((exists $args{'ENTRYAGGREGATOR'}) and ($args{'ENTRYAGGREGATOR'}||"") eq 'none') or
+ (!$self->{'restrictions'}{"$QualifiedField"})) {
+ $self->{'restrictions'}{"$QualifiedField"} =
+ "($QualifiedField $args{'OPERATOR'} $args{'VALUE'})";
+
+ }
+ else {
+ $self->{'restrictions'}{"$QualifiedField"} .=
+ " $args{'ENTRYAGGREGATOR'} ($QualifiedField $args{'OPERATOR'} $args{'VALUE'})";
+
+ }
+
+ return ($args{'ALIAS'});
+
+ }
+
+ # }}}
+
+ # {{{ sub _AddRestriction
+ sub _AddSubClause {
+ my $self = shift;
+ my $clauseid = shift;
+ my $subclause = shift;
+
+ $self->{'subclauses'}{"$clauseid"} = $subclause;
+
+ }
+ # }}}
+
+ # {{{ sub _WhereClause
+
+ sub _WhereClause {
+ my $self = shift;
+ my ($subclause, $where_clause);
+
+ #Go through all the generic restrictions and build up the "generic_restrictions" subclause
+ # That's the only one that EasySearch builds itself.
+ # Arguably, the abstraction should be better, but I don't really see where to put it.
+ $self->_CompileGenericRestrictions();
+
+ #Go through all restriction types. Build the where clause from the
+ #Various subclauses.
+ foreach $subclause (keys %{ $self->{'subclauses'}}) {
+ # Now, build up the where clause
+ if (defined ($where_clause)) {
+ $where_clause .= " AND ";
+ }
+
+ warn "$self $subclause doesn't exist"
+ if (!defined $self->{'subclauses'}{"$subclause"});
+ $where_clause .= $self->{'subclauses'}{"$subclause"};
+ }
+
+ $where_clause = " WHERE " . $where_clause if ($where_clause ne '');
+ return ($where_clause);
+ }
+
+ # }}}
+
+ # {{{ sub _CompileGenericRestrictions
+
+ #Compile the restrictions to a WHERE Clause
+
+ sub _CompileGenericRestrictions {
+ my $self = shift;
+ my ($restriction);
+ $self->{'subclauses'}{'generic_restrictions'} = undef;
+
+ #Go through all the restrictions of this type. Buld up the generic subclause
+ foreach $restriction (keys %{ $self->{'restrictions'}}) {
+ if (defined $self->{'subclauses'}{'generic_restrictions'}) {
+ $self->{'subclauses'}{'generic_restrictions'} .= " AND ";
+ }
+ $self->{'subclauses'}{'generic_restrictions'} .=
+ "(" . $self->{'restrictions'}{"$restriction"} . ")";
+ }
+ }
+
+ # }}}
+
+ # {{{ sub _Order
+
+ # This routine returns what the result set should be ordered by
+ sub _Order {
+
+ my $self = shift;
+ my $OrderClause;
+
+ if ($self->{'orderby'}) {
+ $OrderClause = " ORDER BY ". $self->{'orderby'};
+ }
+ else {
+ $OrderClause = " ORDER BY main.".$self->{'primary_key'}." ";
+ }
+ return ($OrderClause);
+ }
+
+ # }}}
+
+ # {{{ sub _OrderBy
+
+ # This routine returns whether the result set should be sorted Ascending or Descending
+
+ sub _OrderBy {
+ my $self = shift;
+ my $order_by;
+ if ($self->{'order'} =~ /^[dD]es/) {
+ $order_by = " DESC";
+ }
+ else {
+ $order_by = " ASC";
+ }
+ return($order_by);
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ routines dealing with table aliases
+
+ # {{{ sub NewAlias
+ sub NewAlias {
+ #TODO Stub
+
+ my $self = shift;
+ my $table = shift || die "Missing parameter";
+ my $alias=$table."_".$self->{'alias_count'};
+
+ $self->{'aliases'}[$self->{'alias_count'}]{'alias'} = $alias;
+ $self->{'aliases'}[$self->{'alias_count'}]{'table'} = $table;
+
+ $self->{'alias_count'}++;
+
+ return $alias;
+ }
+ # }}}
+
+ # {{{ sub _TableAliases
+
+ sub _TableAliases {
+ my $self = shift;
+
+ # Set up the first alias. for the _main_ table
+ my $compiled_aliases = $self->{'table'}." AS main";
+
+ # Go through all the other aliases we set up and build the compiled
+ # aliases string
+
+ for my $count (0..($self->{'alias_count'}-1)) {
+ $compiled_aliases .= ", ".
+ $self->{'aliases'}[$count]{'table'}. " as ".
+ $self->{'aliases'}[$count]{'alias'};
+ }
+
+ return ($compiled_aliases);
+ }
+
+ # }}}
+
+
+ # things we'll want to add:
+ # get aliases
+ # add restirction clause
+ #
+
+ # }}}
+
+ # {{{ private utility methods
+
+ # {{{ sub _Init
+
+ #Initialize the object
+
+ sub _Init {
+ my $self = shift;
+ my %args = ( Handle => undef,
+ @_
+ );
+ $self->{'DBIxHandle'} = $args{'Handle'};
+ $self->{'must_redo_search'}=1;
+ $self->{'itemscount'}=0;
+ $self->{'tables'} = "";
+ $self->{'auxillary_tables'} = "";
+ $self->{'where_clause'} = "";
+ $self->{'table_links'} = "";
+ $self->{'limit_clause'} = "";
+ $self->{'order'} = "";
+ $self->{'alias_count'} = 0;
+ $self->{'first_row'} = 0;
+ #we have no limit statements. DoSearch won't work.
+ $self->_isLimited(0);
+ }
+
+ # }}}
+
+ # {{{ sub _Handle
+ sub _Handle {
+ my $self = shift;
+ return ($self->{'DBIxHandle'});
+ }
+ # }}}
+
+ # {{{ sub _DoSearch
+
+ sub _DoSearch {
+ my $self = shift;
+ my ($QueryString, $Order);
+
+
+ $QueryString = "SELECT distinct main.* FROM " . $self->_TableAliases;
+
+
+ $QueryString .= $self->_WhereClause . " ".
+ $self->{'table_links'}. " "
+ if ($self->_isLimited > 0);
+
+ $QueryString .= $self->_Order . $self->_OrderBy . $self->_Limit;
+
+ print STDERR "DBIx::EasySearch->DoSearch Query: $QueryString\n"
+ if ($self->DEBUG);
+
+ # {{{ <Replaced missing fold top mark>
+
+ # {{{ get $self->{'records'} out of the database
+ $self->{'records'} = $self->_Handle->dbh->prepare($QueryString);
+
+ if (!$self->{'records'}) {
+ die "Error:" . $self->_Handle->dbh->errstr . "\n";
+ }
+ if (!$self->{'records'}->execute) {
+ die "DBIx::EasySearch error:" . $self->{'records'}->errstr . "\n\tQuery String is $QueryString\n";
+ }
+
+ # }}}
+
+ # populate $self->{'rows'} for $Count;
+ $self->{'rows'} = $self->{'records'}->rows();
+
+ my $counter = 0;
+
+ # {{{ Iterate through all the rows returned and get child objects
+ # TODO: this could be made much more efficient
+
+ while (my $row = $self->{'records'}->fetchrow_hashref()) {
+
+ $counter++;
+
+ $self->{'items'}[$counter] = $self->NewItem();
+ $self->{'items'}[$counter]->LoadFromHash($row);
+
+ print STDERR "ID is ". $self->{'items'}[$counter]->Id()."\n"
+ if ($self->DEBUG);
+
+ }
+
+ # TODO: It makes sense keeping and reusing the records statement
+ # handler. Anyway, I don't see that we need it anymore with the
+ # current design, and the statement handler will not easily be
+ # stored persistantly.
+
+ $self->{records}->finish;
+ delete $self->{records};
+
+ # }}}
+
+ $self->{'must_redo_search'}=0;
+
+ return($self->Count);
+ }
+
+ # }}}
+
+
+ # {{{ sub _Limit
+
+ sub _Limit {
+ my $self = shift;
+
+ my $limit_clause;
+
+ # LIMIT clauses are used for restricting ourselves to subsets of the search.
+ if ( $self->Rows) {
+ $limit_clause = " LIMIT ";
+ if ($self->FirstRow != 0) {
+ $limit_clause .= $self->FirstRow . ", ";
+ }
+ $limit_clause .= $self->Rows;
+ }
+ else {
+ $limit_clause = "";
+ }
+ return $limit_clause;
+ }
+ # }}}
+
+ # {{{ sub _isLimited
+ sub _isLimited {
+ my $self = shift;
+ if (@_) {
+ $self->{'is_limited'} = shift;
+ }
+ else {
+ return ($self->{'is_limited'});
+ }
+ }
+ # }}}
+
+ # }}} Private utility methods
+
+ # {{{ sub Rows
+
+ # This restricts the # of rows returned in a result
+
+ sub Rows {
+ my $self = shift;
+ if (@_) {
+ $self->{'show_rows'} = shift;
+ }
+ return ($self->{'show_rows'});
+
+ }
+ # }}}
+
+ # {{{ sub FirstRow
+
+ # returns the first row
+ sub FirstRow {
+ my $self = shift;
+ if (@_) {
+ $self->{'first_row'} = shift;
+
+ #SQL starts counting at 0
+ $self->{'first_row'}--;
+ }
+ return ($self->{'first_row'});
+
+ }
+
+ # }}}
+
+ # {{{ Public utility methods
+
+ # {{{ Counter, Count and IsLast
+ sub Counter {
+ return $_[0]->{'itemscount'};
+ }
+
+ # {{{ sub Count
+ sub Count {
+ my $self = shift;
+
+ if ($self->{'must_redo_search'}) {
+ return ($self->_DoSearch);
+ }
+ else {
+ return($self->{'rows'});
+ }
+ }
+
+ sub IsLast {
+ return $_[0]->{'itemscount'}==$_[0]->{'rows'};
+ }
+ # }}}
+
+
+
+ # {{{ sub DEBUG
+ sub DEBUG {
+ my $self = shift;
+ if (@_) {
+ $self->{'DEBUG'} = shift;
+ }
+ return ($self->{'DEBUG'});
+ }
+
+ # }}}
+
+ # }}}
+
+ # }}}
+
+ 1;
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::EasySearch - Perl extension for easy SQL SELECT Statement generation
+
+ =head1 SYNOPSIS
+
+ use DBIx::EasySearch;
+
+ then read the code. (yes, i'm being lame)
+
+ =head1 DESCRIPTION
+
+ Jesse is lame and hasn't written docs yet
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ DBIx::Handle, DBIx::Record, perl(1).
+
+ =cut
+
+ # }}}
+
+
+
+
+
+
+
+
+
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm'
Index: ./lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm
*** ./lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm Fri Aug 11 23:43:18 2000
***************
*** 0 ****
--- 1,220 ----
+ .rn '' }`
+ ''' $RCSfile$$Revision$$Date$
+ '''
+ ''' $Log$
+ '''
+ .de Sh
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Ip
+ .br
+ .ie \\n(.$>=3 .ne \\$3
+ .el .ne 3
+ .IP "\\$1" \\$2
+ ..
+ .de Vb
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve
+ .ft R
+
+ .fi
+ ..
+ '''
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+ ''' Bell System Logo is used as a dummy character.
+ '''
+ .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+ .ds -- \(*W-
+ .ds PI pi
+ .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ ''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+ ''' \*(L" and \*(R", except that they are used on ".xx" lines,
+ ''' such as .IP and .SH, which do another additional levels of
+ ''' double-quote interpretation
+ .ds M" """
+ .ds S" """
+ .ds N" """""
+ .ds T" """""
+ .ds L' '
+ .ds R' '
+ .ds M' '
+ .ds S' '
+ .ds N' '
+ .ds T' '
+ 'br\}
+ .el\{\
+ .ds -- \(em\|
+ .tr \*(Tr
+ .ds L" ``
+ .ds R" ''
+ .ds M" ``
+ .ds S" ''
+ .ds N" ``
+ .ds T" ''
+ .ds L' `
+ .ds R' '
+ .ds M' `
+ .ds S' '
+ .ds N' `
+ .ds T' '
+ .ds PI \(*p
+ 'br\}
+ .\" If the F register is turned on, we'll generate
+ .\" index entries out stderr for the following things:
+ .\" TH Title
+ .\" SH Header
+ .\" Sh Subsection
+ .\" Ip Item
+ .\" X<> Xref (embedded
+ .\" Of course, you have to process the output yourself
+ .\" in some meaninful fashion.
+ .if \nF \{
+ .de IX
+ .tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .nr % 0
+ .rr F
+ .\}
+ .TH EasySearch 3pm "perl 5.005, patch 03" "11/Aug/2000" "User Contributed Perl Documentation"
+ .UC
+ .if n .hy 0
+ .if n .na
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .de CQ \" put $1 in typewriter font
+ .ft CW
+ 'if n "\c
+ 'if t \\&\\$1\c
+ 'if n \\&\\$1\c
+ 'if n \&"
+ \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+ '.ft R
+ ..
+ .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+ . \" AM - accent mark definitions
+ .bd B 3
+ . \" fudge factors for nroff and troff
+ .if n \{\
+ . ds #H 0
+ . ds #V .8m
+ . ds #F .3m
+ . ds #[ \f1
+ . ds #] \fP
+ .\}
+ .if t \{\
+ . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ . ds #V .6m
+ . ds #F 0
+ . ds #[ \&
+ . ds #] \&
+ .\}
+ . \" simple accents for nroff and troff
+ .if n \{\
+ . ds ' \&
+ . ds ` \&
+ . ds ^ \&
+ . ds , \&
+ . ds ~ ~
+ . ds ? ?
+ . ds ! !
+ . ds /
+ . ds q
+ .\}
+ .if t \{\
+ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ . ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+ . ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+ . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ . ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+ .\}
+ . \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+ .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+ .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+ .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .ds oe o\h'-(\w'o'u*4/10)'e
+ .ds Oe O\h'-(\w'O'u*4/10)'E
+ . \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ . \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ . ds : e
+ . ds 8 ss
+ . ds v \h'-1'\o'\(aa\(ga'
+ . ds _ \h'-1'^
+ . ds . \h'-1'.
+ . ds 3 3
+ . ds o a
+ . ds d- d\h'-1'\(ga
+ . ds D- D\h'-1'\(hy
+ . ds th \o'bp'
+ . ds Th \o'LP'
+ . ds ae ae
+ . ds Ae AE
+ . ds oe oe
+ . ds Oe OE
+ .\}
+ .rm #[ #] #H #V #F C
+ .SH "NAME"
+ DBIx::EasySearch \- Perl extension for easy SQL SELECT Statement generation
+ .SH "SYNOPSIS"
+ .PP
+ .Vb 1
+ \& use DBIx::EasySearch;
+ .Ve
+ .Vb 1
+ \& then read the code. (yes, i'm being lame)
+ .Ve
+ .SH "DESCRIPTION"
+ Jesse is lame and hasn't written docs yet
+ .SH "AUTHOR"
+ Jesse Vincent, jesse at fsck.com
+ .SH "SEE ALSO"
+ DBIx::Handle, DBIx::Record, \fIperl\fR\|(1).
+
+ .rn }` ''
+ .IX Title "EasySearch 3pm"
+ .IX Name "DBIx::EasySearch - Perl extension for easy SQL SELECT Statement generation"
+
+ .IX Header "NAME"
+
+ .IX Header "SYNOPSIS"
+
+ .IX Header "DESCRIPTION"
+
+ .IX Header "AUTHOR"
+
+ .IX Header "SEE ALSO"
+
diff -c /dev/null 'work/lib/DBIx/DBIx-EasySearch/test.pl'
Index: ./lib/DBIx/DBIx-EasySearch/test.pl
*** ./lib/DBIx/DBIx-EasySearch/test.pl Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-EasySearch/test.pl Fri Aug 11 23:28:59 2000
***************
*** 0 ****
--- 1,20 ----
+ # Before `make install' is performed this script should be runnable with
+ # `make test'. After `make install' it should work as `perl test.pl'
+
+ ######################### We start with some black magic to print on failure.
+
+ # Change 1..1 below to 1..last_test_to_print .
+ # (It may become useful if the test is moved to ./t subdirectory.)
+
+ BEGIN { $| = 1; print "1..1\n"; }
+ END {print "not ok 1\n" unless $loaded;}
+ use DBIx::EasySearch;
+ $loaded = 1;
+ print "ok 1\n";
+
+ ######################### End of black magic.
+
+ # Insert your test code below (better if it prints "ok 13"
+ # (correspondingly "not ok 13") depending on the success of chunk 13
+ # of the test code):
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/Changes'
Index: ./lib/DBIx/DBIx-Handle/Changes
*** ./lib/DBIx/DBIx-Handle/Changes Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/Changes Fri Aug 11 23:29:15 2000
***************
*** 0 ****
--- 1,5 ----
+ Revision history for Perl extension DBIx::Handle.
+
+ 0.01 Fri Aug 11 23:29:15 2000
+ - original version; created by h2xs 1.19
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/Handle.pm'
Index: ./lib/DBIx/DBIx-Handle/Handle.pm
*** ./lib/DBIx/DBIx-Handle/Handle.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/Handle.pm Fri Aug 11 23:48:52 2000
***************
*** 0 ****
--- 1,232 ----
+ # $Header: /proj/maps/src/rt/lib/DBIx/DBIx-Handle/Handle.pm,v 1.1 2000/08/12 06:48:52 ivan Exp $
+ package DBIx::Handle;
+ use Carp;
+ use DBI;
+ use strict;
+ use vars qw($VERSION @ISA $Handle);
+
+
+ $VERSION = '0.02';
+
+
+
+ #instantiate a new object.
+ # {{{ sub new
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ #we have no limit statements. DoSearch won't work.
+ return ($self)
+ }
+ # }}}
+
+ # {{{ sub Connect
+ sub Connect {
+ my $self = shift;
+
+ my %args = ( Driver => undef,
+ Database => undef,
+ Host => 'localhost',
+ User => undef,
+ Password => undef,
+ @_);
+
+ my $dsn;
+
+ $dsn = "dbi:$args{'Driver'}:$args{'Database'}:$args{'Host'}";
+
+ $Handle = DBI->connect_cached($dsn, $args{'User'}, $args{'Password'}) || croak "Connect Failed $DBI::errstr\n" ;
+
+
+ $Handle->{RaiseError}=1;
+ $Handle->{PrintError}=1;
+ return ($Handle);
+ }
+ # }}}
+
+ # {{{ sub Disconnect
+
+ sub Disconnect {
+ my $self = shift;
+ return ($self->dbh->disconnect());
+ }
+
+ # {{{ sub Handle / dbh
+ sub Handle {
+ return($Handle);
+ }
+
+ *dbh=\&Handle;
+ # }}}
+
+ # {{{ sub UpdateTableValue
+
+ sub UpdateTableValue {
+ my $self = shift;
+
+ my $Table = shift;
+ my $Col = shift;
+ my $NewValue = shift;
+ my $Record = shift;
+ my $is_sql = shift;
+ my $QueryString;
+
+ # quote the value
+ # TODO: We need some general way to escape SQL functions.
+ $NewValue=$self->safe_quote($NewValue)
+ unless ($is_sql or
+ $Col=~/^(Created|LastUpdated)$/ && $NewValue=~/^now\(\)$/i);
+ # build the query string
+ $QueryString = "UPDATE $Table SET $Col = $NewValue WHERE id = $Record";
+
+ # TODO update the last edited
+ # (Tobix: I think this is already taken care of by now in DBIx::Record?)
+
+ my $sth = $self->dbh->prepare($QueryString);
+ if (!$sth) {
+
+ if ($main::debug) {
+ die "Error:" . $self->dbh->errstr . "\n";
+ }
+ else {
+ return (0);
+ }
+ }
+ if (!$sth->execute) {
+ if ($self->{'debug'}) {
+ die "Error:" . $sth->errstr . "\n";
+ }
+ else {
+ return(0);
+ }
+
+ }
+
+ return (1); #Update Succeded
+ }
+
+ # }}}
+
+
+
+ # {{{ sub SimpleQuery
+
+ sub SimpleQuery {
+ my $self = shift;
+ my $QueryString = shift;
+ # TODO update the last edited
+
+ my $sth = $self->dbh->prepare($QueryString);
+ if (!$sth) {
+ if ($main::debug) {
+ die "Error:" . $self->dbh->errstr . "\n";
+ }
+ else {
+ return (0);
+ }
+ }
+ if (!$sth->execute) {
+ if ($self->{'debug'}) {
+ die "Error:" . $sth->errstr . "\n";
+ }
+ else {
+ return(0);
+ }
+
+ }
+ return ($sth);
+
+ }
+
+ # }}}
+
+ sub FetchResult {
+ my $self = shift;
+ my $query = shift;
+ my $sth = $self->SimpleQuery($query);
+
+ return ($sth->fetchrow);
+ }
+
+
+ # {{{ sub safe_quote
+
+ sub safe_quote {
+ my $self = shift;
+ my $in_val = shift;
+ my ($out_val);
+ if (!$in_val) {
+ return ("''");
+
+ }
+ else {
+ $out_val = $self->dbh->quote($in_val);
+
+ }
+ return("$out_val");
+
+ }
+
+ # }}}
+
+
+
+ # Autoload methods go after =cut, and are processed by the autosplit program.
+
+ 1;
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::Handle - Perl extension which is a generic DBI handle
+
+ =head1 SYNOPSIS
+
+ use DBIx::Handle;
+
+ my $Handle = DBIx::Handle->new();
+ $Handle->Connect( Driver => 'mysql',
+ Database => 'dbname',
+ Host => 'hostname',
+ User => 'dbuser',
+ Password => 'dbpassword');
+
+
+
+ =head1 DESCRIPTION
+
+ Jesse's a slacker.
+
+ Blah blah blah.
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ perl(1), DBIx::EasySearch, DBIx::Record
+
+ =cut
+
+ # }}} POD
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/MANIFEST'
Index: ./lib/DBIx/DBIx-Handle/MANIFEST
*** ./lib/DBIx/DBIx-Handle/MANIFEST Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/MANIFEST Fri Aug 11 23:29:15 2000
***************
*** 0 ****
--- 1,5 ----
+ Changes
+ Handle.pm
+ MANIFEST
+ Makefile.PL
+ test.pl
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/Makefile'
Index: ./lib/DBIx/DBIx-Handle/Makefile
*** ./lib/DBIx/DBIx-Handle/Makefile Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/Makefile Fri Aug 11 23:43:18 2000
***************
*** 0 ****
--- 1,654 ----
+ # This Makefile is for the DBIx::Handle extension to perl.
+ #
+ # It was generated automatically by MakeMaker version
+ # 5.4302 (Revision: 1.222) from the contents of
+ # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+ #
+ # ANY CHANGES MADE HERE WILL BE LOST!
+ #
+ # MakeMaker ARGV: ()
+ #
+ # MakeMaker Parameters:
+
+ # NAME => q[DBIx::Handle]
+ # VERSION_FROM => q[Handle.pm]
+
+ # --- MakeMaker post_initialize section:
+
+
+ # --- MakeMaker const_config section:
+
+ # These definitions are from config.sh (via /usr/lib/perl5/5.005/i386-linux/Config.pm)
+
+ # They may have been overridden via Makefile.PL or on the command line
+ AR = ar
+ CC = cc
+ CCCDLFLAGS = -fPIC
+ CCDLFLAGS = -rdynamic
+ DLEXT = so
+ DLSRC = dl_dlopen.xs
+ LD = cc
+ LDDLFLAGS = -shared -L/usr/local/lib
+ LDFLAGS = -L/usr/local/lib
+ LIBC =
+ LIB_EXT = .a
+ OBJ_EXT = .o
+ OSNAME = linux
+ OSVERS = 2.2.15pre14
+ RANLIB = :
+ SO = so
+ EXE_EXT =
+
+
+ # --- MakeMaker constants section:
+ AR_STATIC_ARGS = cr
+ NAME = DBIx::Handle
+ DISTNAME = DBIx-Handle
+ NAME_SYM = DBIx_Handle
+ VERSION = 0.02
+ VERSION_SYM = 0_02
+ XS_VERSION = 0.02
+ INST_BIN = blib/bin
+ INST_EXE = blib/script
+ INST_LIB = blib/lib
+ INST_ARCHLIB = blib/arch
+ INST_SCRIPT = blib/script
+ PREFIX = /usr
+ INSTALLDIRS = site
+ INSTALLPRIVLIB = $(PREFIX)/lib/perl5
+ INSTALLARCHLIB = $(PREFIX)/lib/perl5/5.005/i386-linux
+ INSTALLSITELIB = /usr/local/lib/site_perl
+ INSTALLSITEARCH = /usr/local/lib/site_perl/i386-linux
+ INSTALLBIN = $(PREFIX)/bin
+ INSTALLSCRIPT = $(PREFIX)/bin
+ PERL_LIB = /usr/lib/perl5/5.005
+ PERL_ARCHLIB = /usr/lib/perl5/5.005/i386-linux
+ SITELIBEXP = /usr/local/lib/site_perl
+ SITEARCHEXP = /usr/local/lib/site_perl/i386-linux
+ LIBPERL_A = libperl.a
+ FIRST_MAKEFILE = Makefile
+ MAKE_APERL_FILE = Makefile.aperl
+ PERLMAINCC = $(CC)
+ PERL_INC = /usr/lib/perl5/5.005/i386-linux/CORE
+ PERL = /usr/bin/perl
+ FULLPERL = /usr/bin/perl
+
+ VERSION_MACRO = VERSION
+ DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+ XS_VERSION_MACRO = XS_VERSION
+ XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+
+ MAKEMAKER = /usr/lib/perl5/5.005/ExtUtils/MakeMaker.pm
+ MM_VERSION = 5.4302
+
+ # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+ # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+ # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
+ # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+ # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+ FULLEXT = DBIx/Handle
+ BASEEXT = Handle
+ PARENT_NAME = DBIx
+ DLBASE = $(BASEEXT)
+ VERSION_FROM = Handle.pm
+ OBJECT =
+ LDFROM = $(OBJECT)
+ LINKTYPE = dynamic
+
+ # Handy lists of source code files:
+ XS_FILES=
+ C_FILES =
+ O_FILES =
+ H_FILES =
+ MAN1PODS =
+ MAN3PODS = Handle.pm
+ INST_MAN1DIR = blib/man1
+ INSTALLMAN1DIR = /usr/local/man/man1
+ MAN1EXT = 1p
+ INST_MAN3DIR = blib/man3
+ INSTALLMAN3DIR = /usr/local/man/man3
+ MAN3EXT = 3pm
+ PERM_RW = 644
+ PERM_RWX = 755
+
+ # work around a famous dec-osf make(1) feature(?):
+ makemakerdflt: all
+
+ .SUFFIXES: .xs .c .C .cpp .cxx .cc $(OBJ_EXT)
+
+ # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
+ # some make implementations will delete the Makefile when we rebuild it. Because
+ # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
+ # does so. Our milage may vary.
+ # .PRECIOUS: Makefile # seems to be not necessary anymore
+
+ .PHONY: all config static dynamic test linkext manifest
+
+ # Where is the Config information that we are using/depend on
+ CONFIGDEP = $(PERL_ARCHLIB)/Config.pm $(PERL_INC)/config.h
+
+ # Where to put things:
+ INST_LIBDIR = $(INST_LIB)/DBIx
+ INST_ARCHLIBDIR = $(INST_ARCHLIB)/DBIx
+
+ INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+ INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+ INST_STATIC =
+ INST_DYNAMIC =
+ INST_BOOT =
+
+ EXPORT_LIST =
+
+ PERL_ARCHIVE =
+
+ TO_INST_PM = Handle.pm
+
+ PM_TO_BLIB = Handle.pm \
+ $(INST_LIBDIR)/Handle.pm
+
+
+ # --- MakeMaker tool_autosplit section:
+
+ # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+ AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
+
+
+ # --- MakeMaker tool_xsubpp section:
+
+
+ # --- MakeMaker tools_other section:
+
+ SHELL = /bin/sh
+ CHMOD = chmod
+ CP = cp
+ LD = cc
+ MV = mv
+ NOOP = $(SHELL) -c true
+ RM_F = rm -f
+ RM_RF = rm -rf
+ TEST_F = test -f
+ TOUCH = touch
+ UMASK_NULL = umask 0
+ DEV_NULL = > /dev/null 2>&1
+
+ # The following is a portable way to say mkdir -p
+ # To see which directories are created, change the if 0 to if 1
+ MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
+
+ # This helps us to minimize the effect of the .exists files A yet
+ # better solution would be to have a stable file in the perl
+ # distribution with a timestamp of zero. But this solution doesn't
+ # need any changes to the core distribution and works with older perls
+ EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
+
+ # Here we warn users that an old packlist file was found somewhere,
+ # and that they should call some uninstall routine
+ WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \
+ -e 'print "WARNING: I have found an old package in\n";' \
+ -e 'print "\t$$ARGV[0].\n";' \
+ -e 'print "Please make sure the two installations are not conflicting\n";'
+
+ UNINST=0
+ VERBINST=1
+
+ MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
+ -e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
+
+ DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
+ -e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", shift, ">";' \
+ -e 'print "=over 4";' \
+ -e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
+ -e 'print "=back";'
+
+ UNINSTALL = $(PERL) -MExtUtils::Install \
+ -e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
+ -e 'print " packlist above carefully.\n There may be errors. Remove the";' \
+ -e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
+
+
+ # --- MakeMaker dist section:
+
+ DISTVNAME = $(DISTNAME)-$(VERSION)
+ TAR = tar
+ TARFLAGS = cvf
+ ZIP = zip
+ ZIPFLAGS = -r
+ COMPRESS = gzip --best
+ SUFFIX = .gz
+ SHAR = shar
+ PREOP = @$(NOOP)
+ POSTOP = @$(NOOP)
+ TO_UNIX = @$(NOOP)
+ CI = ci -u
+ RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+ DIST_CP = best
+ DIST_DEFAULT = tardist
+
+
+ # --- MakeMaker macro section:
+
+
+ # --- MakeMaker depend section:
+
+
+ # --- MakeMaker cflags section:
+
+
+ # --- MakeMaker const_loadlibs section:
+
+
+ # --- MakeMaker const_cccmd section:
+
+
+ # --- MakeMaker post_constants section:
+
+
+ # --- MakeMaker pasthru section:
+
+ PASTHRU = LIB="$(LIB)"\
+ LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"\
+ OPTIMIZE="$(OPTIMIZE)"
+
+
+ # --- MakeMaker c_o section:
+
+
+ # --- MakeMaker xs_c section:
+
+
+ # --- MakeMaker xs_o section:
+
+
+ # --- MakeMaker top_targets section:
+
+ #all :: config $(INST_PM) subdirs linkext manifypods
+
+ all :: pure_all manifypods
+ @$(NOOP)
+
+ pure_all :: config pm_to_blib subdirs linkext
+ @$(NOOP)
+
+ subdirs :: $(MYEXTLIB)
+ @$(NOOP)
+
+ config :: Makefile $(INST_LIBDIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_ARCHAUTODIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_AUTODIR)/.exists
+ @$(NOOP)
+
+ config :: Version_check
+ @$(NOOP)
+
+
+ $(INST_AUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_AUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_AUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
+
+ $(INST_LIBDIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_LIBDIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_LIBDIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
+
+ $(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_ARCHAUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
+
+ config :: $(INST_MAN3DIR)/.exists
+ @$(NOOP)
+
+
+ $(INST_MAN3DIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_MAN3DIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_MAN3DIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
+
+ help:
+ perldoc ExtUtils::MakeMaker
+
+ Version_check:
+ @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ -MExtUtils::MakeMaker=Version_check \
+ -e "Version_check('$(MM_VERSION)')"
+
+
+ # --- MakeMaker linkext section:
+
+ linkext :: $(LINKTYPE)
+ @$(NOOP)
+
+
+ # --- MakeMaker dlsyms section:
+
+
+ # --- MakeMaker dynamic section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make dynamic"
+ #dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
+ dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT)
+ @$(NOOP)
+
+
+ # --- MakeMaker dynamic_bs section:
+
+ BOOTSTRAP =
+
+
+ # --- MakeMaker dynamic_lib section:
+
+
+ # --- MakeMaker static section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make static"
+ #static :: Makefile $(INST_STATIC) $(INST_PM)
+ static :: Makefile $(INST_STATIC)
+ @$(NOOP)
+
+
+ # --- MakeMaker static_lib section:
+
+
+ # --- MakeMaker manifypods section:
+ POD2MAN_EXE = /usr/bin/pod2man
+ POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \
+ -e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "Makefile";' \
+ -e 'print "Manifying $$m{$$_}\n";' \
+ -e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\047t install $$m{$$_}\n";' \
+ -e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
+
+ manifypods : pure_all Handle.pm
+ @$(POD2MAN) \
+ Handle.pm \
+ $(INST_MAN3DIR)/DBIx::Handle.$(MAN3EXT)
+
+ # --- MakeMaker processPL section:
+
+
+ # --- MakeMaker installbin section:
+
+
+ # --- MakeMaker subdirs section:
+
+ # none
+
+ # --- MakeMaker clean section:
+
+ # Delete temporary files but do not touch installed files. We don't delete
+ # the Makefile here so a later make realclean still has a makefile to use.
+
+ clean ::
+ -rm -rf ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all perlmain.c mon.out core so_locations pm_to_blib *~ */*~ */*/*~ *$(OBJ_EXT) *$(LIB_EXT) perl.exe $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
+ -mv Makefile Makefile.old $(DEV_NULL)
+
+
+ # --- MakeMaker realclean section:
+
+ # Delete temporary files (via clean) and also delete installed files
+ realclean purge :: clean
+ rm -rf $(INST_AUTODIR) $(INST_ARCHAUTODIR)
+ rm -f $(INST_LIBDIR)/Handle.pm
+ rm -rf Makefile Makefile.old
+
+
+ # --- MakeMaker dist_basics section:
+
+ distclean :: realclean distcheck
+
+ distcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \
+ -e fullcheck
+
+ skipcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \
+ -e skipcheck
+
+ manifest :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \
+ -e mkmanifest
+
+
+ # --- MakeMaker dist_core section:
+
+ dist : $(DIST_DEFAULT)
+ @$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
+ -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "Makefile";'
+
+ tardist : $(DISTVNAME).tar$(SUFFIX)
+
+ zipdist : $(DISTVNAME).zip
+
+ $(DISTVNAME).tar$(SUFFIX) : distdir
+ $(PREOP)
+ $(TO_UNIX)
+ $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(COMPRESS) $(DISTVNAME).tar
+ $(POSTOP)
+
+ $(DISTVNAME).zip : distdir
+ $(PREOP)
+ $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+ uutardist : $(DISTVNAME).tar$(SUFFIX)
+ uuencode $(DISTVNAME).tar$(SUFFIX) \
+ $(DISTVNAME).tar$(SUFFIX) > \
+ $(DISTVNAME).tar$(SUFFIX)_uu
+
+ shdist : distdir
+ $(PREOP)
+ $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+
+ # --- MakeMaker dist_dir section:
+
+ distdir :
+ $(RM_RF) $(DISTVNAME)
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+
+ # --- MakeMaker dist_test section:
+
+ disttest : distdir
+ cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE)
+ cd $(DISTVNAME) && $(MAKE) test
+
+
+ # --- MakeMaker dist_ci section:
+
+ ci :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \
+ -e "@all = keys %{ maniread() };" \
+ -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \
+ -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
+
+
+ # --- MakeMaker install section:
+
+ install :: all pure_install doc_install
+
+ install_perl :: all pure_perl_install doc_perl_install
+
+ install_site :: all pure_site_install doc_site_install
+
+ install_ :: install_site
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_install :: pure_$(INSTALLDIRS)_install
+
+ doc_install :: doc_$(INSTALLDIRS)_install
+ @echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
+
+ pure__install : pure_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ doc__install : doc_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_perl_install ::
+ @$(MOD_INSTALL) \
+ read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(INSTALLARCHLIB) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+ pure_site_install ::
+ @$(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLSITELIB) \
+ $(INST_ARCHLIB) $(INSTALLSITEARCH) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+ doc_perl_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLPRIVLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+ doc_site_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+
+ uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+
+ uninstall_from_perldirs ::
+ @$(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+ uninstall_from_sitedirs ::
+ @$(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+ # --- MakeMaker force section:
+ # Phony target to force checking subdirectories.
+ FORCE:
+ @$(NOOP)
+
+
+ # --- MakeMaker perldepend section:
+
+
+ # --- MakeMaker makefile section:
+
+ # We take a very conservative approach here, but it\'s worth it.
+ # We move Makefile to Makefile.old here to avoid gnu make looping.
+ Makefile : Makefile.PL $(CONFIGDEP)
+ @echo "Makefile out-of-date with respect to $?"
+ @echo "Cleaning current config before rebuilding Makefile..."
+ -@$(RM_F) Makefile.old
+ -@$(MV) Makefile Makefile.old
+ -$(MAKE) -f Makefile.old clean $(DEV_NULL) || $(NOOP)
+ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL
+ @echo "==> Your Makefile has been rebuilt. <=="
+ @echo "==> Please rerun the make command. <=="
+ false
+
+ # To change behavior to :: would be nice, but would break Tk b9.02
+ # so you find such a warning below the dist target.
+ #Makefile :: $(VERSION_FROM)
+ # @echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
+
+
+ # --- MakeMaker staticmake section:
+
+ # --- MakeMaker makeaperl section ---
+ MAP_TARGET = perl
+ FULLPERL = /usr/bin/perl
+
+ $(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+ $(MAKE) -f $(MAKE_APERL_FILE) $@
+
+ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
+ @echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ @$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ Makefile.PL DIR= \
+ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+ # --- MakeMaker test section:
+
+ TEST_VERBOSE=0
+ TEST_TYPE=test_$(LINKTYPE)
+ TEST_FILE = test.pl
+ TEST_FILES =
+ TESTDB_SW = -d
+
+ testdb :: testdb_$(LINKTYPE)
+
+ test :: $(TEST_TYPE)
+
+ test_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) $(TESTDB_SW) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ test_ : test_dynamic
+
+ test_static :: test_dynamic
+ testdb_static :: testdb_dynamic
+
+
+ # --- MakeMaker ppd section:
+ # Creates a PPD (Perl Package Description) for a binary distribution.
+ ppd:
+ @$(PERL) -e "print qq{<SOFTPKG NAME=\"DBIx-Handle\" VERSION=\"0,02,0,0\">\n}. qq{\t<TITLE>DBIx-Handle</TITLE>\n}. qq{\t<ABSTRACT></ABSTRACT>\n}. qq{\t<AUTHOR></AUTHOR>\n}. qq{\t<IMPLEMENTATION>\n}. qq{\t\t<OS NAME=\"$(OSNAME)\" />\n}. qq{\t\t<ARCHITECT
URE NAME=\"i386-linux\" />\n}. qq{\t\t<CODEBASE HREF=\"\" />\n}. qq{\t</IMPLEMENTATION>\n}. qq{</SOFTPKG>\n}" > DBIx-Handle.ppd
+
+ # --- MakeMaker pm_to_blib section:
+
+ pm_to_blib: $(TO_INST_PM)
+ @$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
+ "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
+ -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'$(INST_LIB)/auto')"
+ @$(TOUCH) $@
+
+
+ # --- MakeMaker selfdocument section:
+
+
+ # --- MakeMaker postamble section:
+
+
+ # End.
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/Makefile.PL'
Index: ./lib/DBIx/DBIx-Handle/Makefile.PL
*** ./lib/DBIx/DBIx-Handle/Makefile.PL Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/Makefile.PL Fri Aug 11 23:29:15 2000
***************
*** 0 ****
--- 1,7 ----
+ use ExtUtils::MakeMaker;
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+ WriteMakefile(
+ 'NAME' => 'DBIx::Handle',
+ 'VERSION_FROM' => 'Handle.pm', # finds $VERSION
+ );
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm'
Index: ./lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm
*** ./lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm Fri Aug 11 18:07:18 2000
***************
*** 0 ****
--- 1,232 ----
+ # $Header: /cvsroot/twort/rt/lib/DBIx/Handle.pm,v 1.1 2000/08/03 12:28:52 tobix Exp $
+ package DBIx::Handle;
+ use Carp;
+ use DBI;
+ use strict;
+ use vars qw($VERSION @ISA $Handle);
+
+
+ $VERSION = '0.02';
+
+
+
+ #instantiate a new object.
+ # {{{ sub new
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ #we have no limit statements. DoSearch won't work.
+ return ($self)
+ }
+ # }}}
+
+ # {{{ sub Connect
+ sub Connect {
+ my $self = shift;
+
+ my %args = ( Driver => undef,
+ Database => undef,
+ Host => 'localhost',
+ User => undef,
+ Password => undef,
+ @_);
+
+ my $dsn;
+
+ $dsn = "dbi:$args{'Driver'}:$args{'Database'}:$args{'Host'}";
+
+ $Handle = DBI->connect_cached($dsn, $args{'User'}, $args{'Password'}) || croak "Connect Failed $DBI::errstr\n" ;
+
+
+ $Handle->{RaiseError}=1;
+ $Handle->{PrintError}=1;
+ return ($Handle);
+ }
+ # }}}
+
+ # {{{ sub Disconnect
+
+ sub Disconnect {
+ my $self = shift;
+ return ($self->dbh->disconnect());
+ }
+
+ # {{{ sub Handle / dbh
+ sub Handle {
+ return($Handle);
+ }
+
+ *dbh=\&Handle;
+ # }}}
+
+ # {{{ sub UpdateTableValue
+
+ sub UpdateTableValue {
+ my $self = shift;
+
+ my $Table = shift;
+ my $Col = shift;
+ my $NewValue = shift;
+ my $Record = shift;
+ my $is_sql = shift;
+ my $QueryString;
+
+ # quote the value
+ # TODO: We need some general way to escape SQL functions.
+ $NewValue=$self->safe_quote($NewValue)
+ unless ($is_sql or
+ $Col=~/^(Created|LastUpdated)$/ && $NewValue=~/^now\(\)$/i);
+ # build the query string
+ $QueryString = "UPDATE $Table SET $Col = $NewValue WHERE id = $Record";
+
+ # TODO update the last edited
+ # (Tobix: I think this is already taken care of by now in DBIx::Record?)
+
+ my $sth = $self->dbh->prepare($QueryString);
+ if (!$sth) {
+
+ if ($main::debug) {
+ die "Error:" . $self->dbh->errstr . "\n";
+ }
+ else {
+ return (0);
+ }
+ }
+ if (!$sth->execute) {
+ if ($self->{'debug'}) {
+ die "Error:" . $sth->errstr . "\n";
+ }
+ else {
+ return(0);
+ }
+
+ }
+
+ return (1); #Update Succeded
+ }
+
+ # }}}
+
+
+
+ # {{{ sub SimpleQuery
+
+ sub SimpleQuery {
+ my $self = shift;
+ my $QueryString = shift;
+ # TODO update the last edited
+
+ my $sth = $self->dbh->prepare($QueryString);
+ if (!$sth) {
+ if ($main::debug) {
+ die "Error:" . $self->dbh->errstr . "\n";
+ }
+ else {
+ return (0);
+ }
+ }
+ if (!$sth->execute) {
+ if ($self->{'debug'}) {
+ die "Error:" . $sth->errstr . "\n";
+ }
+ else {
+ return(0);
+ }
+
+ }
+ return ($sth);
+
+ }
+
+ # }}}
+
+ sub FetchResult {
+ my $self = shift;
+ my $query = shift;
+ my $sth = $self->SimpleQuery($query);
+
+ return ($sth->fetchrow);
+ }
+
+
+ # {{{ sub safe_quote
+
+ sub safe_quote {
+ my $self = shift;
+ my $in_val = shift;
+ my ($out_val);
+ if (!$in_val) {
+ return ("''");
+
+ }
+ else {
+ $out_val = $self->dbh->quote($in_val);
+
+ }
+ return("$out_val");
+
+ }
+
+ # }}}
+
+
+
+ # Autoload methods go after =cut, and are processed by the autosplit program.
+
+ 1;
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::Handle - Perl extension which is a generic DBI handle
+
+ =head1 SYNOPSIS
+
+ use DBIx::Handle;
+
+ my $Handle = DBIx::Handle->new();
+ $Handle->Connect( Driver => 'mysql',
+ Database => 'dbname',
+ Host => 'hostname',
+ User => 'dbuser',
+ Password => 'dbpassword');
+
+
+
+ =head1 DESCRIPTION
+
+ Jesse's a slacker.
+
+ Blah blah blah.
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ perl(1), DBIx::EasySearch, DBIx::Record
+
+ =cut
+
+ # }}} POD
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm'
Index: ./lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm
*** ./lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm Fri Aug 11 23:43:19 2000
***************
*** 0 ****
--- 1,229 ----
+ .rn '' }`
+ ''' $RCSfile$$Revision$$Date$
+ '''
+ ''' $Log$
+ '''
+ .de Sh
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Ip
+ .br
+ .ie \\n(.$>=3 .ne \\$3
+ .el .ne 3
+ .IP "\\$1" \\$2
+ ..
+ .de Vb
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve
+ .ft R
+
+ .fi
+ ..
+ '''
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+ ''' Bell System Logo is used as a dummy character.
+ '''
+ .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+ .ds -- \(*W-
+ .ds PI pi
+ .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ ''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+ ''' \*(L" and \*(R", except that they are used on ".xx" lines,
+ ''' such as .IP and .SH, which do another additional levels of
+ ''' double-quote interpretation
+ .ds M" """
+ .ds S" """
+ .ds N" """""
+ .ds T" """""
+ .ds L' '
+ .ds R' '
+ .ds M' '
+ .ds S' '
+ .ds N' '
+ .ds T' '
+ 'br\}
+ .el\{\
+ .ds -- \(em\|
+ .tr \*(Tr
+ .ds L" ``
+ .ds R" ''
+ .ds M" ``
+ .ds S" ''
+ .ds N" ``
+ .ds T" ''
+ .ds L' `
+ .ds R' '
+ .ds M' `
+ .ds S' '
+ .ds N' `
+ .ds T' '
+ .ds PI \(*p
+ 'br\}
+ .\" If the F register is turned on, we'll generate
+ .\" index entries out stderr for the following things:
+ .\" TH Title
+ .\" SH Header
+ .\" Sh Subsection
+ .\" Ip Item
+ .\" X<> Xref (embedded
+ .\" Of course, you have to process the output yourself
+ .\" in some meaninful fashion.
+ .if \nF \{
+ .de IX
+ .tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .nr % 0
+ .rr F
+ .\}
+ .TH Handle 3pm "perl 5.005, patch 03" "11/Aug/2000" "User Contributed Perl Documentation"
+ .UC
+ .if n .hy 0
+ .if n .na
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .de CQ \" put $1 in typewriter font
+ .ft CW
+ 'if n "\c
+ 'if t \\&\\$1\c
+ 'if n \\&\\$1\c
+ 'if n \&"
+ \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+ '.ft R
+ ..
+ .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+ . \" AM - accent mark definitions
+ .bd B 3
+ . \" fudge factors for nroff and troff
+ .if n \{\
+ . ds #H 0
+ . ds #V .8m
+ . ds #F .3m
+ . ds #[ \f1
+ . ds #] \fP
+ .\}
+ .if t \{\
+ . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ . ds #V .6m
+ . ds #F 0
+ . ds #[ \&
+ . ds #] \&
+ .\}
+ . \" simple accents for nroff and troff
+ .if n \{\
+ . ds ' \&
+ . ds ` \&
+ . ds ^ \&
+ . ds , \&
+ . ds ~ ~
+ . ds ? ?
+ . ds ! !
+ . ds /
+ . ds q
+ .\}
+ .if t \{\
+ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ . ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+ . ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+ . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ . ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+ .\}
+ . \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+ .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+ .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+ .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .ds oe o\h'-(\w'o'u*4/10)'e
+ .ds Oe O\h'-(\w'O'u*4/10)'E
+ . \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ . \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ . ds : e
+ . ds 8 ss
+ . ds v \h'-1'\o'\(aa\(ga'
+ . ds _ \h'-1'^
+ . ds . \h'-1'.
+ . ds 3 3
+ . ds o a
+ . ds d- d\h'-1'\(ga
+ . ds D- D\h'-1'\(hy
+ . ds th \o'bp'
+ . ds Th \o'LP'
+ . ds ae ae
+ . ds Ae AE
+ . ds oe oe
+ . ds Oe OE
+ .\}
+ .rm #[ #] #H #V #F C
+ .SH "NAME"
+ DBIx::Handle \- Perl extension which is a generic DBI handle
+ .SH "SYNOPSIS"
+ .PP
+ .Vb 1
+ \& use DBIx::Handle;
+ .Ve
+ .Vb 8
+ \& my $Handle = DBIx::Handle->new();
+ \& $Handle->Connect( Driver => 'mysql',
+ \& Database => 'dbname',
+ \& Host => 'hostname',
+ \& User => 'dbuser',
+ \& Password => 'dbpassword');
+ \&
+ \&
+ .Ve
+ .SH "DESCRIPTION"
+ Jesse's a slacker.
+ .PP
+ Blah blah blah.
+ .SH "AUTHOR"
+ Jesse Vincent, jesse at fsck.com
+ .SH "SEE ALSO"
+ \fIperl\fR\|(1), DBIx::EasySearch, DBIx::Record
+
+ .rn }` ''
+ .IX Title "Handle 3pm"
+ .IX Name "DBIx::Handle - Perl extension which is a generic DBI handle"
+
+ .IX Header "NAME"
+
+ .IX Header "SYNOPSIS"
+
+ .IX Header "DESCRIPTION"
+
+ .IX Header "AUTHOR"
+
+ .IX Header "SEE ALSO"
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Handle/test.pl'
Index: ./lib/DBIx/DBIx-Handle/test.pl
*** ./lib/DBIx/DBIx-Handle/test.pl Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Handle/test.pl Fri Aug 11 23:29:15 2000
***************
*** 0 ****
--- 1,20 ----
+ # Before `make install' is performed this script should be runnable with
+ # `make test'. After `make install' it should work as `perl test.pl'
+
+ ######################### We start with some black magic to print on failure.
+
+ # Change 1..1 below to 1..last_test_to_print .
+ # (It may become useful if the test is moved to ./t subdirectory.)
+
+ BEGIN { $| = 1; print "1..1\n"; }
+ END {print "not ok 1\n" unless $loaded;}
+ use DBIx::Handle;
+ $loaded = 1;
+ print "ok 1\n";
+
+ ######################### End of black magic.
+
+ # Insert your test code below (better if it prints "ok 13"
+ # (correspondingly "not ok 13") depending on the success of chunk 13
+ # of the test code):
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/Changes'
Index: ./lib/DBIx/DBIx-Record/Changes
*** ./lib/DBIx/DBIx-Record/Changes Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/Changes Fri Aug 11 23:29:19 2000
***************
*** 0 ****
--- 1,5 ----
+ Revision history for Perl extension DBIx::Record.
+
+ 0.01 Fri Aug 11 23:29:19 2000
+ - original version; created by h2xs 1.19
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/MANIFEST'
Index: ./lib/DBIx/DBIx-Record/MANIFEST
*** ./lib/DBIx/DBIx-Record/MANIFEST Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/MANIFEST Fri Aug 11 23:29:19 2000
***************
*** 0 ****
--- 1,5 ----
+ Changes
+ MANIFEST
+ Makefile.PL
+ Record.pm
+ test.pl
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/Makefile'
Index: ./lib/DBIx/DBIx-Record/Makefile
*** ./lib/DBIx/DBIx-Record/Makefile Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/Makefile Fri Aug 11 23:43:20 2000
***************
*** 0 ****
--- 1,654 ----
+ # This Makefile is for the DBIx::Record extension to perl.
+ #
+ # It was generated automatically by MakeMaker version
+ # 5.4302 (Revision: 1.222) from the contents of
+ # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+ #
+ # ANY CHANGES MADE HERE WILL BE LOST!
+ #
+ # MakeMaker ARGV: ()
+ #
+ # MakeMaker Parameters:
+
+ # NAME => q[DBIx::Record]
+ # VERSION_FROM => q[Record.pm]
+
+ # --- MakeMaker post_initialize section:
+
+
+ # --- MakeMaker const_config section:
+
+ # These definitions are from config.sh (via /usr/lib/perl5/5.005/i386-linux/Config.pm)
+
+ # They may have been overridden via Makefile.PL or on the command line
+ AR = ar
+ CC = cc
+ CCCDLFLAGS = -fPIC
+ CCDLFLAGS = -rdynamic
+ DLEXT = so
+ DLSRC = dl_dlopen.xs
+ LD = cc
+ LDDLFLAGS = -shared -L/usr/local/lib
+ LDFLAGS = -L/usr/local/lib
+ LIBC =
+ LIB_EXT = .a
+ OBJ_EXT = .o
+ OSNAME = linux
+ OSVERS = 2.2.15pre14
+ RANLIB = :
+ SO = so
+ EXE_EXT =
+
+
+ # --- MakeMaker constants section:
+ AR_STATIC_ARGS = cr
+ NAME = DBIx::Record
+ DISTNAME = DBIx-Record
+ NAME_SYM = DBIx_Record
+ VERSION = 0.02
+ VERSION_SYM = 0_02
+ XS_VERSION = 0.02
+ INST_BIN = blib/bin
+ INST_EXE = blib/script
+ INST_LIB = blib/lib
+ INST_ARCHLIB = blib/arch
+ INST_SCRIPT = blib/script
+ PREFIX = /usr
+ INSTALLDIRS = site
+ INSTALLPRIVLIB = $(PREFIX)/lib/perl5
+ INSTALLARCHLIB = $(PREFIX)/lib/perl5/5.005/i386-linux
+ INSTALLSITELIB = /usr/local/lib/site_perl
+ INSTALLSITEARCH = /usr/local/lib/site_perl/i386-linux
+ INSTALLBIN = $(PREFIX)/bin
+ INSTALLSCRIPT = $(PREFIX)/bin
+ PERL_LIB = /usr/lib/perl5/5.005
+ PERL_ARCHLIB = /usr/lib/perl5/5.005/i386-linux
+ SITELIBEXP = /usr/local/lib/site_perl
+ SITEARCHEXP = /usr/local/lib/site_perl/i386-linux
+ LIBPERL_A = libperl.a
+ FIRST_MAKEFILE = Makefile
+ MAKE_APERL_FILE = Makefile.aperl
+ PERLMAINCC = $(CC)
+ PERL_INC = /usr/lib/perl5/5.005/i386-linux/CORE
+ PERL = /usr/bin/perl
+ FULLPERL = /usr/bin/perl
+
+ VERSION_MACRO = VERSION
+ DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+ XS_VERSION_MACRO = XS_VERSION
+ XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+
+ MAKEMAKER = /usr/lib/perl5/5.005/ExtUtils/MakeMaker.pm
+ MM_VERSION = 5.4302
+
+ # FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+ # BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+ # ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
+ # PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+ # DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+ FULLEXT = DBIx/Record
+ BASEEXT = Record
+ PARENT_NAME = DBIx
+ DLBASE = $(BASEEXT)
+ VERSION_FROM = Record.pm
+ OBJECT =
+ LDFROM = $(OBJECT)
+ LINKTYPE = dynamic
+
+ # Handy lists of source code files:
+ XS_FILES=
+ C_FILES =
+ O_FILES =
+ H_FILES =
+ MAN1PODS =
+ MAN3PODS = Record.pm
+ INST_MAN1DIR = blib/man1
+ INSTALLMAN1DIR = /usr/local/man/man1
+ MAN1EXT = 1p
+ INST_MAN3DIR = blib/man3
+ INSTALLMAN3DIR = /usr/local/man/man3
+ MAN3EXT = 3pm
+ PERM_RW = 644
+ PERM_RWX = 755
+
+ # work around a famous dec-osf make(1) feature(?):
+ makemakerdflt: all
+
+ .SUFFIXES: .xs .c .C .cpp .cxx .cc $(OBJ_EXT)
+
+ # Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
+ # some make implementations will delete the Makefile when we rebuild it. Because
+ # we call false(1) when we rebuild it. So make(1) is not completely wrong when it
+ # does so. Our milage may vary.
+ # .PRECIOUS: Makefile # seems to be not necessary anymore
+
+ .PHONY: all config static dynamic test linkext manifest
+
+ # Where is the Config information that we are using/depend on
+ CONFIGDEP = $(PERL_ARCHLIB)/Config.pm $(PERL_INC)/config.h
+
+ # Where to put things:
+ INST_LIBDIR = $(INST_LIB)/DBIx
+ INST_ARCHLIBDIR = $(INST_ARCHLIB)/DBIx
+
+ INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+ INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+ INST_STATIC =
+ INST_DYNAMIC =
+ INST_BOOT =
+
+ EXPORT_LIST =
+
+ PERL_ARCHIVE =
+
+ TO_INST_PM = Record.pm
+
+ PM_TO_BLIB = Record.pm \
+ $(INST_LIBDIR)/Record.pm
+
+
+ # --- MakeMaker tool_autosplit section:
+
+ # Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+ AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
+
+
+ # --- MakeMaker tool_xsubpp section:
+
+
+ # --- MakeMaker tools_other section:
+
+ SHELL = /bin/sh
+ CHMOD = chmod
+ CP = cp
+ LD = cc
+ MV = mv
+ NOOP = $(SHELL) -c true
+ RM_F = rm -f
+ RM_RF = rm -rf
+ TEST_F = test -f
+ TOUCH = touch
+ UMASK_NULL = umask 0
+ DEV_NULL = > /dev/null 2>&1
+
+ # The following is a portable way to say mkdir -p
+ # To see which directories are created, change the if 0 to if 1
+ MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
+
+ # This helps us to minimize the effect of the .exists files A yet
+ # better solution would be to have a stable file in the perl
+ # distribution with a timestamp of zero. But this solution doesn't
+ # need any changes to the core distribution and works with older perls
+ EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
+
+ # Here we warn users that an old packlist file was found somewhere,
+ # and that they should call some uninstall routine
+ WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \
+ -e 'print "WARNING: I have found an old package in\n";' \
+ -e 'print "\t$$ARGV[0].\n";' \
+ -e 'print "Please make sure the two installations are not conflicting\n";'
+
+ UNINST=0
+ VERBINST=1
+
+ MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
+ -e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
+
+ DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
+ -e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", shift, ">";' \
+ -e 'print "=over 4";' \
+ -e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
+ -e 'print "=back";'
+
+ UNINSTALL = $(PERL) -MExtUtils::Install \
+ -e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
+ -e 'print " packlist above carefully.\n There may be errors. Remove the";' \
+ -e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
+
+
+ # --- MakeMaker dist section:
+
+ DISTVNAME = $(DISTNAME)-$(VERSION)
+ TAR = tar
+ TARFLAGS = cvf
+ ZIP = zip
+ ZIPFLAGS = -r
+ COMPRESS = gzip --best
+ SUFFIX = .gz
+ SHAR = shar
+ PREOP = @$(NOOP)
+ POSTOP = @$(NOOP)
+ TO_UNIX = @$(NOOP)
+ CI = ci -u
+ RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+ DIST_CP = best
+ DIST_DEFAULT = tardist
+
+
+ # --- MakeMaker macro section:
+
+
+ # --- MakeMaker depend section:
+
+
+ # --- MakeMaker cflags section:
+
+
+ # --- MakeMaker const_loadlibs section:
+
+
+ # --- MakeMaker const_cccmd section:
+
+
+ # --- MakeMaker post_constants section:
+
+
+ # --- MakeMaker pasthru section:
+
+ PASTHRU = LIB="$(LIB)"\
+ LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"\
+ OPTIMIZE="$(OPTIMIZE)"
+
+
+ # --- MakeMaker c_o section:
+
+
+ # --- MakeMaker xs_c section:
+
+
+ # --- MakeMaker xs_o section:
+
+
+ # --- MakeMaker top_targets section:
+
+ #all :: config $(INST_PM) subdirs linkext manifypods
+
+ all :: pure_all manifypods
+ @$(NOOP)
+
+ pure_all :: config pm_to_blib subdirs linkext
+ @$(NOOP)
+
+ subdirs :: $(MYEXTLIB)
+ @$(NOOP)
+
+ config :: Makefile $(INST_LIBDIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_ARCHAUTODIR)/.exists
+ @$(NOOP)
+
+ config :: $(INST_AUTODIR)/.exists
+ @$(NOOP)
+
+ config :: Version_check
+ @$(NOOP)
+
+
+ $(INST_AUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_AUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_AUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
+
+ $(INST_LIBDIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_LIBDIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_LIBDIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
+
+ $(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_ARCHAUTODIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
+
+ config :: $(INST_MAN3DIR)/.exists
+ @$(NOOP)
+
+
+ $(INST_MAN3DIR)/.exists :: /usr/lib/perl5/5.005/i386-linux/CORE/perl.h
+ @$(MKPATH) $(INST_MAN3DIR)
+ @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.005/i386-linux/CORE/perl.h $(INST_MAN3DIR)/.exists
+
+ -@$(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
+
+ help:
+ perldoc ExtUtils::MakeMaker
+
+ Version_check:
+ @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ -MExtUtils::MakeMaker=Version_check \
+ -e "Version_check('$(MM_VERSION)')"
+
+
+ # --- MakeMaker linkext section:
+
+ linkext :: $(LINKTYPE)
+ @$(NOOP)
+
+
+ # --- MakeMaker dlsyms section:
+
+
+ # --- MakeMaker dynamic section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make dynamic"
+ #dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
+ dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT)
+ @$(NOOP)
+
+
+ # --- MakeMaker dynamic_bs section:
+
+ BOOTSTRAP =
+
+
+ # --- MakeMaker dynamic_lib section:
+
+
+ # --- MakeMaker static section:
+
+ ## $(INST_PM) has been moved to the all: target.
+ ## It remains here for awhile to allow for old usage: "make static"
+ #static :: Makefile $(INST_STATIC) $(INST_PM)
+ static :: Makefile $(INST_STATIC)
+ @$(NOOP)
+
+
+ # --- MakeMaker static_lib section:
+
+
+ # --- MakeMaker manifypods section:
+ POD2MAN_EXE = /usr/bin/pod2man
+ POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \
+ -e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "Makefile";' \
+ -e 'print "Manifying $$m{$$_}\n";' \
+ -e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\047t install $$m{$$_}\n";' \
+ -e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
+
+ manifypods : pure_all Record.pm
+ @$(POD2MAN) \
+ Record.pm \
+ $(INST_MAN3DIR)/DBIx::Record.$(MAN3EXT)
+
+ # --- MakeMaker processPL section:
+
+
+ # --- MakeMaker installbin section:
+
+
+ # --- MakeMaker subdirs section:
+
+ # none
+
+ # --- MakeMaker clean section:
+
+ # Delete temporary files but do not touch installed files. We don't delete
+ # the Makefile here so a later make realclean still has a makefile to use.
+
+ clean ::
+ -rm -rf ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all perlmain.c mon.out core so_locations pm_to_blib *~ */*~ */*/*~ *$(OBJ_EXT) *$(LIB_EXT) perl.exe $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
+ -mv Makefile Makefile.old $(DEV_NULL)
+
+
+ # --- MakeMaker realclean section:
+
+ # Delete temporary files (via clean) and also delete installed files
+ realclean purge :: clean
+ rm -rf $(INST_AUTODIR) $(INST_ARCHAUTODIR)
+ rm -f $(INST_LIBDIR)/Record.pm
+ rm -rf Makefile Makefile.old
+
+
+ # --- MakeMaker dist_basics section:
+
+ distclean :: realclean distcheck
+
+ distcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \
+ -e fullcheck
+
+ skipcheck :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \
+ -e skipcheck
+
+ manifest :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \
+ -e mkmanifest
+
+
+ # --- MakeMaker dist_core section:
+
+ dist : $(DIST_DEFAULT)
+ @$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
+ -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "Makefile";'
+
+ tardist : $(DISTVNAME).tar$(SUFFIX)
+
+ zipdist : $(DISTVNAME).zip
+
+ $(DISTVNAME).tar$(SUFFIX) : distdir
+ $(PREOP)
+ $(TO_UNIX)
+ $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(COMPRESS) $(DISTVNAME).tar
+ $(POSTOP)
+
+ $(DISTVNAME).zip : distdir
+ $(PREOP)
+ $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+ uutardist : $(DISTVNAME).tar$(SUFFIX)
+ uuencode $(DISTVNAME).tar$(SUFFIX) \
+ $(DISTVNAME).tar$(SUFFIX) > \
+ $(DISTVNAME).tar$(SUFFIX)_uu
+
+ shdist : distdir
+ $(PREOP)
+ $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+
+ # --- MakeMaker dist_dir section:
+
+ distdir :
+ $(RM_RF) $(DISTVNAME)
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+
+ # --- MakeMaker dist_test section:
+
+ disttest : distdir
+ cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE)
+ cd $(DISTVNAME) && $(MAKE) test
+
+
+ # --- MakeMaker dist_ci section:
+
+ ci :
+ $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \
+ -e "@all = keys %{ maniread() };" \
+ -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \
+ -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
+
+
+ # --- MakeMaker install section:
+
+ install :: all pure_install doc_install
+
+ install_perl :: all pure_perl_install doc_perl_install
+
+ install_site :: all pure_site_install doc_site_install
+
+ install_ :: install_site
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_install :: pure_$(INSTALLDIRS)_install
+
+ doc_install :: doc_$(INSTALLDIRS)_install
+ @echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
+
+ pure__install : pure_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ doc__install : doc_site_install
+ @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_perl_install ::
+ @$(MOD_INSTALL) \
+ read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(INSTALLARCHLIB) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+ pure_site_install ::
+ @$(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(INSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(INSTALLSITELIB) \
+ $(INST_ARCHLIB) $(INSTALLSITEARCH) \
+ $(INST_BIN) $(INSTALLBIN) \
+ $(INST_SCRIPT) $(INSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(INSTALLMAN3DIR)
+ @$(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+ doc_perl_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLPRIVLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+ doc_site_install ::
+ -@$(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(INSTALLARCHLIB)/perllocal.pod
+
+
+ uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+
+ uninstall_from_perldirs ::
+ @$(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+ uninstall_from_sitedirs ::
+ @$(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+ # --- MakeMaker force section:
+ # Phony target to force checking subdirectories.
+ FORCE:
+ @$(NOOP)
+
+
+ # --- MakeMaker perldepend section:
+
+
+ # --- MakeMaker makefile section:
+
+ # We take a very conservative approach here, but it\'s worth it.
+ # We move Makefile to Makefile.old here to avoid gnu make looping.
+ Makefile : Makefile.PL $(CONFIGDEP)
+ @echo "Makefile out-of-date with respect to $?"
+ @echo "Cleaning current config before rebuilding Makefile..."
+ -@$(RM_F) Makefile.old
+ -@$(MV) Makefile Makefile.old
+ -$(MAKE) -f Makefile.old clean $(DEV_NULL) || $(NOOP)
+ $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL
+ @echo "==> Your Makefile has been rebuilt. <=="
+ @echo "==> Please rerun the make command. <=="
+ false
+
+ # To change behavior to :: would be nice, but would break Tk b9.02
+ # so you find such a warning below the dist target.
+ #Makefile :: $(VERSION_FROM)
+ # @echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
+
+
+ # --- MakeMaker staticmake section:
+
+ # --- MakeMaker makeaperl section ---
+ MAP_TARGET = perl
+ FULLPERL = /usr/bin/perl
+
+ $(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+ $(MAKE) -f $(MAKE_APERL_FILE) $@
+
+ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
+ @echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ @$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+ Makefile.PL DIR= \
+ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+ # --- MakeMaker test section:
+
+ TEST_VERBOSE=0
+ TEST_TYPE=test_$(LINKTYPE)
+ TEST_FILE = test.pl
+ TEST_FILES =
+ TESTDB_SW = -d
+
+ testdb :: testdb_$(LINKTYPE)
+
+ test :: $(TEST_TYPE)
+
+ test_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERL) $(TESTDB_SW) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
+
+ test_ : test_dynamic
+
+ test_static :: test_dynamic
+ testdb_static :: testdb_dynamic
+
+
+ # --- MakeMaker ppd section:
+ # Creates a PPD (Perl Package Description) for a binary distribution.
+ ppd:
+ @$(PERL) -e "print qq{<SOFTPKG NAME=\"DBIx-Record\" VERSION=\"0,02,0,0\">\n}. qq{\t<TITLE>DBIx-Record</TITLE>\n}. qq{\t<ABSTRACT></ABSTRACT>\n}. qq{\t<AUTHOR></AUTHOR>\n}. qq{\t<IMPLEMENTATION>\n}. qq{\t\t<OS NAME=\"$(OSNAME)\" />\n}. qq{\t\t<ARCHITECT
URE NAME=\"i386-linux\" />\n}. qq{\t\t<CODEBASE HREF=\"\" />\n}. qq{\t</IMPLEMENTATION>\n}. qq{</SOFTPKG>\n}" > DBIx-Record.ppd
+
+ # --- MakeMaker pm_to_blib section:
+
+ pm_to_blib: $(TO_INST_PM)
+ @$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
+ "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
+ -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'$(INST_LIB)/auto')"
+ @$(TOUCH) $@
+
+
+ # --- MakeMaker selfdocument section:
+
+
+ # --- MakeMaker postamble section:
+
+
+ # End.
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/Makefile.PL'
Index: ./lib/DBIx/DBIx-Record/Makefile.PL
*** ./lib/DBIx/DBIx-Record/Makefile.PL Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/Makefile.PL Fri Aug 11 23:29:19 2000
***************
*** 0 ****
--- 1,7 ----
+ use ExtUtils::MakeMaker;
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+ WriteMakefile(
+ 'NAME' => 'DBIx::Record',
+ 'VERSION_FROM' => 'Record.pm', # finds $VERSION
+ );
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/Record.pm'
Index: ./lib/DBIx/DBIx-Record/Record.pm
*** ./lib/DBIx/DBIx-Record/Record.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/Record.pm Fri Aug 11 23:48:53 2000
***************
*** 0 ****
--- 1,452 ----
+ #$Header: /proj/maps/src/rt/lib/DBIx/DBIx-Record/Record.pm,v 1.1 2000/08/12 06:48:53 ivan Exp $
+ package DBIx::Record;
+
+ use strict;
+ use vars qw($VERSION @ISA $AUTOLOAD);
+ require Date::Kronos;
+
+ $VERSION = '0.02';
+
+ # Preloaded methods go here.
+
+ # {{{ sub new
+
+ #instantiate a new record object.
+
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ return $self;
+ }
+
+ # }}}
+
+ # {{{ sub Id and id
+ sub Id {
+ my $self = shift;
+ return ($self->{'values'}->{'id'});
+ }
+
+ sub id {
+ my $self = shift;
+ return ($self->Id);
+ }
+
+ # }}}
+
+ # {{{ Datehandling
+
+ # There is room for optimizations in most of those subs:
+
+ # {{{ LastUpdatedObj
+
+ sub LastUpdatedObj {
+ my $self=shift;
+ my $obj=Date::Kronos->new();
+ $obj->sql_timestamp($self->LastUpdated);
+ return $obj;
+ }
+
+ # }}}
+
+ # {{{ CreatedObj
+
+ sub CreatedObj {
+ my $self=shift;
+ my $obj=Date::Kronos->new();
+ $obj->sql_timestamp($self->Created);
+ return $obj;
+ }
+
+ # }}}
+
+ # {{{ AgeAsString
+ sub AgeAsString {
+ my $self=shift;
+ my $now=Date::Kronos->new(cal_type=>'Unix');
+ my $age=$now-$self->CreatedObj;
+ return "$age ago";
+ }
+ # }}}
+
+ # {{{ LastUpdatedAsString
+
+ sub LastUpdatedAsString {
+ my $self=shift;
+ if ($self->LastUpdated) {
+ return $self->LastUpdatedObj->Gregorian->sql_timestamp;
+ } else {
+ return "never";
+ }
+ }
+
+ # }}}
+
+ # {{{ CreatedAsString
+ sub CreatedAsString {
+ return CreatedObj(@_)->Gregorian->stringify;
+ }
+ # }}}
+
+ # {{{ LongSinceUpdateAsString
+ sub LongSinceUpdateAsString {
+ my $self=shift;
+ if ($self->LastUpdated && $self->LastUpdated ne '0000-00-00 00:00:00') {
+ my $now=Date::Kronos->new(cal_type=>'Unix');
+ my $age=$now-$self->LastUpdatedObj;
+ my $agestring=$age->Unix->stringify;
+ return "$agestring ago";
+ } else {
+ return "never";
+ }
+ }
+ # }}}
+
+ # }}} Datehandling
+
+ # {{{ Routines dealing with getting and setting row data
+
+ # {{{ sub DESTROY
+ sub DESTROY {
+ return 1;
+ }
+ # }}}
+
+ # {{{ sub AUTOLOAD
+ sub AUTOLOAD {
+ my $self = shift;
+
+ no strict 'refs';
+
+ if ($AUTOLOAD =~ /.*::(\w+)/ && $self->_Accessible($1,'read')) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Value($Attrib))};
+ return($self->_Value($Attrib));
+ }
+
+ elsif ($AUTOLOAD =~ /.*::Set(\w+)/ && $self->_Accessible($1,'write')) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Set($Attrib, $_[1]))};
+ my $Value = shift @_;
+ return($self->_Set($Attrib, $Value));
+ }
+
+ #Previously, I checked for writability here. but I'm not sure that's the
+ #right idea. it breaks the ability to do ValidateQueue for a ticket
+ #on creation.
+
+ elsif ($AUTOLOAD =~ /.*::Validate(\w+)/ ) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Validate($Attrib, $_[1]))};
+ my $Value = shift @_;
+ return($self->_Validate($Attrib, $Value));
+ }
+
+
+ # TODO: if autoload = 0 or 1 _ then a combination of lowercase and _ chars,
+ # turn them into studlycapped phrases
+
+ else {
+ my ($package, $filename, $line);
+ ($package, $filename, $line) = caller;
+
+ die "$AUTOLOAD Unimplemented in $package. ($filename line $line) \n";
+ }
+
+ }
+ # }}}
+
+ # {{{ sub _Accessible
+
+ sub _Accessible {
+ my $self = shift;
+ my $attrib = shift;
+ my $mode = shift;
+ my %cols = @_;
+
+ #return 0 if it's not a valid attribute;
+ return undef unless ($cols{"$attrib"});
+
+ # return true if we can $mode $Attrib;
+ $cols{$attrib} =~ /$mode/;
+ }
+
+ # }}}
+
+ # {{{ sub _Value
+ sub _Value {
+ my $self = shift;
+ my $field = shift;
+
+ return($self->{'values'}->{"$field"});
+ }
+
+ # }}}
+
+ # {{{ sub _Set
+
+ sub _Set {
+ my $self = shift;
+ my $field = shift;
+ my $value = shift;
+ my $is_sql = shift;
+ my ($error_condition);
+
+ defined $field && !defined($value) && return (0,"No value sent to _Set!\n");
+
+ if (defined $field) {
+ if ((defined $self->_Value($field)) && ($value eq $self->_Value($field))) {
+ return (0, "That is already the current value");
+ }
+ else {
+ #TODO $self->_Validate($field, $value);
+ $error_condition = $self->_Handle->UpdateTableValue($self->{'table'}, $field,$value,$self->id, $is_sql);
+ # TODO: Deal better with error handling?
+ return (0, "Some error has occurred")
+ unless ($error_condition);
+ $self->{'values'}->{"$field"} = $value;
+ }
+ }
+ $error_condition = $self->_Handle->UpdateTableValue($self->{'table'}, 'LastUpdated','now()',$self->id)
+ if ($self->_Accessible('LastUpdated','auto'));
+ return (0, "Some error has occurred")
+ unless ($error_condition);
+ return (1, "The new value has been set.");
+ }
+
+ # }}}
+
+ # {{{ sub _Validate
+
+ #TODO: Implement _Validate.
+ sub _Validate {
+ my $self = shift;
+ my $field = shift;
+ my $value = shift;
+
+ #Check type of input
+ #If it's null, are nulls permitted?
+ #If it's an int, check the # of bits
+ #If it's a string,
+ #check length
+ #check for nonprintables
+ #If it's a blob, check for length
+ #In an ideal world, if this is a link to another table, check the dependency.
+
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ routines dealing with loading records
+
+ # {{{ sub Load
+
+ # load should do a bit of overloading
+ # if we call it with only one argument, we're trying to load by reference.
+ # if we call it with a passel of arguments, we're trying to load by value
+ # The latter is primarily important when we've got a whole set of record that we're
+ # reading in with a recordset class and want to instantiate objefcts for each record.
+
+ *load =\&Load;
+
+ sub Load {
+ my $self = shift;
+ my ($package, $filename, $line) = caller;
+ return $self->LoadById(@_);
+ }
+
+ # }}}
+
+ # {{{ sub LoadByCol
+
+ sub LoadByCol {
+ my $self = shift;
+ my $col = shift;
+ my $val = shift;
+
+ $val = $self->_Handle->safe_quote($val);
+ my $QueryString = "SELECT * FROM ".$self->{'table'}." WHERE $col = $val";
+ return ($self->_LoadFromSQL($QueryString));
+ }
+
+ # }}}
+
+ # {{{ sub LoadById
+ sub LoadById {
+ my $self = shift;
+ my $id = shift;
+
+ $id = 0 if (!defined($id));
+ return ($self->LoadByCol('id',$id));
+ }
+ # }}}
+
+ # {{{ sub LoadFromHash
+ sub LoadFromHash {
+ my $self = shift;
+ my $hashref = shift;
+
+ $self->{'values'} = $hashref;
+ return ($self->{'values'}{'id'});
+ }
+ # }}}
+
+ # {{{ sub _LoadFromSQL
+
+ sub _LoadFromSQL {
+ my $self = shift;
+ my $QueryString = shift;
+
+ my $sth = $self->_Handle->SimpleQuery($QueryString);
+
+ #TODO: COMPATIBILITY PROBLEM with fetchrow_hashref!
+ #Some DBMS'es returns uppercase, some returns lowercase,
+ #and mysql return mixedcase!
+
+ #TODO this only gets the first row. we should check if there are more.
+ $self->{'values'} = $sth->fetchrow_hashref;
+ unless ($self->{'values'}) {
+ # warn "something might be wrong here; row not found. SQL: $QueryString";
+ return undef;
+ }
+
+ unless ($self->{'values'}{'id'}) {
+ warn "something wrong here";
+ }
+ return ($self->{'values'}{'id'});
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with creating or deleting rows in the DB
+
+ # {{{ sub Create
+
+ sub Create {
+ my $self = shift;
+ my @keyvalpairs = (@_);
+
+ my ($cols, $vals);
+
+ push @keyvalpairs, 'Created', 'now()'
+ if $self->_Accessible('Created', 'auto');
+
+ while (my $key = shift @keyvalpairs) {
+ my $value = shift @keyvalpairs;
+
+ $cols .= $key . ", ";
+ if (defined ($value)) {
+ $value = $self->_Handle->safe_quote($value)
+ unless ($key=~/^(Created|LastUpdated)$/ && $value=~/^now\(\)$/i);
+ $vals .= "$value, ";
+ }
+ else {
+ $vals .= "NULL, ";
+ }
+ }
+
+ $cols =~ s/, $//;
+ $vals =~ s/, $//;
+ #TODO Check to make sure the key's not already listed.
+ #TODO update internal data structure
+ my $QueryString = "INSERT INTO ".$self->{'table'}." ($cols) VALUES ($vals)";
+
+
+
+
+ my $sth = $self->_Handle->SimpleQuery($QueryString);
+ if (!$sth) {
+ if ($main::debug) {
+ die "Error with $QueryString";
+ }
+ else {
+ return (0);
+ }
+ }
+ #Todo degeneralize this
+ $self->{'id'}=$sth->{'mysql_insertid'};
+ return( $self->{'id'}); #Add Succeded. return the id
+ }
+
+ # }}}
+
+ # {{{ sub Delete
+
+ sub Delete {
+ my $self = shift;
+
+ #TODO Check to make sure the key's not already listed.
+ #TODO Update internal data structure
+ my $QueryString = "DELETE FROM ".$self->{'table'} . " WHERE id = ". $self->id();
+ ## TODO: This seems broken to me:
+ # return($self->_Handle->FetchResult($QueryString));
+ return($self->_Handle->SimpleQuery($QueryString));
+ }
+
+
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with database handles
+
+ # TODO: Combine into _Handle this will involve modifying subclasses.
+
+ # {{{ sub _Handle
+ sub _Handle {
+ my $self = shift;
+ if (@_) {
+ $self->{'DBIxHandle'} = shift;
+ }
+ return ($self->{'DBIxHandle'});
+ }
+
+ # }}}
+
+
+ # }}}
+
+ 1;
+
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::Record - Perl extension for subclassing, so you can deal with a Record
+
+ =head1 SYNOPSIS
+
+ use DBIx::Record;
+
+
+ =head1 DESCRIPTION
+ DBIX::Record is designed to work with DBIx::EasySearch. Users should almost
+ never create DBIx::Record objects themselves.
+
+ Docs are forthcoming. If you pester jesse at fsck.com he'll put them together.
+
+ Check out Request Tracker at http://www.fsck.com/projects/rt/ for examples of usage.
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ perl(1).
+
+ =cut
+
+ # }}}
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm'
Index: ./lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm
*** ./lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm Fri Aug 11 18:07:19 2000
***************
*** 0 ****
--- 1,452 ----
+ #$Header: /cvsroot/twort/rt/lib/DBIx/Record.pm,v 1.1 2000/08/03 12:28:52 tobix Exp $
+ package DBIx::Record;
+
+ use strict;
+ use vars qw($VERSION @ISA $AUTOLOAD);
+ require Date::Kronos;
+
+ $VERSION = '0.02';
+
+ # Preloaded methods go here.
+
+ # {{{ sub new
+
+ #instantiate a new record object.
+
+ sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ return $self;
+ }
+
+ # }}}
+
+ # {{{ sub Id and id
+ sub Id {
+ my $self = shift;
+ return ($self->{'values'}->{'id'});
+ }
+
+ sub id {
+ my $self = shift;
+ return ($self->Id);
+ }
+
+ # }}}
+
+ # {{{ Datehandling
+
+ # There is room for optimizations in most of those subs:
+
+ # {{{ LastUpdatedObj
+
+ sub LastUpdatedObj {
+ my $self=shift;
+ my $obj=Date::Kronos->new();
+ $obj->sql_timestamp($self->LastUpdated);
+ return $obj;
+ }
+
+ # }}}
+
+ # {{{ CreatedObj
+
+ sub CreatedObj {
+ my $self=shift;
+ my $obj=Date::Kronos->new();
+ $obj->sql_timestamp($self->Created);
+ return $obj;
+ }
+
+ # }}}
+
+ # {{{ AgeAsString
+ sub AgeAsString {
+ my $self=shift;
+ my $now=Date::Kronos->new(cal_type=>'Unix');
+ my $age=$now-$self->CreatedObj;
+ return "$age ago";
+ }
+ # }}}
+
+ # {{{ LastUpdatedAsString
+
+ sub LastUpdatedAsString {
+ my $self=shift;
+ if ($self->LastUpdated) {
+ return $self->LastUpdatedObj->Gregorian->sql_timestamp;
+ } else {
+ return "never";
+ }
+ }
+
+ # }}}
+
+ # {{{ CreatedAsString
+ sub CreatedAsString {
+ return CreatedObj(@_)->Gregorian->stringify;
+ }
+ # }}}
+
+ # {{{ LongSinceUpdateAsString
+ sub LongSinceUpdateAsString {
+ my $self=shift;
+ if ($self->LastUpdated && $self->LastUpdated ne '0000-00-00 00:00:00') {
+ my $now=Date::Kronos->new(cal_type=>'Unix');
+ my $age=$now-$self->LastUpdatedObj;
+ my $agestring=$age->Unix->stringify;
+ return "$agestring ago";
+ } else {
+ return "never";
+ }
+ }
+ # }}}
+
+ # }}} Datehandling
+
+ # {{{ Routines dealing with getting and setting row data
+
+ # {{{ sub DESTROY
+ sub DESTROY {
+ return 1;
+ }
+ # }}}
+
+ # {{{ sub AUTOLOAD
+ sub AUTOLOAD {
+ my $self = shift;
+
+ no strict 'refs';
+
+ if ($AUTOLOAD =~ /.*::(\w+)/ && $self->_Accessible($1,'read')) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Value($Attrib))};
+ return($self->_Value($Attrib));
+ }
+
+ elsif ($AUTOLOAD =~ /.*::Set(\w+)/ && $self->_Accessible($1,'write')) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Set($Attrib, $_[1]))};
+ my $Value = shift @_;
+ return($self->_Set($Attrib, $Value));
+ }
+
+ #Previously, I checked for writability here. but I'm not sure that's the
+ #right idea. it breaks the ability to do ValidateQueue for a ticket
+ #on creation.
+
+ elsif ($AUTOLOAD =~ /.*::Validate(\w+)/ ) {
+ my $Attrib = $1;
+
+ *{$AUTOLOAD} = sub { return ($_[0]->_Validate($Attrib, $_[1]))};
+ my $Value = shift @_;
+ return($self->_Validate($Attrib, $Value));
+ }
+
+
+ # TODO: if autoload = 0 or 1 _ then a combination of lowercase and _ chars,
+ # turn them into studlycapped phrases
+
+ else {
+ my ($package, $filename, $line);
+ ($package, $filename, $line) = caller;
+
+ die "$AUTOLOAD Unimplemented in $package. ($filename line $line) \n";
+ }
+
+ }
+ # }}}
+
+ # {{{ sub _Accessible
+
+ sub _Accessible {
+ my $self = shift;
+ my $attrib = shift;
+ my $mode = shift;
+ my %cols = @_;
+
+ #return 0 if it's not a valid attribute;
+ return undef unless ($cols{"$attrib"});
+
+ # return true if we can $mode $Attrib;
+ $cols{$attrib} =~ /$mode/;
+ }
+
+ # }}}
+
+ # {{{ sub _Value
+ sub _Value {
+ my $self = shift;
+ my $field = shift;
+
+ return($self->{'values'}->{"$field"});
+ }
+
+ # }}}
+
+ # {{{ sub _Set
+
+ sub _Set {
+ my $self = shift;
+ my $field = shift;
+ my $value = shift;
+ my $is_sql = shift;
+ my ($error_condition);
+
+ defined $field && !defined($value) && return (0,"No value sent to _Set!\n");
+
+ if (defined $field) {
+ if ((defined $self->_Value($field)) && ($value eq $self->_Value($field))) {
+ return (0, "That is already the current value");
+ }
+ else {
+ #TODO $self->_Validate($field, $value);
+ $error_condition = $self->_Handle->UpdateTableValue($self->{'table'}, $field,$value,$self->id, $is_sql);
+ # TODO: Deal better with error handling?
+ return (0, "Some error has occurred")
+ unless ($error_condition);
+ $self->{'values'}->{"$field"} = $value;
+ }
+ }
+ $error_condition = $self->_Handle->UpdateTableValue($self->{'table'}, 'LastUpdated','now()',$self->id)
+ if ($self->_Accessible('LastUpdated','auto'));
+ return (0, "Some error has occurred")
+ unless ($error_condition);
+ return (1, "The new value has been set.");
+ }
+
+ # }}}
+
+ # {{{ sub _Validate
+
+ #TODO: Implement _Validate.
+ sub _Validate {
+ my $self = shift;
+ my $field = shift;
+ my $value = shift;
+
+ #Check type of input
+ #If it's null, are nulls permitted?
+ #If it's an int, check the # of bits
+ #If it's a string,
+ #check length
+ #check for nonprintables
+ #If it's a blob, check for length
+ #In an ideal world, if this is a link to another table, check the dependency.
+
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ routines dealing with loading records
+
+ # {{{ sub Load
+
+ # load should do a bit of overloading
+ # if we call it with only one argument, we're trying to load by reference.
+ # if we call it with a passel of arguments, we're trying to load by value
+ # The latter is primarily important when we've got a whole set of record that we're
+ # reading in with a recordset class and want to instantiate objefcts for each record.
+
+ *load =\&Load;
+
+ sub Load {
+ my $self = shift;
+ my ($package, $filename, $line) = caller;
+ return $self->LoadById(@_);
+ }
+
+ # }}}
+
+ # {{{ sub LoadByCol
+
+ sub LoadByCol {
+ my $self = shift;
+ my $col = shift;
+ my $val = shift;
+
+ $val = $self->_Handle->safe_quote($val);
+ my $QueryString = "SELECT * FROM ".$self->{'table'}." WHERE $col = $val";
+ return ($self->_LoadFromSQL($QueryString));
+ }
+
+ # }}}
+
+ # {{{ sub LoadById
+ sub LoadById {
+ my $self = shift;
+ my $id = shift;
+
+ $id = 0 if (!defined($id));
+ return ($self->LoadByCol('id',$id));
+ }
+ # }}}
+
+ # {{{ sub LoadFromHash
+ sub LoadFromHash {
+ my $self = shift;
+ my $hashref = shift;
+
+ $self->{'values'} = $hashref;
+ return ($self->{'values'}{'id'});
+ }
+ # }}}
+
+ # {{{ sub _LoadFromSQL
+
+ sub _LoadFromSQL {
+ my $self = shift;
+ my $QueryString = shift;
+
+ my $sth = $self->_Handle->SimpleQuery($QueryString);
+
+ #TODO: COMPATIBILITY PROBLEM with fetchrow_hashref!
+ #Some DBMS'es returns uppercase, some returns lowercase,
+ #and mysql return mixedcase!
+
+ #TODO this only gets the first row. we should check if there are more.
+ $self->{'values'} = $sth->fetchrow_hashref;
+ unless ($self->{'values'}) {
+ # warn "something might be wrong here; row not found. SQL: $QueryString";
+ return undef;
+ }
+
+ unless ($self->{'values'}{'id'}) {
+ warn "something wrong here";
+ }
+ return ($self->{'values'}{'id'});
+ }
+
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with creating or deleting rows in the DB
+
+ # {{{ sub Create
+
+ sub Create {
+ my $self = shift;
+ my @keyvalpairs = (@_);
+
+ my ($cols, $vals);
+
+ push @keyvalpairs, 'Created', 'now()'
+ if $self->_Accessible('Created', 'auto');
+
+ while (my $key = shift @keyvalpairs) {
+ my $value = shift @keyvalpairs;
+
+ $cols .= $key . ", ";
+ if (defined ($value)) {
+ $value = $self->_Handle->safe_quote($value)
+ unless ($key=~/^(Created|LastUpdated)$/ && $value=~/^now\(\)$/i);
+ $vals .= "$value, ";
+ }
+ else {
+ $vals .= "NULL, ";
+ }
+ }
+
+ $cols =~ s/, $//;
+ $vals =~ s/, $//;
+ #TODO Check to make sure the key's not already listed.
+ #TODO update internal data structure
+ my $QueryString = "INSERT INTO ".$self->{'table'}." ($cols) VALUES ($vals)";
+
+
+
+
+ my $sth = $self->_Handle->SimpleQuery($QueryString);
+ if (!$sth) {
+ if ($main::debug) {
+ die "Error with $QueryString";
+ }
+ else {
+ return (0);
+ }
+ }
+ #Todo degeneralize this
+ $self->{'id'}=$sth->{'mysql_insertid'};
+ return( $self->{'id'}); #Add Succeded. return the id
+ }
+
+ # }}}
+
+ # {{{ sub Delete
+
+ sub Delete {
+ my $self = shift;
+
+ #TODO Check to make sure the key's not already listed.
+ #TODO Update internal data structure
+ my $QueryString = "DELETE FROM ".$self->{'table'} . " WHERE id = ". $self->id();
+ ## TODO: This seems broken to me:
+ # return($self->_Handle->FetchResult($QueryString));
+ return($self->_Handle->SimpleQuery($QueryString));
+ }
+
+
+ # }}}
+
+ # }}}
+
+ # {{{ Routines dealing with database handles
+
+ # TODO: Combine into _Handle this will involve modifying subclasses.
+
+ # {{{ sub _Handle
+ sub _Handle {
+ my $self = shift;
+ if (@_) {
+ $self->{'DBIxHandle'} = shift;
+ }
+ return ($self->{'DBIxHandle'});
+ }
+
+ # }}}
+
+
+ # }}}
+
+ 1;
+
+ __END__
+
+ # {{{ POD
+
+ =head1 NAME
+
+ DBIx::Record - Perl extension for subclassing, so you can deal with a Record
+
+ =head1 SYNOPSIS
+
+ use DBIx::Record;
+
+
+ =head1 DESCRIPTION
+ DBIX::Record is designed to work with DBIx::EasySearch. Users should almost
+ never create DBIx::Record objects themselves.
+
+ Docs are forthcoming. If you pester jesse at fsck.com he'll put them together.
+
+ Check out Request Tracker at http://www.fsck.com/projects/rt/ for examples of usage.
+
+ =head1 AUTHOR
+
+ Jesse Vincent, jesse at fsck.com
+
+ =head1 SEE ALSO
+
+ perl(1).
+
+ =cut
+
+ # }}}
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm'
Index: ./lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm
*** ./lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm Fri Aug 11 23:43:20 2000
***************
*** 0 ****
--- 1,219 ----
+ .rn '' }`
+ ''' $RCSfile$$Revision$$Date$
+ '''
+ ''' $Log$
+ '''
+ .de Sh
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Ip
+ .br
+ .ie \\n(.$>=3 .ne \\$3
+ .el .ne 3
+ .IP "\\$1" \\$2
+ ..
+ .de Vb
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve
+ .ft R
+
+ .fi
+ ..
+ '''
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+ ''' Bell System Logo is used as a dummy character.
+ '''
+ .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+ .ds -- \(*W-
+ .ds PI pi
+ .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ ''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+ ''' \*(L" and \*(R", except that they are used on ".xx" lines,
+ ''' such as .IP and .SH, which do another additional levels of
+ ''' double-quote interpretation
+ .ds M" """
+ .ds S" """
+ .ds N" """""
+ .ds T" """""
+ .ds L' '
+ .ds R' '
+ .ds M' '
+ .ds S' '
+ .ds N' '
+ .ds T' '
+ 'br\}
+ .el\{\
+ .ds -- \(em\|
+ .tr \*(Tr
+ .ds L" ``
+ .ds R" ''
+ .ds M" ``
+ .ds S" ''
+ .ds N" ``
+ .ds T" ''
+ .ds L' `
+ .ds R' '
+ .ds M' `
+ .ds S' '
+ .ds N' `
+ .ds T' '
+ .ds PI \(*p
+ 'br\}
+ .\" If the F register is turned on, we'll generate
+ .\" index entries out stderr for the following things:
+ .\" TH Title
+ .\" SH Header
+ .\" Sh Subsection
+ .\" Ip Item
+ .\" X<> Xref (embedded
+ .\" Of course, you have to process the output yourself
+ .\" in some meaninful fashion.
+ .if \nF \{
+ .de IX
+ .tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .nr % 0
+ .rr F
+ .\}
+ .TH Record 3pm "perl 5.005, patch 03" "11/Aug/2000" "User Contributed Perl Documentation"
+ .UC
+ .if n .hy 0
+ .if n .na
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .de CQ \" put $1 in typewriter font
+ .ft CW
+ 'if n "\c
+ 'if t \\&\\$1\c
+ 'if n \\&\\$1\c
+ 'if n \&"
+ \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+ '.ft R
+ ..
+ .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+ . \" AM - accent mark definitions
+ .bd B 3
+ . \" fudge factors for nroff and troff
+ .if n \{\
+ . ds #H 0
+ . ds #V .8m
+ . ds #F .3m
+ . ds #[ \f1
+ . ds #] \fP
+ .\}
+ .if t \{\
+ . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ . ds #V .6m
+ . ds #F 0
+ . ds #[ \&
+ . ds #] \&
+ .\}
+ . \" simple accents for nroff and troff
+ .if n \{\
+ . ds ' \&
+ . ds ` \&
+ . ds ^ \&
+ . ds , \&
+ . ds ~ ~
+ . ds ? ?
+ . ds ! !
+ . ds /
+ . ds q
+ .\}
+ .if t \{\
+ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ . ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+ . ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+ . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ . ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+ .\}
+ . \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+ .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+ .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+ .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .ds oe o\h'-(\w'o'u*4/10)'e
+ .ds Oe O\h'-(\w'O'u*4/10)'E
+ . \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ . \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ . ds : e
+ . ds 8 ss
+ . ds v \h'-1'\o'\(aa\(ga'
+ . ds _ \h'-1'^
+ . ds . \h'-1'.
+ . ds 3 3
+ . ds o a
+ . ds d- d\h'-1'\(ga
+ . ds D- D\h'-1'\(hy
+ . ds th \o'bp'
+ . ds Th \o'LP'
+ . ds ae ae
+ . ds Ae AE
+ . ds oe oe
+ . ds Oe OE
+ .\}
+ .rm #[ #] #H #V #F C
+ .SH "NAME"
+ DBIx::Record \- Perl extension for subclassing, so you can deal with a Record
+ .SH "SYNOPSIS"
+ .PP
+ .Vb 1
+ \& use DBIx::Record;
+ .Ve
+ .SH "DESCRIPTION DBIX::Record is designed to work with DBIx::EasySearch. Users should almost never create DBIx::Record objects themselves."
+ Docs are forthcoming. If you pester jesse at fsck.com he'll put them together.
+ .PP
+ Check out Request Tracker at http://www.fsck.com/projects/rt/ for examples of usage.
+ .SH "AUTHOR"
+ Jesse Vincent, jesse at fsck.com
+ .SH "SEE ALSO"
+ \fIperl\fR\|(1).
+
+ .rn }` ''
+ .IX Title "Record 3pm"
+ .IX Name "DBIx::Record - Perl extension for subclassing, so you can deal with a Record"
+
+ .IX Header "NAME"
+
+ .IX Header "SYNOPSIS"
+
+ .IX Header "DESCRIPTION DBIX::Record is designed to work with DBIx::EasySearch. Users should almost never create DBIx::Record objects themselves."
+
+ .IX Header "AUTHOR"
+
+ .IX Header "SEE ALSO"
+
diff -c /dev/null 'work/lib/DBIx/DBIx-Record/test.pl'
Index: ./lib/DBIx/DBIx-Record/test.pl
*** ./lib/DBIx/DBIx-Record/test.pl Wed Dec 31 16:00:00 1969
--- ./lib/DBIx/DBIx-Record/test.pl Fri Aug 11 23:29:19 2000
***************
*** 0 ****
--- 1,20 ----
+ # Before `make install' is performed this script should be runnable with
+ # `make test'. After `make install' it should work as `perl test.pl'
+
+ ######################### We start with some black magic to print on failure.
+
+ # Change 1..1 below to 1..last_test_to_print .
+ # (It may become useful if the test is moved to ./t subdirectory.)
+
+ BEGIN { $| = 1; print "1..1\n"; }
+ END {print "not ok 1\n" unless $loaded;}
+ use DBIx::Record;
+ $loaded = 1;
+ print "ok 1\n";
+
+ ######################### End of black magic.
+
+ # Insert your test code below (better if it prints "ok 13"
+ # (correspondingly "not ok 13") depending on the success of chunk 13
+ # of the test code):
+
#### End of Patch data ####
#### ApplyPatch data follows ####
# Data version : 1.0
# Date generated : Sat Aug 12 01:41:14 2000
# Generated by : makepatch 2.00
# Recurse directories : Yes
# Excluded files : (\A|.*/)CVS(/.*|\Z)
# (\A|.*/)RCS(/.*|\Z)
# ,v\Z
# (\A|.*/)SCCS(/.*|\Z)
# (\A|.*/)[sp]\..+\Z
# r 'lib/DBIx/Record.pm' 9371 0
# r 'lib/DBIx/Handle.pm' 3575 0
# r 'lib/DBIx/EasySearch.pm' 15056 0
# p 'README' 10536 966062902 0100755
# c 'lib/DBIx/DBIx-EasySearch/Changes' 0 966061739 0100644
# c 'lib/DBIx/DBIx-EasySearch/EasySearch.pm' 0 966062932 0100755
# c 'lib/DBIx/DBIx-EasySearch/MANIFEST' 0 966061740 0100644
# c 'lib/DBIx/DBIx-EasySearch/Makefile' 0 966062597 0100644
# c 'lib/DBIx/DBIx-EasySearch/Makefile.PL' 0 966061739 0100644
# c 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx/EasySearch.pm' 0 966042438 0100555
# c 'lib/DBIx/DBIx-EasySearch/blib/man3/DBIx::EasySearch.3pm' 0 966062598 0100644
# c 'lib/DBIx/DBIx-EasySearch/test.pl' 0 966061739 0100644
# c 'lib/DBIx/DBIx-Handle/Changes' 0 966061755 0100644
# c 'lib/DBIx/DBIx-Handle/Handle.pm' 0 966062932 0100755
# c 'lib/DBIx/DBIx-Handle/MANIFEST' 0 966061755 0100644
# c 'lib/DBIx/DBIx-Handle/Makefile' 0 966062598 0100644
# c 'lib/DBIx/DBIx-Handle/Makefile.PL' 0 966061755 0100644
# c 'lib/DBIx/DBIx-Handle/blib/lib/DBIx/Handle.pm' 0 966042438 0100555
# c 'lib/DBIx/DBIx-Handle/blib/man3/DBIx::Handle.3pm' 0 966062599 0100644
# c 'lib/DBIx/DBIx-Handle/test.pl' 0 966061755 0100644
# c 'lib/DBIx/DBIx-Record/Changes' 0 966061759 0100644
# c 'lib/DBIx/DBIx-Record/MANIFEST' 0 966061759 0100644
# c 'lib/DBIx/DBIx-Record/Makefile' 0 966062600 0100644
# c 'lib/DBIx/DBIx-Record/Makefile.PL' 0 966061759 0100644
# c 'lib/DBIx/DBIx-Record/Record.pm' 0 966062933 0100755
# c 'lib/DBIx/DBIx-Record/blib/lib/DBIx/Record.pm' 0 966042439 0100555
# c 'lib/DBIx/DBIx-Record/blib/man3/DBIx::Record.3pm' 0 966062600 0100644
# c 'lib/DBIx/DBIx-Record/test.pl' 0 966061759 0100644
# C 'lib/DBIx/DBIx-EasySearch' 0 966062932 042755
# C 'lib/DBIx/DBIx-EasySearch/blib' 0 966062583 042755
# C 'lib/DBIx/DBIx-EasySearch/blib/lib' 0 966062583 042755
# C 'lib/DBIx/DBIx-EasySearch/blib/lib/DBIx' 0 966062583 040755
# C 'lib/DBIx/DBIx-EasySearch/blib/man3' 0 966062583 040755
# C 'lib/DBIx/DBIx-Handle' 0 966062932 042755
# C 'lib/DBIx/DBIx-Handle/blib' 0 966062585 042755
# C 'lib/DBIx/DBIx-Handle/blib/lib' 0 966062585 042755
# C 'lib/DBIx/DBIx-Handle/blib/lib/DBIx' 0 966062586 040755
# C 'lib/DBIx/DBIx-Handle/blib/man3' 0 966062586 040755
# C 'lib/DBIx/DBIx-Record' 0 966062933 042755
# C 'lib/DBIx/DBIx-Record/blib' 0 966062588 042755
# C 'lib/DBIx/DBIx-Record/blib/lib' 0 966062587 042755
# C 'lib/DBIx/DBIx-Record/blib/lib/DBIx' 0 966062588 040755
# C 'lib/DBIx/DBIx-Record/blib/man3' 0 966062588 040755
#### End of ApplyPatch data ####
#### End of Patch kit [created: Sat Aug 12 01:41:14 2000] ####
#### Checksum: 5900 151587 23682 ####
--
meow
_ivan
More information about the Rt-devel
mailing list