-#!/usr/bin/perl
-# BEGIN LICENSE BLOCK
-#
-# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-#
-# (Except where explictly superceded by other copyright notices)
-#
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+# <sales@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# Unless otherwise specified, all modifications, corrections or
-# extensions to this work which alter its source code become the
-# property of Best Practical Solutions, LLC when submitted for
-# inclusion in the work.
-#
-#
-# END LICENSE BLOCK
-
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
use DBI;
+die "Usage: $0 database namespace" if @ARGV != 2;
+
my $database = shift;
my $namespace = shift;
my $LicenseBlock = << '.';
-# BEGIN LICENSE BLOCK
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
+# <jesse@bestpractical.com>
#
-# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+# (Except where explicitly superseded by other copyright notices)
#
-# (Except where explictly superceded by other copyright notices)
+#
+# LICENSE:
#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
-# Unless otherwise specified, all modifications, corrections or
-# extensions to this work which alter its source code become the
-# property of Best Practical Solutions, LLC when submitted for
-# inclusion in the work.
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
#
#
-# END LICENSE BLOCK
-
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
.
my $Attribution = << '.';
+
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
my $dbh = DBI->connect( $dsn, $user, $password );
#get all tables out of database
-my @tables = $dbh->tables();
+my @tables = map { s/^\`\Q$database\E\`\.//; $_ } $dbh->tables();
my ( %tablemap, $typemap, %modulemap );
foreach my $table (@tables) {
+ $table =~ s/\`//g;
next if ($table eq 'sessions');
+ $table = ucfirst($table);
+ $table =~ s/field/Field/;
+ $table =~ s/group/Group/;
+ $table =~ s/custom/Custom/;
+ $table =~ s/member/Member/;
+ $table =~ s/Scripaction/ScripAction/g;
+ $table =~ s/condition/Condition/g;
+ $table =~ s/value/Value/;
+ $table =~ s/Acl/ACL/g;
$tablemap{$table} = $table;
$modulemap{$table} = $table;
if ( $table =~ /^(.*)s$/ ) {
$tablemap{'CreatedBy'} = 'User';
$tablemap{'UpdatedBy'} = 'User';
+my %typemap;
$typemap{'id'} = 'ro';
$typemap{'Creator'} = 'auto';
$typemap{'Created'} = 'auto';
my $ClassAccessible = "";
my $FieldsPod = "";
my $CreatePod = "";
+ my $RecordInit = "";
my %fields;
+
+
+ my $introspection = $dbh->prepare("SELECT * from $table where id is null");
+ $introspection->execute();
+ my @names =@{ $introspection->{'NAME'}};
+ my @types = @{$introspection->{'TYPE'}};
+ my @is_blob = @{$introspection->{'mysql_is_blob'}};
+ my @is_num = @{$introspection->{'mysql_is_num'}};
+
+ my %blobness = ();
+ my %sqltypes = ();
+ my %numeric = ();
+ foreach my $name (@names) {
+ $sqltypes{$name} = shift @types;
+ $blobness{$name} = (shift @is_blob || "0");
+ $numeric{$name} = (shift @is_num || "0");
+ }
+
+
my $sth = $dbh->prepare("DESCRIBE $table");
$sth->execute;
my $field = $row->{'Field'};
my $type = $row->{'Type'};
my $default = $row->{'Default'};
+ my $length = 0;
+ if ($type =~ /^(?:.*?)\((\d+)\)$/) {
+ $length = $1;
+ }
$fields{$field} = 1;
#generate the 'accessible' datastructure
+ no warnings 'uninitialized';
+
if ( $typemap{$field} eq 'auto' ) {
$ClassAccessible .= " $field =>
{read => 1, auto => 1,";
{read => 1, write => 1,";
}
-
+ $ClassAccessible .= " sql_type => $sqltypes{$field}, length => $length, is_blob => $blobness{$field}, is_numeric => $numeric{$field}, ";
$ClassAccessible .= " type => '$type', default => '$default'},\n";
#generate pod for the accessible fields
";
- unless ( $typemap{$field} eq 'auto' || $typemap{$field} eq 'ro' ) {
+ unless ( exists $typemap{$field} && ( $typemap{$field} eq 'auto' || $typemap{$field} eq 'ro' )) {
$FieldsPod .= "
=head2 Set$field VALUE
}
- $Create = "
+ my $Create = "
sub Create {
my \$self = shift;
my \%args = (
$CollectionClass .= "
- # By default, order by name
- \$self->OrderBy( ALIAS => 'main',
- FIELD => 'SortOrder',
- ORDER => 'ASC');
+ # By default, order by SortOrder
+ \$self->OrderByCols(
+ { ALIAS => 'main',
+ FIELD => 'SortOrder',
+ ORDER => 'ASC' },
+ { ALIAS => 'main',
+ FIELD => 'id',
+ ORDER => 'ASC' },
+ );
";
}
$CollectionClass .= "
$FieldsPod
-sub _ClassAccessible {
+sub _CoreAccessible {
{
$ClassAccessible
print "About to make $RecordClassPath, $CollectionClassPath\n";
`mkdir -p $path`;
- open( RECORD, ">$RecordClassPath" );
+ open( RECORD, '>', $RecordClassPath ) or die $!;
print RECORD $RecordClass;
close(RECORD);
- open( COL, ">$CollectionClassPath" );
+ open( COL, '>', $CollectionClassPath ) or die $!;
print COL $CollectionClass;
- close($COL);
+ close(COL);
}
These overlay files can contain new subs or subs to replace existing subs in this module.
-If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
+Each of these files should begin with the line
no warnings qw(redefine);