Changeset 1907
- Timestamp:
- 01/03/17 23:34:54 (8 years ago)
- Location:
- trunk/LATMOS-Accounts
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LATMOS-Accounts/bin/la-sql-upgrade.in
r1867 r1907 1136 1136 COST 100; 1137 1137 }, 1138 ], 1139 }, 1140 { 1141 ver => 25, 1142 sql => [ 1143 'ALTER TABLE objects ADD COLUMN oaliascache text', 1138 1144 ], 1139 1145 }, -
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm
r1872 r1907 203 203 return; 204 204 }; 205 $refotype eq $otype or do { 206 $self->log(LA_DEBUG, "Oalias %s (%s): Attribute does not reference same object type", 207 $otype, $oalias, $refotype); 208 return; 209 }; 205 210 my $robj = $self->get_object($aliasotype, $aliasoname) or do { 206 211 $self->log(LA_DEBUG, "Oalias %s (%s): can fetch object %s/%s", -
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm
r1898 r1907 1425 1425 1426 1426 my $stAddAlias = $base->db->prepare_cached( 1427 q{INSERT INTO "user" (name, uidnumber, gidnumber, oalias ) values1428 (?, -nextval('ikey_seq'), ?, ? )}1427 q{INSERT INTO "user" (name, uidnumber, gidnumber, oalias, oaliascache) values 1428 (?, -nextval('ikey_seq'), ?, ?, ?)} 1429 1429 ); 1430 1430 1431 my $res = $stAddAlias->execute($name, -1, $for );1431 my $res = $stAddAlias->execute($name, -1, $for, $base->_derefObject($for)); 1432 1432 return $res ? 1 : 0; 1433 1433 } -
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm
r1906 r1907 164 164 my ($self, $value) = @_; 165 165 $self->object->_update_aliases_ptr(); 166 $self->object->_update_aliases_cache(); 166 167 }, 167 168 checkinput => sub { … … 192 193 return 1; 193 194 }, 195 }, 196 oaliascache => { 197 inline => 1, 198 reference => $class->type, 199 label => 'Cache for oalias data', 200 hide => 1, 194 201 }, 195 202 internobject => { … … 716 723 } 717 724 725 delete($self->base->{__cache}{"_" . $self->type}{$self->id}); 718 726 719 727 foreach my $attr (@updated_attributes) { 720 728 my $oattr = $self->attribute($attr); 721 729 my $ref = $oattr->reference or next; 722 my $attrref = sprintf('oalias=%s.%s.%s', $self->type, $self->id, $attr); 730 my $refname = sprintf('%s.%s.%s', $self->type, $self->id, $attr); 731 my $attrref = "oalias=$refname"; 732 warn "$ref, $refname"; 723 733 foreach my $alias ($self->base->search_objects($ref, $attrref)) { 724 my $olias = $self->base->GetAlias($ref, $alias) or next; 725 $olias->_update_aliases_ptr; 726 } 727 } 728 729 delete($self->base->{__cache}{"_" . $self->type}{$self->id}); 734 my $oalias = $self->base->GetAlias($ref, $alias) or next; 735 warn $oalias; 736 $oalias->_update_aliases_cache; 737 $oalias->_update_aliases_ptr; 738 } 739 } 740 730 741 scalar(@updated_attributes); 731 742 } 743 732 744 733 745 =head2 SetNoDelete($value) … … 1031 1043 my @oaliases = (); 1032 1044 if ($attr ne 'oalias' && $attribute->reference) { 1033 @oaliases = $base->search_objects($attribute->reference, "oalias =$value");1045 @oaliases = $base->search_objects($attribute->reference, "oaliascache=$value"); 1034 1046 $base->log(LA_DEBUG, "Uniq search will match oaliases: %s", join(' ', @oaliases) || '(none)'); 1035 1047 } … … 1110 1122 my @oaliases = (); 1111 1123 if ($attr ne 'oalias' && $attribute->reference) { 1112 @oaliases = $base->search_objects($attribute->reference, "oalias =$val");1124 @oaliases = $base->search_objects($attribute->reference, "oaliascache=$val"); 1113 1125 $base->log(LA_DEBUG, "Uniq search will match oaliases for %s: %s", $val, join(' ', @oaliases) || '(none)'); 1114 1126 } … … 1295 1307 } 1296 1308 1309 sub _update_aliases_cache { 1310 my ($self) = @_; 1311 1312 my $getoalias = $self->base->db->prepare( 1313 sprintf( 1314 q{ select * from %s where %s = ? }, 1315 $self->base->db->quote_identifier($self->_object_table), 1316 $self->base->db->quote_identifier($self->_key_field), 1317 ) 1318 ); 1319 $getoalias->execute($self->id); 1320 my $res = $getoalias->fetchrow_hashref or do { 1321 $self->base->log(LA_ERR, "Cannot find alias %s / %s", $self->type, $self->id); 1322 return; 1323 }; 1324 $getoalias->finish; 1325 1326 my $ref = $self->base->_derefObject($self->type, $res->{oalias}); 1327 1328 if (($ref->id || '') ne ($res->{oaliascache} || '')) { 1329 my $upd = $self->base->db->prepare( 1330 sprintf( 1331 q{update %s set oaliascache = ? where %s = ?}, 1332 $self->base->db->quote_identifier($self->_object_table), 1333 $self->base->db->quote_identifier($self->_key_field), 1334 ) 1335 ); 1336 $self->base->log(LA_DEBUG, "Updating Cache for alias %s => %s", $self->id, $ref->id); 1337 return $upd->execute($ref->id, $self->id); 1338 } 1339 } 1340 1297 1341 1; 1298 1342
Note: See TracChangeset
for help on using the changeset viewer.