r18244 - in /branches/upstream/libdbix-searchbuilder-perl/current: Changes MANIFEST META.yml SIGNATURE SearchBuilder.pm SearchBuilder/Handle/Pg.pm SearchBuilder/Handle/SQLite.pm SearchBuilder/Handle/mysql.pm t/02order_outer.t

gregoa-guest at users.alioth.debian.org gregoa-guest at users.alioth.debian.org
Tue Apr 1 14:49:54 UTC 2008


Author: gregoa-guest
Date: Tue Apr  1 14:49:53 2008
New Revision: 18244

URL: http://svn.debian.org/wsvn/?sc=1&rev=18244
Log:
[svn-upgrade] Integrating new upstream version, libdbix-searchbuilder-perl (1.52)

Added:
    branches/upstream/libdbix-searchbuilder-perl/current/t/02order_outer.t
Modified:
    branches/upstream/libdbix-searchbuilder-perl/current/Changes
    branches/upstream/libdbix-searchbuilder-perl/current/MANIFEST
    branches/upstream/libdbix-searchbuilder-perl/current/META.yml
    branches/upstream/libdbix-searchbuilder-perl/current/SIGNATURE
    branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder.pm
    branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/Pg.pm
    branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/SQLite.pm
    branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/mysql.pm

Modified: branches/upstream/libdbix-searchbuilder-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/Changes?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/Changes (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/Changes Tue Apr  1 14:49:53 2008
@@ -1,12 +1,17 @@
 Revision history for Perl extension DBIx::SearchBuilder.
 
+1.52 Tue Apr  1 00:48:56 UTC 2008
+
+* Fix order by outer columnon SQLite, mysql, adjust Pg. Add test that
+  cover this.
+
 1.51 Tue Jan 15 22:53:56 UTC 2008
 
 * Fix CountAll method when paging is enabled and data is in memory already
 
 1.50 Fri Nov 23 23:24:00 UTC 2007
 
-* Oracle: Don't DISTINCT query when there is a group by cluse
+* Oracle: Don't DISTINCT query when there is a group by clause
 * Fix a problem when we have more then two collections in a union
   and some of them are empty
 

Modified: branches/upstream/libdbix-searchbuilder-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/MANIFEST?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/MANIFEST (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/MANIFEST Tue Apr  1 14:49:53 2008
@@ -35,6 +35,7 @@
 t/01nocap_api.t
 t/01records.t
 t/01searches.t
+t/02order_outer.t
 t/02records_cachable.t
 t/02records_integers.t
 t/02records_object.t

Modified: branches/upstream/libdbix-searchbuilder-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/META.yml?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/META.yml (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/META.yml Tue Apr  1 14:49:53 2008
@@ -26,4 +26,4 @@
   DBI: 0
   Encode: 0
   Want: 0
-version: 1.51
+version: 1.52

Modified: branches/upstream/libdbix-searchbuilder-perl/current/SIGNATURE
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/SIGNATURE?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/SIGNATURE (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/SIGNATURE Tue Apr  1 14:49:53 2008
@@ -14,21 +14,21 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 078309de7827fa2b031323b77a2e68d009812262 Changes
-SHA1 2e9746a7afda5167d8c7ff25a88f345ea5e35a02 MANIFEST
-SHA1 d622eefd4e7d29bb55e21ff83f4e25392f9a86b9 META.yml
+SHA1 6c4fe1023f6e47a084b833c7c5df061aa3c11f6b Changes
+SHA1 ddd4097470d90cd802af26e3da85db40645906b7 MANIFEST
+SHA1 6575bd93862f9070044417e7e518ce0f2bdfea45 META.yml
 SHA1 837637cca03f08e799c2106fedbf547f79e6feb7 Makefile.PL
 SHA1 d7a41642c368f2a587587e09f9e815d434feebff README
 SHA1 5a53d12d5cccd94845a6a7cc105cd9be34e20f1c ROADMAP
-SHA1 f33b152cae6712e230e5527f411e6a53e1438727 SearchBuilder.pm
+SHA1 5fd994fa5666b53f5cb4f19e39939534f6480415 SearchBuilder.pm
 SHA1 0777214c051789d8a42951997e897b7bd49510ce SearchBuilder/Handle.pm
 SHA1 55d337e6dd1ab5aecc39d2ae491bffb12e9ca449 SearchBuilder/Handle/Informix.pm
 SHA1 4efdcaefa5f94d994b052d1b343d2f5164ef4b52 SearchBuilder/Handle/ODBC.pm
 SHA1 061fabc379cda40e6c6e79b9779829f399ed6494 SearchBuilder/Handle/Oracle.pm
-SHA1 4e096c7cf4583c2ab01a5a893741bf1f26cf48a4 SearchBuilder/Handle/Pg.pm
-SHA1 ecb52a19979aea9528fc690028d16a05ab356c13 SearchBuilder/Handle/SQLite.pm
+SHA1 d1266042496de77f15f361d71d6068547d872d92 SearchBuilder/Handle/Pg.pm
+SHA1 21127fc5a1c8d2f585220637029d30955facc9a5 SearchBuilder/Handle/SQLite.pm
 SHA1 ec3fbc03b27c008d93a52b6b7fb0076529e5fcc8 SearchBuilder/Handle/Sybase.pm
-SHA1 ea451e77f452b7739fccb2af4301b70866c6cf19 SearchBuilder/Handle/mysql.pm
+SHA1 4034977117e21dff94a41cba179e22688b56221b SearchBuilder/Handle/mysql.pm
 SHA1 877685aaff265e36fa37298c372aa56864f68aa5 SearchBuilder/Handle/mysqlPP.pm
 SHA1 5dd029a91e72614d7aaf201b277a668c540e7dff SearchBuilder/Record.pm
 SHA1 1680fe8c21ca1667c55501c5f0e9b7bef434647f SearchBuilder/Record/Cachable.pm
@@ -50,6 +50,7 @@
 SHA1 2b2dc6f72370f60e1d233f2f8c12bb87414e825c t/01nocap_api.t
 SHA1 92f07d6d6c3a098f7c5e3524204522f2ec960f75 t/01records.t
 SHA1 049fa2ff4a443b27ca64dfa6e50d4fdcfc8c0edb t/01searches.t
+SHA1 5d6e84b06d3b1bd899484b158af32dfe19e5776a t/02order_outer.t
 SHA1 67d4c0dca9d1914eadba64460f3a2da4e074ae14 t/02records_cachable.t
 SHA1 e791bc2dc9ebcfe194f00eb9d0d61c391200b589 t/02records_integers.t
 SHA1 6e50e77f1b54fe28fd6bcbb6eb104527f25d2601 t/02records_object.t
@@ -65,7 +66,7 @@
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.8 (GNU/Linux)
 
-iEYEARECAAYFAkeNOoAACgkQvH6dkeDZaS9Z9gCfcwhrP8q9iadvARoTgVjZM7gH
-KakAn29tFAycAYq22e3GmE1x9+mAyHhN
-=wBHs
+iEYEARECAAYFAkfxoCIACgkQvH6dkeDZaS9pmACfQ/Zq+3Z4WsHmnh+vDMgQLZeX
+FCsAn3W1izL337BOTojKMEJp/MGHeoNe
+=GYHb
 -----END PGP SIGNATURE-----

Modified: branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder.pm?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder.pm (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder.pm Tue Apr  1 14:49:53 2008
@@ -4,7 +4,7 @@
 use strict;
 use warnings;
 
-our $VERSION = "1.51";
+our $VERSION = "1.52";
 
 use Clone qw();
 use Encode qw();
@@ -1082,19 +1082,20 @@
         else {
 	    $rowhash{'ORDER'} = "ASC";
         }
-
-        if ( ($rowhash{'ALIAS'}) and
-	     ($rowhash{'FIELD'}) and
-             ($rowhash{'ORDER'}) ) {
-
-	    if ($rowhash{'FIELD'} =~ /^(\w+\()(.*\))$/) {
+        $rowhash{'ALIAS'} = 'main' unless defined $rowhash{'ALIAS'};
+
+        if ( defined $rowhash{'ALIAS'} and
+	     $rowhash{'FIELD'} and
+             $rowhash{'ORDER'} ) {
+
+	    if ( length $rowhash{'ALIAS'} && $rowhash{'FIELD'} =~ /^(\w+\()(.*\))$/ ) {
 		# handle 'FUNCTION(FIELD)' formatted fields
 		$rowhash{'ALIAS'} = $1 . $rowhash{'ALIAS'};
 		$rowhash{'FIELD'} = $2;
 	    }
 
             $clause .= ($clause ? ", " : " ");
-            $clause .= $rowhash{'ALIAS'} . ".";
+            $clause .= $rowhash{'ALIAS'} . "." if length $rowhash{'ALIAS'};
             $clause .= $rowhash{'FIELD'} . " ";
             $clause .= $rowhash{'ORDER'};
         }

Modified: branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/Pg.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/Pg.pm?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/Pg.pm (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/Pg.pm Tue Apr  1 14:49:53 2008
@@ -230,7 +230,14 @@
         # If we are ordering by something not in 'main', we need to GROUP
         # BY and adjust the ORDER_BY accordingly
         local $sb->{group_by} = [@{$sb->{group_by} || []}, {FIELD => 'id'}];
-        local $sb->{order_by} = [map {($_->{ALIAS} and $_->{ALIAS} ne "main") ? {%{$_}, FIELD => "min(".$_->{FIELD}.")"}: $_} @{$sb->{order_by}}];
+        local $sb->{'order_by'} = [
+            map {
+                ($_->{'ALIAS'}||'') ne "main"
+                ? { %{$_}, FIELD => ((($_->{'ORDER'}||'') =~ /^des/i)?'MAX':'MIN') ."(".$_->{FIELD}.")" }
+                : $_
+            }
+            @{$sb->{'order_by'}}
+        ];
         my $group = $sb->_GroupClause;
         my $order = $sb->_OrderClause;
         $$statementref = "SELECT main.* FROM ( SELECT main.id FROM $$statementref $group $order ) distinctquery, $table main WHERE (main.id = distinctquery.id)";

Modified: branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/SQLite.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/SQLite.pm?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/SQLite.pm (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/SQLite.pm Tue Apr  1 14:49:53 2008
@@ -76,6 +76,27 @@
     return undef;
 }
 
+sub DistinctQuery {
+    my $self = shift;
+    my $statementref = shift;
+    my $sb = shift;
+
+    return $self->SUPER::DistinctQuery( $statementref, $sb, @_ )
+        if $sb->_GroupClause || $sb->_OrderClause !~ /(?<!main)\./;
+
+    local $sb->{'group_by'} = [{FIELD => 'id'}];
+    local $sb->{'order_by'} = [
+        map {
+            ($_->{'ALIAS'}||'') ne "main"
+            ? { %{$_}, FIELD => ((($_->{'ORDER'}||'') =~ /^des/i)?'MAX':'MIN') ."(".$_->{FIELD}.")" }
+            : $_
+        }
+        @{$sb->{'order_by'}}
+    ];
+    $$statementref = "SELECT main.* FROM $$statementref";
+    $$statementref .= $sb->_GroupClause;
+    $$statementref .= $sb->_OrderClause;
+}
 
 =head2 DistinctCount STATEMENTREF
 
@@ -88,10 +109,7 @@
     my $self = shift;
     my $statementref = shift;
 
-    # Wrapper select query in a subselect as Oracle doesn't allow
-    # DISTINCT against CLOB/BLOB column types.
     $$statementref = "SELECT count(*) FROM (SELECT DISTINCT main.id FROM $$statementref )";
-
 }
 
 

Modified: branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/mysql.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/mysql.pm?rev=18244&op=diff
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/mysql.pm (original)
+++ branches/upstream/libdbix-searchbuilder-perl/current/SearchBuilder/Handle/mysql.pm Tue Apr  1 14:49:53 2008
@@ -76,6 +76,50 @@
     return(undef);
 }
 
+sub DistinctQuery {
+    my $self = shift;
+    my $statementref = shift;
+    my $sb = shift;
+
+    return $self->SUPER::DistinctQuery( $statementref, $sb, @_ )
+        if $sb->_GroupClause || $sb->_OrderClause !~ /(?<!main)\./;
+
+    if ( substr($self->DatabaseVersion, 1) == 4 ) {
+        local $sb->{'group_by'} = [{FIELD => 'id'}];
+
+        my ($idx, @tmp, @specials) = (0, ());
+        foreach ( @{$sb->{'order_by'}} ) {
+            if ( !exists $_->{'ALIAS'} || ($_->{'ALIAS'}||'') eq "main" ) {
+                push @tmp, $_; next;
+            }
+
+            push @specials,
+                ((($_->{'ORDER'}||'') =~ /^des/i)?'MAX':'MIN')
+                ."(". $_->{'ALIAS'} .".". $_->{'FIELD'} .")"
+                ." __special_sort_$idx";
+            push @tmp, { ALIAS => '', FIELD => "__special_sort_$idx", ORDER => $_->{'ORDER'} };
+            $idx++;
+        }
+
+        local $sb->{'order_by'} = \@tmp;
+        $$statementref = "SELECT ". join( ", ", 'main.*', @specials ) ." FROM $$statementref";
+        $$statementref .= $sb->_GroupClause;
+        $$statementref .= $sb->_OrderClause;
+    } else {
+        local $sb->{'group_by'} = [{FIELD => 'id'}];
+        local $sb->{'order_by'} = [
+            map {
+                ($_->{'ALIAS'}||'') ne "main"
+                ? { %{$_}, FIELD => ((($_->{'ORDER'}||'') =~ /^des/i)?'MAX':'MIN') ."(".$_->{FIELD}.")" }
+                : $_
+            }
+            @{$sb->{'order_by'}}
+        ];
+        $$statementref = "SELECT main.* FROM $$statementref";
+        $$statementref .= $sb->_GroupClause;
+        $$statementref .= $sb->_OrderClause;
+    }
+}
 
 1;
 

Added: branches/upstream/libdbix-searchbuilder-perl/current/t/02order_outer.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdbix-searchbuilder-perl/current/t/02order_outer.t?rev=18244&op=file
==============================================================================
--- branches/upstream/libdbix-searchbuilder-perl/current/t/02order_outer.t (added)
+++ branches/upstream/libdbix-searchbuilder-perl/current/t/02order_outer.t Tue Apr  1 14:49:53 2008
@@ -1,0 +1,262 @@
+#!/usr/bin/perl -w
+
+
+use strict;
+use warnings;
+use Test::More;
+BEGIN { require "t/utils.pl" }
+our (@AvailableDrivers);
+
+use constant TESTS_PER_DRIVER => 96;
+
+my $total = scalar(@AvailableDrivers) * TESTS_PER_DRIVER;
+plan tests => $total;
+
+foreach my $d ( @AvailableDrivers ) {
+SKIP: {
+	unless( has_schema( 'TestApp', $d ) ) {
+		skip "No schema for '$d' driver", TESTS_PER_DRIVER;
+	}
+	unless( should_test( $d ) ) {
+		skip "ENV is not defined for driver '$d'", TESTS_PER_DRIVER;
+	}
+
+	my $handle = get_handle( $d );
+	connect_handle( $handle );
+	isa_ok($handle->dbh, 'DBI::db');
+
+	my $ret = init_schema( 'TestApp', $handle );
+	isa_ok($ret,'DBI::st', "Inserted the schema. got a statement handle back");
+
+    my $lowest = $d ne 'Pg'? '-': 'z';
+
+diag "generate data" if $ENV{TEST_VERBOSE};
+{
+    my @tags = qw(a b c d);
+    foreach my $i ( 1..30 ) {
+        my $number_of_tags = int(rand(4));
+        my @t;
+        push @t, $tags[int rand scalar @tags] while $number_of_tags--;
+        my %seen = ();
+        @t = grep !$seen{$_}++, @t;
+
+        my $obj = TestApp::Object->new($handle);
+        my ($oid) = $obj->Create( Name => join(",", sort @t) || $lowest );
+        ok($oid,"Created record ". $oid);
+        ok($obj->Load($oid), "Loaded the record");
+
+        my $tags_ok = 1;
+        foreach my $t( @t ) {
+            my $tag = TestApp::Tag->new($handle);
+            my ($tid) = $tag->Create( Object => $oid, Name => $t );
+            $tags_ok = 0 unless $tid;
+        }
+        ok($tags_ok, "Added tags");
+    }
+}
+
+# test ASC order
+{
+    my $objs = TestApp::Objects->new($handle);
+    $objs->UnLimit;
+    my $tags_alias = $objs->Join(
+        TYPE   => 'LEFT',
+        ALIAS1 => 'main',
+        FIELD1 => 'id',
+        TABLE2 => 'Tags',
+        FIELD2 => 'Object',
+    );
+    ok($tags_alias, "joined tags table");
+    $objs->OrderBy( ALIAS => $tags_alias, FIELD => 'Name', ORDER => 'ASC' );
+    my ($order_ok, $last) = (1, '-');
+    while ( my $obj = $objs->Next ) {
+        if ( (substr($last, 0, 1) cmp substr($obj->Name, 0, 1)) > 0 ) {
+            $order_ok = 0; last;
+        }
+        $last = $obj->Name;
+    }
+    ok($order_ok, "order is correct") or diag "Wrong query: ". $objs->BuildSelectQuery;
+}
+
+# test DESC order
+{
+    my $objs = TestApp::Objects->new($handle);
+    $objs->UnLimit;
+    my $tags_alias = $objs->Join(
+        TYPE   => 'LEFT',
+        ALIAS1 => 'main',
+        FIELD1 => 'id',
+        TABLE2 => 'Tags',
+        FIELD2 => 'Object',
+    );
+    ok($tags_alias, "joined tags table");
+    $objs->OrderBy( ALIAS => $tags_alias, FIELD => 'Name', ORDER => 'DESC' );
+    my ($order_ok, $last) = (1, 'z');
+    while ( my $obj = $objs->Next ) {
+        if ( (substr($last, -1, 1) cmp substr($obj->Name, -1, 1)) < 0 ) {
+            $order_ok = 0; last;
+        }
+        $last = $obj->Name;
+    }
+    ok($order_ok, "order is correct") or do {
+        diag "Wrong query: ". $objs->BuildSelectQuery;
+        $objs->GotoFirstItem;
+        while ( my $obj = $objs->Next ) {
+            diag($obj->id .":". $obj->Name);
+        }
+    }
+}
+
+	cleanup_schema( 'TestApp', $handle );
+}} # SKIP, foreach blocks
+
+1;
+
+package TestApp;
+
+sub schema_mysql { [
+    "CREATE TEMPORARY TABLE Objects (
+        id integer AUTO_INCREMENT,
+        Name varchar(36),
+      	PRIMARY KEY (id)
+    )",
+    "CREATE TEMPORARY TABLE Tags (
+        id integer AUTO_INCREMENT,
+        Object integer NOT NULL,
+        Name varchar(36),
+      	PRIMARY KEY (id)
+    )",
+] }
+
+sub schema_pg { [
+    "CREATE TEMPORARY TABLE Objects (
+        id serial PRIMARY KEY,
+        Name varchar(36)
+    )",
+    "CREATE TEMPORARY TABLE Tags (
+        id serial PRIMARY KEY,
+        Object integer NOT NULL,
+        Name varchar(36)
+    )",
+]}
+
+sub schema_sqlite {[
+    "CREATE TABLE Objects (
+        id integer primary key,
+        Name varchar(36)
+    )",
+    "CREATE TABLE Tags (
+        id integer primary key,
+        Object integer NOT NULL,
+        Name varchar(36)
+    )",
+]}
+
+sub schema_oracle { [
+    "CREATE SEQUENCE Objects_seq",
+    "CREATE TABLE Objects (
+        id integer CONSTRAINT Objects_Key PRIMARY KEY,
+        Name varchar(36)
+    )",
+    "CREATE SEQUENCE Tags_seq",
+    "CREATE TABLE Tags (
+        id integer CONSTRAINT Tags_Key PRIMARY KEY,
+        Object integer NOT NULL,
+        Name varchar(36)
+    )",
+] }
+
+sub cleanup_schema_oracle { [
+    "DROP SEQUENCE Users_seq",
+    "DROP TABLE Users", 
+] }
+
+
+1;
+
+package TestApp::Object;
+
+use base $ENV{SB_TEST_CACHABLE}?
+    qw/DBIx::SearchBuilder::Record::Cachable/:
+    qw/DBIx::SearchBuilder::Record/;
+
+sub _Init {
+    my $self = shift;
+    my $handle = shift;
+    $self->Table('Objects');
+    $self->_Handle($handle);
+}
+
+sub _ClassAccessible {
+    {   
+        id =>
+        {read => 1, type => 'int(11)' }, 
+        Name =>
+        {read => 1, write => 1, type => 'varchar(36)' },
+    }
+}
+
+1;
+
+package TestApp::Objects;
+use base qw/DBIx::SearchBuilder/;
+
+sub _Init {
+    my $self = shift;
+    $self->SUPER::_Init( Handle => shift );
+    $self->Table('Objects');
+}
+
+sub NewItem
+{
+	my $self = shift;
+	return TestApp::Object->new( $self->_Handle );
+}
+
+1;
+
+package TestApp::Tag;
+
+use base $ENV{SB_TEST_CACHABLE}?
+    qw/DBIx::SearchBuilder::Record::Cachable/:
+    qw/DBIx::SearchBuilder::Record/;
+
+sub _Init {
+    my $self = shift;
+    my $handle = shift;
+    $self->Table('Tags');
+    $self->_Handle($handle);
+}
+
+sub _ClassAccessible {
+    {   
+        id =>
+        {read => 1, type => 'int(11)' },
+        Object =>
+        {read => 1, type => 'int(11)' },
+        Value =>
+        {read => 1, write => 1, type => 'varchar(36)' },
+    }
+}
+
+1;
+
+package TestApp::Tags;
+
+# use TestApp::User;
+use base qw/DBIx::SearchBuilder/;
+
+sub _Init {
+    my $self = shift;
+    $self->SUPER::_Init( Handle => shift );
+    $self->Table('Tags');
+}
+
+sub NewItem
+{
+	my $self = shift;
+	return TestApp::Tag->new( $self->_Handle );
+}
+
+1;
+




More information about the Pkg-perl-cvs-commits mailing list