X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FTurnkey.pm;h=5590c1cbb84b2dcdd34b2d77fa90c0a9290726ad;hb=79989cde68468ddfa0d28a0b205874a5d4cce405;hp=34c35354f0b9a832a3e7b09321fb72421ed4a8f0;hpb=83a42239747224210b405df64976ebc156c23bc1;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/Turnkey.pm b/lib/SQL/Translator/Producer/Turnkey.pm index 34c3535..5590c1c 100644 --- a/lib/SQL/Translator/Producer/Turnkey.pm +++ b/lib/SQL/Translator/Producer/Turnkey.pm @@ -1,7 +1,7 @@ package SQL::Translator::Producer::Turnkey; # ------------------------------------------------------------------- -# $Id: Turnkey.pm,v 1.32 2004-04-03 03:50:05 allenday Exp $ +# $Id: Turnkey.pm,v 1.50 2004-04-25 10:13:31 boconnor Exp $ # ------------------------------------------------------------------- # Copyright (C) 2002-4 SQLFairy Authors # @@ -22,7 +22,7 @@ package SQL::Translator::Producer::Turnkey; use strict; use vars qw[ $VERSION $DEBUG ]; -$VERSION = sprintf "%d.%02d", q$Revision: 1.32 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.50 $ =~ /(\d+)\.(\d+)/; $DEBUG = 1 unless defined $DEBUG; use SQL::Translator::Schema::Constants; @@ -30,6 +30,7 @@ use SQL::Translator::Schema::Graph; use SQL::Translator::Schema::Graph::HyperEdge; use Log::Log4perl; Log::Log4perl::init('/etc/log4perl.conf'); use Data::Dumper; +$Data::Dumper::Maxdepth = 3; use Template; my %producer2dsn = ( @@ -76,6 +77,7 @@ sub produce { # # create methods # + # this code needs to move to Graph.pm foreach my $node_from ($graph->node_values){ next unless $node_from->table->is_data or !$node_from->table->is_trivial_link; @@ -136,6 +138,7 @@ sub produce { $i++; } } +#warn Dumper($hyperedge) if $hyperedge->type eq 'many2many'; $node_from->push_hyperedges($hyperedge); } } @@ -200,7 +203,7 @@ L. =head1 AUTHORS Allen Day Eallenday@ucla.eduE -Brian O\'Connor Ebrian.oconnor@excite.comE. +Brian O\'Connor Eboconnor@ucla.comE. =cut @@ -212,7 +215,7 @@ sub template { ########################################### if($type eq 'dbi'){ - return <has_a([% edge.thisfield.name %] => '[% edge.thatnode.name %]'); [% IF node.has(edge.thatnode.name) < 2 %] @@ -255,18 +256,19 @@ sub [% edge.thatnode.table.name %] { return shift->[% edge.thisfield.name %] } [% ELSE %] sub [% format_fk(edge.thisnode.table.name,edge.thisfield.name) %] { return shift->[% edge.thisfield.name %] } [% END %] - [% END %] [% END %] [% END %] [% MACRO printHasMany(edges, node) BLOCK %] +[% FOREACH edge = edges %] +[% IF loop.first() %] # # Has Many # -[% FOREACH edge = edges %] +[% END %] [% IF edge.type == 'export' %] [% node.name %]->has_many('[% edge.thatnode.table.name %]_[% edge.thatfield.name %]', '[% edge.thatnode.name %]' => '[% edge.thatfield.name %]'); [% IF node.via(edge.thatnode.name) >= 1 %] @@ -283,65 +285,76 @@ sub [% edge.thatnode.table.name %]s { return shift->[% edge.thatnode.table.name [% END %] [% END %] - [% MACRO printHasCompound(cedges,hedges,name) BLOCK %] +[% FOREACH cedge = cedges %] +[% IF loop.first() %] # # Has Compound Many # -[% FOREACH cedge = cedges %] +[% END %] [% FOREACH edge = cedge.edges %] [% NEXT IF edge.thisnode.name != name %] sub [% cedge.via.table.name %]_[% format_fk(edge.thatnode.table.name,edge.thatfield.name) %]s { return shift->[% cedge.via.table.name %]_[% edge.thatfield.name %] } [% END %] [% END %] +[% seen = 0 %] [% FOREACH h = hedges %] -########## [% h.type %] ########## - [% IF h.type == 'one2one' %] -sub [% h.thatnode.table.name %]s { my \$self = shift; return map \$_->[% h.thatviafield.name %], \$self->[% h.vianode.table.name %]_[% h.thisviafield.name %] } + [% NEXT UNLESS h.type == 'one2one' %] +[% IF seen == 0 ; seen = 1 %]########## one2one ###########[% END %] +sub [% h.thatnode.table.name %]s { my $self = shift; return map $_->[% h.thatviafield.name %], $self->[% h.vianode.table.name %]_[% h.thisviafield.name %] } +[% END %] - [% ELSIF h.type == 'one2many' %] - [% thisnode = h.thisnode_index(0) %] - [% i = 0 %] - [% FOREACH thatnode = h.thatnode %] +[% seen = 0 %] +[% FOREACH h = hedges %] + [% NEXT UNLESS h.type == 'one2many' %] +[% IF seen == 0 ; seen = 1 %]########## one2many ##########[% END %] + [% thisnode = h.thisnode_index(0) %] + [% i = 0 %] + [% FOREACH thatnode = h.thatnode %] + [% NEXT UNLESS h.thisviafield_index(i).name %] #[% thisnode.name %]::[% h.thisfield_index(0).name %] -> [% h.vianode.name %]::[% h.thisviafield_index(i).name %] ... [% h.vianode.name %]::[% h.thatviafield_index(0).name %] <- [% h.thatnode_index(0).name %]::[% h.thatfield_index(0).name %] -sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thatviafield_index(0).name) %]s { my \$self = shift; return map \$_->[% h.thatviafield_index(0).name %], \$self->[% h.vianode.table.name %]_[% h.thisviafield_index(i).name %] } - [% i = i + 1 %] - [% END %] +sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thatviafield_index(0).name) %]s { my $self = shift; return map $_->[% h.thatviafield_index(0).name %], $self->[% h.vianode.table.name %]_[% h.thisviafield_index(i).name %] } + [% i = i + 1 %] + [% END %] +[% END %] - [% ELSIF h.type == 'many2one' %] - [% i = 0 %] - [% FOREACH thisnode = h.thisnode %] +[% seen = 0 %] +[% FOREACH h = hedges %] + [% NEXT UNLESS h.type == 'many2one' %] +[% IF seen == 0 ; seen = 1 %]########## many2one ##########[% END %] + [% i = 0 %] + [% FOREACH thisnode = h.thisnode %] #[% thisnode.name %]::[% h.thisfield_index(0).name %] -> [% h.vianode.name %]::[% h.thisviafield_index(i).name %] ... [% h.vianode.name %]::[% h.thatviafield_index(0).name %] <- [% h.thatnode_index(0).name %]::[% h.thatfield_index(0).name %] -sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thisviafield_index(i).name) %]_[% format_fk(h.vianode,h.thatviafield_index(0).name) %]s { my \$self = shift; return map \$_->[% h.thatviafield_index(0).name %], \$self->[% h.vianode.table.name %]_[% h.thisviafield_index(i).name %] } - [% i = i + 1 %] - - [% END %] +sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thisviafield_index(i).name) %]_[% format_fk(h.vianode,h.thatviafield_index(0).name) %]s { my $self = shift; return map $_->[% h.thatviafield_index(0).name %], $self->[% h.vianode.table.name %]_[% h.thisviafield_index(i).name %] } + [% i = i + 1 %] + [% END %] +[% END %] - [% ELSIF h.type == 'many2many' %] - [% i = 0 %] - [% FOREACH thisnode = h.thisnode %] - [% j = 0 %] - [% FOREACH thatnode = h.thatnode %] +[% seen = 0 %] +[% FOREACH h = hedges %] + [% NEXT UNLESS h.type == 'many2many' %] +[% IF seen == 0 ; seen = 1 %]########## many2many #########[% END %] + [% i = 0 %] + [% FOREACH thisnode = h.thisnode %] + [% j = 0 %] + [% FOREACH thatnode = h.thatnode %] #[% thisnode.name %]::[% h.thisfield_index(i).name %] -> [% h.vianode.name %]::[% h.thisviafield_index(i).name %] ... [% h.vianode.name %]::[% h.thatviafield_index(j).name %] <- [% h.thatnode_index(j).name %]::[% h.thatfield_index(j).name %] -sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thisviafield_index(i).name) %]_[% format_fk(h.vianode,h.thatviafield_index(j).name) %]s { my \$self = shift; return map \$_->[% %], \$self->[% %] } - [% j = j + 1 %] - - [% END %] - [% i = i + 1 %] +sub [% h.vianode.table.name %]_[% format_fk(h.vianode,h.thisviafield_index(i).name) %]_[% format_fk(h.vianode,h.thatviafield_index(j).name) %]s { my $self = shift; return map $_->[% h.vianode.table.name %]_[% format_fk(h.vianode,h.thatviafield_index(j).name) %]s, $self->[% h.vianode.table.name %]_[% format_fk(h.vianode,h.thisviafield_index(i).name) %]s } + [% j = j + 1 %] [% END %] + [% i = i + 1 %] [% END %] [% END %] [% END %] - [% MACRO printHasFriendly(node) BLOCK %] # # Has Friendly # +#FIXME, why aren't these being generated? [% END %] - [% MACRO printList(array) BLOCK %][% FOREACH item = array %][% item %] [% END %][% END %] package [% baseclass %]; @@ -349,13 +362,34 @@ package [% baseclass %]; # Template used: classdbi use strict; +use Data::Dumper; no warnings 'redefine'; use base qw(Class::DBI::Pg); -[% baseclass %]->set_db('Main', '[% db_dsn %]', '[% db_user %]', '[% db_pass %]', {AutoCommit=>1}); +[% baseclass %]->set_db('Main', '[% db_dsn %]', '[% db_user %]', '[% db_pass %]'); sub search_ilike { shift->_do_search(ILIKE => [% "\@\_" %] ) } +sub search_lower { + my $c = shift; + my %q = @_; + my %t; + foreach my $k (keys %q){ + $t{"lower($k)"} = lc($q{$k}); + } + $c->_do_search(LIKE => %t); +} +# debug method +sub dump { + my $self = shift; + my %arg = %{shift @_}; + $arg{'indent'} ||= 1; + $arg{'depth'} ||= 3; + $Data::Dumper::Maxdepth = $arg{'depth'} if defined $arg{'depth'}; + $Data::Dumper::Indent = $arg{'indent'} if defined $arg{'indent'}; + return(Dumper($arg{'object'})); +} + [% FOREACH node = nodes %] [% printPackage(node.value) %] [% END %] @@ -405,8 +439,8 @@ sub _render_record { #data [% FOREACH value = node.value.data_fields %] - [% IF value != 1 %] - $field_hash->{[% value %]} = $dbobject->[% value %](); + [% IF value != 1 %] + $field_hash->{[% value.key %]} = $dbobject->[% value.key %](); [% END %] [% END %] @@ -433,7 +467,7 @@ sub _render_list { #data [% FOREACH value = node.value.data_fields %] [% IF value != 1 %] - $field_hash->{[% value %]} = $object->[% value %](); + $field_hash->{[% value.key %]} = $object->[% value.key %](); [% END %] [% END %] @@ -460,37 +494,43 @@ sub head { EOF } elsif($type eq 'xml'){ - return < - - - - + + + + [% FOREACH node = nodes %] [% IF !node.value.is_trivial_link %] - + [%- END -%] [% END %] + + + + + + [% FOREACH focus_atom = nodes %] [% IF !focus_atom.value.is_trivial_link %] [% FOREACH link_atom = focus_atom.value.hyperedges %] - + [%- END -%] [% previous = "" %] [% FOREACH link_atom = focus_atom.value.edges %] [% IF link_atom.type == 'export' && previous != link_atom.thatnode.table.name && link_atom.thatnode.table.name != "" %] - + [% previous = link_atom.thatnode.table.name %] [% END %] [%- END %] @@ -501,21 +541,32 @@ EOF [% FOREACH focus_atom = nodes %] [% IF !focus_atom.value.is_trivial_link %] - + [% FOREACH link_atom = focus_atom.value.hyperedges %] - + [%- END%] [% previous = "" %] [% FOREACH link_atom = focus_atom.value.edges %] [% IF link_atom.type == 'export' && previous != link_atom.thatnode.table.name %] - + [% previous = link_atom.thatnode.table.name %] [% END %] [%- END %] - + [%- END %] [% END %] + + + + + + + + + + + @@ -528,6 +579,11 @@ EOF [%- END -%] [% END %] + + + + + @@ -536,39 +592,48 @@ EOF } elsif($type eq 'template'){ return <<'EOF'; [% TAGS [- -] %] -[% MACRO renderpanel(panel,dbobject) BLOCK %] +[% MACRO renderpanel(panel,name,dbobject) BLOCK %] - - [% FOREACH p = panel.containers %] [% IF p.can_render(panel) %] - [% IF panel.orientation == 'vertical' %] - [% END %] [% END %] [% END %] - -
[% IF p.type == 'Container' %] - [% renderpanel(p,dbobject) %] + [% renderpanel(p,name,dbobject) %] [% ELSE %] - - [% IF p.name %] - - - - - [% END %] -
[% p.name %][% IF panel.type == 'major' %]: [% dbobject.name %][% END %]
+ [% IF p.type == 'major' %] +
+ [% IF name %] +
[% name %]
+ [% END %] + + + [% renderatom(name,dbobject,p.containers[0]) %] +
+
+
+ [% ELSIF p.type == 'minor' %] +
+ [% FOREACH atom = p.containers %] +
+ [% IF name %] + [% linkname = ref(p.containers[0]) %] +
[% atom.name | replace('Turnkey::Atom::', '') %]
+ [% END %] - [% renderatom(p,dbobject) %] + [% renderatom(name,dbobject,atom) %]
-
+ + [% END %] + + [% END %] [% END %] -
+ + [% END %] [% BLOCK make_linked_dbobject %] [% PERL %] @@ -587,8 +652,9 @@ EOF [% END %] [% MACRO obj2url(obj) SWITCH obj %] [% CASE DEFAULT %] - /?id=[% obj %];class=[% ref(obj) %] + /[% ref(obj) | replace('.+::','') %]/db/[% obj %] [% END %] + [% MACRO obj2desc(obj) SWITCH ref(obj) %] [% CASE '' %] [% obj %] @@ -599,7 +665,7 @@ EOF [% obj %] [% END %] [% END %] -[% MACRO renderatom(atom, dbobject) SWITCH atom.name %] +[% MACRO renderatom(name, dbobject, atom) SWITCH name %] [- FOREACH node = nodes -] [- IF !node.value.is_trivial_link -] [% CASE '[- format_table(node.key) -]' %] @@ -610,14 +676,14 @@ EOF [% renderlist(atom.render(dbobject)) %] [% END %] [% MACRO renderlist(lstArr) BLOCK %] -
    +
      [% FOREACH item = lstArr %] [% class = ref(atom) | replace('::Atom::', '::Model::') %] [% id = item.id %] [% PROCESS make_linked_dbobject %]
    • [% obj2link(linked_dbobject) %]
    • [% END %] -
    +
[% END %] EOF @@ -625,11 +691,15 @@ EOF return <<'EOF'; [%- TAGS [- -] -%] [-- IF !node.is_trivial_link --] +[% records = atom.render(dbobject) %] [% rowcount = 0 %] [% IF atom.focus == "yes" %] +[% FOREACH record = records %] +[% fields = record.data %] + [- FOREACH field = node.data_fields -] [- IF field != "1" -] - + [- END -] [- END -] [- FOREACH field = node.edges -] @@ -638,15 +708,17 @@ EOF [- END -] [% IF (rowcount > 1) %] [% END %] [% rowcount = rowcount + 1 %] +
[- field -][% obj2link(dbobject.[- field -]) %]
[- field.key -][% obj2link(fields.[- field.key -]) %]

+[% END %] [% ELSE %] -
    +
      [% FOREACH record = atom.render(dbobject) %] [% class = ref(atom) | replace('::Atom::', '::Model::') %] [% id = record.id #needed by make_linked_dbobject macro %] [% PROCESS make_linked_dbobject %]
    • [% obj2link(linked_dbobject) %]
    • [% END %] -
    +
[% END %] [- END -] EOF