diff options
author | Oliver Tappe | 2006-08-16 15:06:25 +0200 |
---|---|---|
committer | Oliver Tappe | 2006-08-16 15:06:25 +0200 |
commit | ab88dd0ca8a52782931439387c5e43316cd772c6 (patch) | |
tree | 65241b62f0c282ef5b9787a051b881a0bf0257f4 /config-db/ODLX/MetaDB/DBI.pm | |
parent | * fixed bug with automatic ID-creation not working as it should (diff) | |
download | core-ab88dd0ca8a52782931439387c5e43316cd772c6.tar.gz core-ab88dd0ca8a52782931439387c5e43316cd772c6.tar.xz core-ab88dd0ca8a52782931439387c5e43316cd772c6.zip |
* added all vendor_os-related functions to DB-interface and
-implementation
* more cleanup
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@305 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'config-db/ODLX/MetaDB/DBI.pm')
-rw-r--r-- | config-db/ODLX/MetaDB/DBI.pm | 127 |
1 files changed, 109 insertions, 18 deletions
diff --git a/config-db/ODLX/MetaDB/DBI.pm b/config-db/ODLX/MetaDB/DBI.pm index 776285cb..a2f101d6 100644 --- a/config-db/ODLX/MetaDB/DBI.pm +++ b/config-db/ODLX/MetaDB/DBI.pm @@ -82,6 +82,31 @@ sub _doSelect return @vals; } +sub fetchVendorOSesByFilter +{ + my $self = shift; + my $filter = shift; + my $resultCols = shift; + + $resultCols = '*' unless (defined $resultCols); + my $sql = "SELECT $resultCols FROM vendor_os"; + my $connector; + foreach my $col (keys %$filter) { + $connector = !defined $connector ? 'WHERE' : 'AND'; + $sql .= " $connector $col = '$filter->{$col}'"; + } + return $self->_doSelect($sql); +} + +sub fetchVendorOSesById +{ + my $self = shift; + my $id = shift; + my $resultCols = shift; + + return $self->fetchVendorOSesByFilter({'id' => $id}, $resultCols); +} + sub fetchSystemsByFilter { my $self = shift; @@ -95,8 +120,7 @@ sub fetchSystemsByFilter $connector = !defined $connector ? 'WHERE' : 'AND'; $sql .= " $connector $col = '$filter->{$col}'"; } - my @rows = $self->_doSelect($sql); - return @rows; + return $self->_doSelect($sql); } sub fetchSystemsById @@ -108,6 +132,17 @@ sub fetchSystemsById return $self->fetchSystemsByFilter({'id' => $id}, $resultCols); } +sub fetchAllSystemIDsOfVendorOS +{ + my $self = shift; + my $vendorOSID = shift; + + my $sql = qq[ + SELECT id FROM system WHERE vendor_os_id = '$vendorOSID' + ]; + return $self->_doSelect($sql, 'id'); +} + sub fetchAllSystemIDsOfClient { my $self = shift; @@ -116,8 +151,7 @@ sub fetchAllSystemIDsOfClient my $sql = qq[ SELECT system_id FROM client_system_ref WHERE client_id = '$clientID' ]; - my @rows = $self->_doSelect($sql, 'system_id'); - return @rows; + return $self->_doSelect($sql, 'system_id'); } sub fetchAllSystemIDsOfGroup @@ -128,8 +162,7 @@ sub fetchAllSystemIDsOfGroup my $sql = qq[ SELECT system_id FROM group_system_ref WHERE group_id = '$groupID' ]; - my @rows = $self->_doSelect($sql, 'system_id'); - return @rows; + return $self->_doSelect($sql, 'system_id'); } sub fetchClientsByFilter @@ -145,8 +178,7 @@ sub fetchClientsByFilter $connector = !defined $connector ? 'WHERE' : 'AND'; $sql .= " $connector $col = '$filter->{$col}'"; } - my @rows = $self->_doSelect($sql); - return @rows; + return $self->_doSelect($sql); } sub fetchClientsById @@ -166,8 +198,7 @@ sub fetchAllClientIDsOfSystem my $sql = qq[ SELECT client_id FROM client_system_ref WHERE system_id = '$systemID' ]; - my @rows = $self->_doSelect($sql, 'system_id'); - return @rows; + return $self->_doSelect($sql, 'system_id'); } sub fetchAllClientIDsOfGroup @@ -178,8 +209,7 @@ sub fetchAllClientIDsOfGroup my $sql = qq[ SELECT client_id FROM group_client_ref WHERE group_id = '$groupID' ]; - my @rows = $self->_doSelect($sql, 'system_id'); - return @rows; + return $self->_doSelect($sql, 'system_id'); } sub fetchGroupsByFilter @@ -195,8 +225,7 @@ sub fetchGroupsByFilter $connector = !defined $connector ? 'WHERE' : 'AND'; $sql .= " $connector $col = '$filter->{$col}'"; } - my @rows = $self->_doSelect($sql); - return @rows; + return $self->_doSelect($sql); } sub fetchGroupsById @@ -216,8 +245,7 @@ sub fetchAllGroupIDsOfSystem my $sql = qq[ SELECT group_id FROM group_system_ref WHERE system_id = '$systemID' ]; - my @rows = $self->_doSelect($sql, 'group_id'); - return @rows; + return $self->_doSelect($sql, 'group_id'); } sub fetchAllGroupIDsOfClient @@ -228,8 +256,7 @@ sub fetchAllGroupIDsOfClient my $sql = qq[ SELECT group_id FROM group_client_ref WHERE client_id = '$clientID' ]; - my @rows = $self->_doSelect($sql, 'group_id'); - return @rows; + return $self->_doSelect($sql, 'group_id'); } ################################################################################ @@ -386,6 +413,70 @@ sub _updateRefTable } } +sub _updateOneToManyRefAttr +{ + my $self = shift; + my $table = shift; + my $oneID = shift; + my $newManyIDs = shift; + my $fkCol = shift; + my $oldManyIDs = shift; + + my %lastManyIDs; + @lastManyIDs{@$oldManyIDs} = (); + + foreach my $id (@$newManyIDs) { + if (!exists $lastManyIDs{$id}) { + # ID has changed, update it + $self->_doUpdate($table, $id, [{ $fkCol => $oneID }]); + } else { + # ID hasn't changed, leave as is, but remove from hash: + delete $lastManyIDs{$id}; + } + } + + # all the remaining many-IDs need to be set to 0: + foreach my $id (scalar keys %lastManyIDs) { + $self->_doUpdate($table, $id, [{ $fkCol => '0' }]); + } +} + +sub addVendorOS +{ + my $self = shift; + my $valRows = shift; + + return $self->_doInsert('vendor_os', $valRows); +} + +sub removeVendorOS +{ + my $self = shift; + my $vendorOSIDs = shift; + + return $self->_doDelete('vendor_os', $vendorOSIDs); +} + +sub changeVendorOS +{ + my $self = shift; + my $vendorOSIDs = shift; + my $valRows = shift; + + return $self->_doUpdate('vendor_os', $vendorOSIDs, $valRows); +} + +sub setSystemIDsOfVendorOS +{ + my $self = shift; + my $vendorOSID = shift; + my $systemIDs = shift; + + my @currSystems = $self->fetchAllSystemsOfVendorOS($vendorOSID); + $self->_updateOneToManyRefAttr('system', $vendorOSID, $systemIDs, + 'vendor_os_id', \@currSystems); +} + sub addSystem { my $self = shift; |