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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide 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 cvsjoko 1.1 #################################
2     #
3 joko 1.3 # $Id: Tangram.pm,v 1.2 2002/10/17 00:10:05 joko Exp $
4 joko 1.2 #
5     # $Log: Tangram.pm,v $
6 joko 1.3 # 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 joko 1.2 # Revision 1.1 2002/10/10 03:44:07 cvsjoko
13     # + new
14 cvsjoko 1.1 #
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 joko 1.2 sub getNewPerlObjectByPkgName {
37     my $pkgname = shift;
38     my $args = shift;
39 joko 1.3 $logger->debug( __PACKAGE__ . "->getNewPerlObjectByPkgName( pkgname $pkgname args $args )" );
40 joko 1.2 my $evstring = "use $pkgname;";
41     eval($evstring);
42 joko 1.3 $@ && $logger->error( __PACKAGE__ . ':' . __LINE__ . " Error in eval: " . $@ );
43 joko 1.2 return $pkgname->new($args);
44     }
45    
46 cvsjoko 1.1 sub connect {
47    
48     my $self = shift;
49    
50     my $dsn = shift;
51     $dsn ||= $self->{dbi}->{dsn};
52    
53 joko 1.2 $logger->debug( __PACKAGE__ . "->connect( dsn $dsn )" );
54 cvsjoko 1.1
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 joko 1.2 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 cvsjoko 1.1
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 joko 1.2 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 cvsjoko 1.1 #$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 joko 1.2 }
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 cvsjoko 1.1 }
190    
191     1;

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