/[cvs]/nfo/perl/libs/Data/Storage/Handler/Tangram.pm
ViewVC logotype

Contents of /nfo/perl/libs/Data/Storage/Handler/Tangram.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Thu Oct 17 03:56:55 2002 UTC (21 years, 8 months ago) by joko
Branch: MAIN
Changes since 1.2: +9 -1 lines
+ bugfix: trapped eval error

1 #################################
2 #
3 # $Id: Tangram.pm,v 1.2 2002/10/17 00:10:05 joko Exp $
4 #
5 # $Log: Tangram.pm,v $
6 # Revision 1.2 2002/10/17 00:10:05 joko
7 # + removed dependency from tsobj.pm, schema is now independent
8 # + sub getNewPerlObjectByPkgName
9 # + sub deploySchema
10 # + sub retreatSchema
11 #
12 # Revision 1.1 2002/10/10 03:44:07 cvsjoko
13 # + new
14 #
15 #
16 #################################
17
18 package Data::Storage::Handler::Tangram;
19
20 use strict;
21 use warnings;
22
23 use base ("Data::Storage::Handler::Abstract");
24
25 use Tangram;
26 use Data::Dumper;
27
28 # get logger instance
29 my $logger = Log::Dispatch::Config->instance;
30
31
32 our $metainfo = {
33 'disconnectMethod' => 'disconnect',
34 };
35
36 sub getNewPerlObjectByPkgName {
37 my $pkgname = shift;
38 my $args = shift;
39 $logger->debug( __PACKAGE__ . "->getNewPerlObjectByPkgName( pkgname $pkgname args $args )" );
40 my $evstring = "use $pkgname;";
41 eval($evstring);
42 $@ && $logger->error( __PACKAGE__ . ':' . __LINE__ . " Error in eval: " . $@ );
43 return $pkgname->new($args);
44 }
45
46 sub connect {
47
48 my $self = shift;
49
50 my $dsn = shift;
51 $dsn ||= $self->{dbi}->{dsn};
52
53 $logger->debug( __PACKAGE__ . "->connect( dsn $dsn )" );
54
55 #my $storage = Tangram::Relational->connect( $schema, $dsn );
56 #my $storage = Tangram::mysql->connect( $schema, $dsn );
57 #$storage = Tangram::Relational->connect( Project->schema, $dsn );
58
59 # if (!testDsn($dsn)) {
60 # croak("Database at \"$dsn\" is not available");
61 # return;
62 # }
63
64 my $obj = getNewPerlObjectByPkgName($self->{schema}, { EXPORT_OBJECTS => $self->{classnames} } );
65 $self->{schema_tangram} = $obj->getSchema();
66
67 #$self->{COREHANDLE} = Tangram::Relational->connect( $schema, $dsn );
68 $self->{COREHANDLE} = Tangram::Relational->connect( $self->{schema_tangram}, $dsn );
69
70 #$self->{STORAGEHANDLE_UNDERLYING} = $self->getUnderlyingStorage();
71 #$self->{STORAGEHANDLE_UNDERLYING}->_configureCOREHANDLE();
72 #$self->_configureUnderlyingStorage;
73 $self->configureCOREHANDLE();
74
75 }
76
77 sub getChildNodes {
78
79 my $self = shift;
80 my @nodes;
81
82 # create new DBI - Data::Storage - object from already connected DBI::db - handle inside the current COREHANDLE
83 #my $loc = new Data::Storage::Locator( type => "DBI", dbi => { db => $self->{COREHANDLE}->{db} });
84 #my $loc = new Data::Storage::Locator( type => "DBI", COREHANDLE => $self->{COREHANDLE}->{db} );
85 my $storage = $self->_getSubLayerHandle();
86 #$storage->_configureCOREHANDLE();
87
88 #if (my $result = $self->sendCommand( 'SHOW TABLES;' ) ) {
89 if (my $result = $storage->sendCommand( 'SHOW TABLES;' ) ) {
90 while ( my $row = $result->_getNextEntry() ) {
91 push @nodes, $row;
92 }
93 }
94
95 $storage->disconnect();
96
97 return \@nodes;
98
99 }
100
101
102 sub _getSubLayerHandle {
103
104 my $self = shift;
105
106 use Data::Dumper;
107 #print Dumper($self);
108
109 # hack, make more generic!
110 if (!$self->{STORAGE_SUBLAYER}) {
111 my $loc = Data::Storage::Locator->new( type => "DBI", dbi => $self->{dbi}, COREHANDLE => $self->{COREHANDLE}->{db} );
112 $self->{STORAGE_SUBLAYER} = Data::Storage->new( $loc, { protected => 1 } );
113 #$self->{STORAGE_UNDER_THE_HOOD}->{STORAGEHANDLE}->_configureCOREHANDLE();
114 #$self->{STORAGE_UNDER_THE_HOOD}->_configureCOREHANDLE();
115 }
116
117 #print Dumper($self->{STORAGE_UNDER_THE_HOOD});
118
119 return $self->{STORAGE_SUBLAYER};
120
121 }
122
123 sub _configureUnderlyingStorage {
124
125 my $self = shift;
126 $self->_configureCOREHANDLE_DBI();
127 return;
128
129 foreach my $key (keys %{$self->{dbi}}) {
130 my $val = $self->{dbi}->{$key};
131 print "entry: $key; $val", "\n";
132 $self->{COREHANDLE}->{db}->{$key} = $val;
133 }
134 #print Dumper($self->{COREHANDLE}->{db});
135 }
136
137
138 sub configureCOREHANDLE {
139
140 my $self = shift;
141
142 $logger->debug( __PACKAGE__ . "->_configureCOREHANDLE" );
143
144 #my $subLayer = $self->_getSubLayerHandle();
145
146 # apply configured modifications
147 if (exists $self->{dbi}->{trace_level} && exists $self->{dbi}->{trace_file}) {
148 $self->{COREHANDLE}->{db}->trace($self->{dbi}->{trace_level}, $self->{dbi}->{trace_file});
149 }
150 if (exists $self->{dbi}->{RaiseError}) {
151 $self->{COREHANDLE}->{db}->{RaiseError} = $self->{dbi}->{RaiseError};
152 }
153 if (exists $self->{dbi}->{PrintError}) {
154 $self->{COREHANDLE}->{db}->{PrintError} = $self->{dbi}->{PrintError};
155 }
156 if (exists $self->{dbi}->{HandleError}) {
157 $self->{COREHANDLE}->{db}->{HandleError} = $self->{dbi}->{HandleError};
158 }
159
160 }
161
162 sub deploySchema {
163 my $self = shift;
164 #my $dsn = $self->{locator}->{dbi}->{dsn};
165 my $dsn = $self->{dbi}->{dsn};
166 my $ok;
167 if ( my $dbh = DBI->connect($dsn, '', '', {
168 PrintError => 0,
169 } ) ) {
170 $ok = Tangram::Relational->deploy($self->{schema}, $dbh );
171 $dbh->disconnect();
172 }
173 return $ok;
174 }
175
176 sub retreatSchema {
177 print "retreat\n";
178 my $self = shift;
179 #my $dsn = $self->{locator}->{dbi}->{dsn};
180 my $dsn = $self->{dbi}->{dsn};
181 my $ok;
182 if ( my $dbh = DBI->connect($dsn, '', '', {
183 PrintError => 0,
184 } ) ) {
185 $ok = Tangram::Relational->retreat($self->{schema}, $dbh );
186 $dbh->disconnect();
187 }
188 return $ok;
189 }
190
191 1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed