/[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.2 - (show annotations)
Thu Oct 17 00:10:05 2002 UTC (21 years, 8 months ago) by joko
Branch: MAIN
Changes since 1.1: +50 -11 lines
+ removed dependency from tsobj.pm, schema is now independent
+ sub getNewPerlObjectByPkgName
+ sub deploySchema
+ sub retreatSchema

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

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