/[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.2 - (hide 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 cvsjoko 1.1 #################################
2     #
3 joko 1.2 # $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 cvsjoko 1.1 #
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 joko 1.2 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 cvsjoko 1.1 sub connect {
39    
40     my $self = shift;
41    
42     my $dsn = shift;
43     $dsn ||= $self->{dbi}->{dsn};
44    
45 joko 1.2 $logger->debug( __PACKAGE__ . "->connect( dsn $dsn )" );
46 cvsjoko 1.1
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 joko 1.2 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 cvsjoko 1.1
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 joko 1.2 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 cvsjoko 1.1 #$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 joko 1.2 }
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 cvsjoko 1.1 }
182    
183     1;

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