Fixes 26070 - Significant improvement in SQL queries

Fixes 26780 - More sql improvements
Fixes ClientDependency checkin.

[TFS Changeset #65496]
This commit is contained in:
Shandem
2010-04-15 12:54:31 +00:00
parent 71deb9d5dc
commit 9a12f4eef2
5 changed files with 64 additions and 15 deletions

View File

@@ -100,6 +100,10 @@
<Project>{CCD75EC3-63DB-4184-B49D-51C1DD337230}</Project>
<Name>umbraco.cms</Name>
</ProjectReference>
<ProjectReference Include="..\..\umbraco\datalayer\umbraco.datalayer.csproj">
<Project>{C7CB79F0-1C97-4B33-BFA7-00731B579AE2}</Project>
<Name>umbraco.datalayer</Name>
</ProjectReference>
<ProjectReference Include="..\..\umbraco\interfaces\umbraco.interfaces.csproj">
<Project>{511F6D8D-7717-440A-9A57-A507E9A8B27F}</Project>
<Name>umbraco.interfaces</Name>

View File

@@ -131,6 +131,12 @@ namespace umbraco.cms.businesslogic
setupNode();
}
public CMSNode(IRecordsReader reader)
{
_id = reader.GetInt("id");
PopulateNodeFromReader(reader);
}
/// <summary>
/// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility
/// </summary>
@@ -500,6 +506,15 @@ namespace umbraco.cms.businesslogic
}
}
public virtual int ChildCount
{
get
{
return SqlHelper.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoNode where ParentID = @parentId",
SqlHelper.CreateParameter("@parentId", this.Id));
}
}
/// <summary>
/// The basic recursive tree pattern
/// </summary>
@@ -509,19 +524,21 @@ namespace umbraco.cms.businesslogic
get
{
System.Collections.ArrayList tmp = new System.Collections.ArrayList();
IRecordsReader dr = SqlHelper.ExecuteReader("select id from umbracoNode where ParentID = " + this.Id + " And nodeObjectType = @type order by sortOrder",
SqlHelper.CreateParameter("@type", this.nodeObjectType));
while (dr.Read())
tmp.Add(dr.GetInt("Id"));
IRecordsReader dr = SqlHelper.ExecuteReader("SELECT id, createDate, trashed, parentId, nodeObjectType, nodeUser, level, path, sortOrder, uniqueID, text FROM umbracoNode WHERE ParentID = @ParentID AND nodeObjectType = @type order by sortOrder",
SqlHelper.CreateParameter("@type", this.nodeObjectType), SqlHelper.CreateParameter("ParentID", this.Id));
while (dr.Read()){;
tmp.Add(new CMSNode(dr));
}
dr.Close();
CMSNode[] retval = new CMSNode[tmp.Count];
for (int i = 0; i < tmp.Count; i++)
retval[i] = new CMSNode((int)tmp[i]);
{
//retval[i] = new CMSNode((int)tmp[i]);
retval[i] = (CMSNode)tmp[i];
}
return retval;
}
}
@@ -573,6 +590,8 @@ namespace umbraco.cms.businesslogic
return retval;
}
/// <summary>
/// Given the protected modifier the CMSNode.MakeNew method can only be accessed by
/// derived classes &gt; who by definition knows of its own objectType.
@@ -593,7 +612,7 @@ namespace umbraco.cms.businesslogic
if (level > 0)
{
parent = new CMSNode(parentId);
sortOrder = parent.Children.Length + 1;
sortOrder = parent.ChildCount + 1;
path = parent.Path;
}
else
@@ -802,6 +821,21 @@ order by level,sortOrder";
SqlHelper.CreateParameter("@xml", x.OuterXml));
}
private void PopulateNodeFromReader(IRecordsReader dr)
{
if (dr.IsNull("uniqueID")) _uniqueID = Guid.NewGuid();
else _uniqueID = dr.GetGuid("uniqueID");
_nodeObjectType = dr.GetGuid("nodeObjectType");
_level = dr.GetShort("level");
_path = dr.GetString("path");
_parentid = dr.GetInt("parentId");
_text = dr.GetString("text");
_sortOrder = dr.GetInt("sortOrder");
_userId = dr.GetInt("nodeUser");
_createDate = dr.GetDateTime("createDate");
}
private void XmlPopulate(XmlDocument xd, XmlNode x, bool Deep)
{
// attributes

View File

@@ -181,16 +181,22 @@ namespace umbraco.cms.businesslogic.template
get { return (_mastertemplate > 0); }
}
private bool _hasChildrenInitialized = false;
private bool _hasChildren;
public override bool HasChildren
{
get
{
return
SqlHelper.ExecuteScalar<int>("select count(NodeId) as tmp from cmsTemplate where master = " + Id) > 0;
if (!_hasChildrenInitialized)
{
_hasChildren = SqlHelper.ExecuteScalar<int>("select count(NodeId) as tmp from cmsTemplate where master = " + Id) > 0;
}
return _hasChildren;
}
set
{
base.HasChildren = value;
_hasChildrenInitialized = true;
_hasChildren = value;
}
}

View File

@@ -104,17 +104,22 @@ namespace umbraco.cms.businesslogic.web
}
}
private bool _hasChildrenInitialized = false;
private bool _hasChildren;
public override bool HasChildren
{
get
{
return
SqlHelper.ExecuteScalar<int>("select count(NodeId) as tmp from cmsContentType where masterContentType = " + Id) > 0;
if (!_hasChildrenInitialized)
{
HasChildren = SqlHelper.ExecuteScalar<int>("select count(NodeId) as tmp from cmsContentType where masterContentType = " + Id) > 0;
}
return _hasChildren;
}
set
{
base.HasChildren = value;
_hasChildrenInitialized = true;
_hasChildren = value;
}
}