performance enhancements

This commit is contained in:
JT Smith 2005-09-19 18:38:44 +00:00
parent 8dc65ce3d5
commit ee1e7e870c
4 changed files with 38 additions and 17 deletions

View file

@ -963,11 +963,12 @@ sub new {
my $assetId = shift;
return undef unless ($assetId);
my $className = shift;
my $revisionDate = shift;
my $revisionDate = shift || $session{assetRevision}{$assetId}{$session{scratch}{versionTag}||'_'};
unless ($revisionDate) {
($revisionDate) = WebGUI::SQL->quickArray("select max(revisionDate) from assetData where assetId="
.quote($assetId)." and (status='approved' or status='archived' or tagId=".quote($session{scratch}{versionTag}).")
group by assetData.assetId order by assetData.revisionDate");
$session{assetRevision}{$assetId}{$session{scratch}{versionTag}||'_'} = $revisionDate unless ($session{config}{disableCache});
}
return undef unless ($revisionDate);
if ($className) {
@ -1023,7 +1024,11 @@ sub newByDynamicClass {
my $assetId = shift;
my $revisionDate = shift;
return undef unless defined $assetId;
my ($className) = WebGUI::SQL->quickArray("select className from asset where assetId=".quote($assetId));
my $className = $session{assetClass}{$assetId};
unless ($className) {
($className) = WebGUI::SQL->quickArray("select className from asset where assetId=".quote($assetId));
$session{assetClass}{$assetId} = $className unless ($session{config}{disableCache});
}
return undef unless ($className);
return WebGUI::Asset->new($assetId,$className,$revisionDate);
}

View file

@ -248,7 +248,11 @@ Returns the highest rank, top of the highest rank Asset under current Asset.
sub getFirstChild {
my $self = shift;
unless (exists $self->{_firstChild}) {
my ($lineage) = WebGUI::SQL->quickArray("select min(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
my $lineage = $session{assetLineage}{firstChild}{$self->getId};
unless ($lineage) {
($lineage) = WebGUI::SQL->quickArray("select min(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
$session{assetLineage}{firstChild}{$self->getId} = $lineage unless ($session{config}{disableCache});
}
$self->{_firstChild} = WebGUI::Asset->newByLineage($lineage);
}
return $self->{_firstChild};
@ -266,7 +270,11 @@ Returns the lowest rank, bottom of the lowest rank Asset under current Asset.
sub getLastChild {
my $self = shift;
unless (exists $self->{_lastChild}) {
my ($lineage) = WebGUI::SQL->quickArray("select max(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
my $lineage = $session{assetLineage}{lastChild}{$self->getId};
unless ($lineage) {
($lineage) = WebGUI::SQL->quickArray("select max(asset.lineage) from asset,assetData where asset.parentId=".quote($self->getId)." and asset.assetId=assetData.assetId and asset.state='published'");
$session{assetLineage}{lastChild}{$self->getId} = $lineage;
}
$self->{_lastChild} = WebGUI::Asset->newByLineage($lineage);
}
return $self->{_lastChild};
@ -592,7 +600,13 @@ Lineage string.
sub newByLineage {
my $self = shift;
my $lineage = shift;
my ($id,$class) = WebGUI::SQL->quickArray("select assetId, className from asset where lineage=".quote($lineage));
my $id = $session{assetLineage}{$lineage}{id};
my $class = $session{assetLineage}{$lineage}{class};
unless ($id && $class) {
($id,$class) = WebGUI::SQL->quickArray("select assetId, className from asset where lineage=".quote($lineage));
$session{assetLineage}{$lineage}{id} = $id unless ($session{config}{disableCache});
$session{assetLineage}{$lineage}{class} = $class unless ($session{config}{disableCache});
}
return WebGUI::Asset->new($id, $class);
}

View file

@ -230,7 +230,7 @@ sub getGroupsForUser {
foreach my $gid (@groups) {
$session{isInGroup}{$userId}{$gid} = 1;
}
$session{gotGroupsForUser}{$userId} = \@groups;
$session{gotGroupsForUser}{$userId} = \@groups unless ($session{config}{disableCache});
return \@groups;
}
}
@ -278,7 +278,7 @@ sub getGroupsInGroup {
my $gog = getGroupsInGroup($group,1,$loopCount);
push(@groupsOfGroups, @$gog);
}
$session{gotGroupsInGroup}{recursive}{$groupId} = \@groupsOfGroups;
$session{gotGroupsInGroup}{recursive}{$groupId} = \@groupsOfGroups unless ($session{config}{disableCache});
return \@groupsOfGroups;
}
$session{gotGroupsInGroup}{direct}{$groupId} = $groups;
@ -351,7 +351,7 @@ sub isInGroup {
unless ($secondRun) { # don't look up user groups if we've already done it once.
my $groups = WebGUI::Grouping::getGroupsForUser($uid,1);
foreach (@{$groups}) {
$session{isInGroup}{$uid}{$_} = 1;
$session{isInGroup}{$uid}{$_} = 1 unless ($session{config}{disableCache});
}
if ($session{isInGroup}{$uid}{$gid} eq '1') {
return 1;
@ -370,7 +370,7 @@ sub isInGroup {
my @ips = split(";",$group{ipFilter});
foreach my $ip (@ips) {
if ($session{env}{REMOTE_ADDR} =~ /^$ip/) {
$session{isInGroup}{$uid}{$gid} = 1;
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1;
}
}
@ -385,7 +385,7 @@ sub isInGroup {
foreach my $var (@vars) {
my ($name, $value) = split(/\=/,$var);
if ($session{scratch}{$name} eq $value) {
$session{isInGroup}{$uid}{$gid} = 1;
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1;
}
}
@ -399,7 +399,7 @@ sub isInGroup {
($karma) = WebGUI::SQL->quickHash("select karma from users where userId=".quote($uid));
}
if ($karma >= $group{karmaThreshold}) {
$session{isInGroup}{$uid}{$gid} = 1;
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
return 1;
}
}
@ -418,13 +418,13 @@ sub isInGroup {
} else {
my ($result) = $sth->array;
if ($result == 1) {
$session{isInGroup}{$uid}{$gid} = 1;
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
if ($group{dbCacheTimeout} > 0) {
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]);
WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout});
}
} else {
$session{isInGroup}{$uid}{$gid} = 0;
$session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 0);
}
}
@ -457,13 +457,13 @@ sub isInGroup {
}
if(isIn($params->{connectDN},@{$people})) {
$session{isInGroup}{$uid}{$gid} = 1;
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache});
if ($group{dbCacheTimeout} > 10) {
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]);
WebGUI::Grouping::addUsersToGroups([$uid],[$gid],$group{dbCacheTimeout});
}
} else {
$session{isInGroup}{$uid}{$gid} = 0;
$session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
WebGUI::Grouping::deleteUsersFromGroups([$uid],[$gid]) if ($group{dbCacheTimeout} > 10);
}
$ldapLink->unbind;
@ -478,11 +478,11 @@ sub isInGroup {
foreach (@{$groups}) {
$session{isInGroup}{$uid}{$_} = isInGroup($_, $uid, 1);
if ($session{isInGroup}{$uid}{$_}) {
$session{isInGroup}{$uid}{$gid} = 1; # cache current group also so we don't have to do the group in group check again
$session{isInGroup}{$uid}{$gid} = 1 unless ($session{config}{disableCache}); # cache current group also so we don't have to do the group in group check again
return 1;
}
}
$session{isInGroup}{$uid}{$gid} = 0;
$session{isInGroup}{$uid}{$gid} = 0 unless ($session{config}{disableCache});
return 0;
}