Skip to content

Commit

Permalink
Added NHibernate test project, plus snapshot binaries of NH and FNH.
Browse files Browse the repository at this point in the history
  • Loading branch information
BeeWarloc committed Dec 10, 2012
1 parent 8f26a76 commit 2731fc8
Show file tree
Hide file tree
Showing 27 changed files with 54,483 additions and 27 deletions.
4 changes: 4 additions & 0 deletions .nuget/packages.config
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NUnit.Runners" version="2.6.2" />
</packages>
11 changes: 11 additions & 0 deletions Clean.cmd
@@ -0,0 +1,11 @@
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

echo Performing some hardcore file system nuking!
FOR /R . %%X IN (bin obj) DO (
SET retard=%%X
SET cretin=!retard:\Umbraco\bin=!
IF !cretin! == %%X (
RD /S /Q "%%X" 2> NUL
)
)
1 change: 1 addition & 0 deletions Pomona.Common/Internals/OdataFunctionMapping.cs
Expand Up @@ -104,6 +104,7 @@ static OdataFunctionMapping()
x => x.Select(y => (WildcardType) null), "select({0},{1})", MethodCallStyle.Chained);
Add<IEnumerable<WildcardType>>(x => x.Where(y => false), "where({0},{1})", MethodCallStyle.Chained);
Add<IEnumerable<WildcardType>>(x => x.Count(), "count({0})");
Add<IEnumerable<WildcardType>>(x => x.SelectMany(y => (IEnumerable<string>) null), "many({0},{1})", MethodCallStyle.Chained);
Add<ICollection<WildcardType>>(x => x.Count, "count({0})");

Add<IEnumerable<int>>(x => x.Sum(), "sum({0})");
Expand Down
20 changes: 18 additions & 2 deletions Pomona.Common/QueryResult.cs
Expand Up @@ -34,6 +34,7 @@
using System.Linq;
using System.Reflection;

using Pomona.Common.Internals;
using Pomona.Internals;

namespace Pomona.Common
Expand All @@ -57,11 +58,26 @@ static QueryResult()
public abstract bool TryGetPage(int offset, out Uri pageUri);


public static QueryResult Create(IQueryable source, int skip, int totalCount, string url)
public static QueryResult Create(IEnumerable source, int skip, int totalCount, string url)
{
Type elementType;
Type[] genargs;
if (!TypeUtils.TryGetTypeArguments(source.GetType(), typeof(IEnumerable<>), out genargs))
{
var asQueryable = source as IQueryable;
if (asQueryable == null)
{
throw new ArgumentException("source needs to implement IQuerable or IEnumerable<>");
}
elementType = asQueryable.ElementType;
}
else
{
elementType = genargs[0];
}
return
(QueryResult)
createMethod.MakeGenericMethod(source.ElementType).Invoke(
createMethod.MakeGenericMethod(elementType).Invoke(
null, new object[] { source, skip, totalCount, url });
}

Expand Down
12 changes: 12 additions & 0 deletions Pomona.sln
Expand Up @@ -34,6 +34,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pomona.TestHelpers", "Pomona.TestHelpers\Pomona.TestHelpers.csproj", "{BF914B52-EBE9-422B-AF7F-FC7F48CEE550}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PomonaNHibernateTest", "PomonaNHibernateTest\PomonaNHibernateTest.csproj", "{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -134,6 +136,16 @@ Global
{BF914B52-EBE9-422B-AF7F-FC7F48CEE550}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BF914B52-EBE9-422B-AF7F-FC7F48CEE550}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BF914B52-EBE9-422B-AF7F-FC7F48CEE550}.Release|x86.ActiveCfg = Release|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Debug|x86.ActiveCfg = Debug|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Release|Any CPU.Build.0 = Release|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{AA3FB78C-ABBC-4490-8726-3B4A2AADA699}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
3 changes: 0 additions & 3 deletions Pomona/IPomonaDataSource.cs
Expand Up @@ -26,16 +26,13 @@

#endregion

using System.Collections.Generic;
using Pomona.Common;
using Pomona.Queries;

namespace Pomona
{
public interface IPomonaDataSource
{
T GetById<T>(object id);
ICollection<T> List<T>();
QueryResult Query(IPomonaQuery query);
object Post<T>(T newObject);
}
Expand Down
64 changes: 45 additions & 19 deletions Pomona/PomonaQuery.cs
Expand Up @@ -27,11 +27,14 @@
#endregion

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

using System.Reflection;
using Pomona.Common;
using Pomona.Common.Internals;
using Pomona.Internals;

namespace Pomona
{
Expand All @@ -40,9 +43,17 @@ namespace Pomona
/// </summary>
public class PomonaQuery : IPomonaQuery
{
private static readonly MethodInfo applyAndExecuteMethod;
private readonly TransformedType targetType;


static PomonaQuery()
{
applyAndExecuteMethod =
ReflectionHelper.GetGenericMethodDefinition<PomonaQuery>(x => x.ApplyAndExecute<object>(null, false));
}


public PomonaQuery(TransformedType targetType)
{
if (targetType == null)
Expand All @@ -67,20 +78,18 @@ public PomonaQuery(TransformedType targetType)

public TransformedType TargetType
{
get { return this.targetType; }
get { return targetType; }
}

public string Url { get; set; }

#endregion

public QueryResult ApplyAndExecute(IQueryable queryable)
public QueryResult ApplyAndExecute(IQueryable queryable, bool skipAndTakeAfterExecute = false)
{
var totalQueryable = ApplyExpressions(queryable);
var totalCount = (int)QueryableMethods.Count.MakeGenericMethod(totalQueryable.ElementType).Invoke(
null, new object[] { totalQueryable });
var limitedQueryable = ApplySkipAndTake(totalQueryable);
return QueryResult.Create(limitedQueryable, Skip, totalCount, Url);
return (QueryResult) applyAndExecuteMethod.MakeGenericMethod(totalQueryable.ElementType).Invoke(
this, new object[] {totalQueryable, skipAndTakeAfterExecute});
}


Expand All @@ -89,7 +98,7 @@ public IQueryable ApplyExpressions(IQueryable queryable)
queryable =
(IQueryable)
QueryableMethods.Where.MakeGenericMethod(queryable.ElementType).Invoke(
null, new object[] { queryable, FilterExpression });
null, new object[] {queryable, FilterExpression});

if (GroupByExpression == null)
{
Expand All @@ -98,16 +107,18 @@ public IQueryable ApplyExpressions(IQueryable queryable)
}
else
{
queryable = (IQueryable)QueryableMethods.GroupBy
.MakeGenericMethod(queryable.ElementType, GroupByExpression.ReturnType)
.Invoke(null, new object[] { queryable, GroupByExpression });
queryable = (IQueryable) QueryableMethods.GroupBy
.MakeGenericMethod(queryable.ElementType,
GroupByExpression.ReturnType)
.Invoke(null, new object[] {queryable, GroupByExpression});
}

if (SelectExpression != null)
{
queryable = (IQueryable)QueryableMethods.Select
.MakeGenericMethod(queryable.ElementType, SelectExpression.ReturnType)
.Invoke(null, new object[] { queryable, SelectExpression });
queryable = (IQueryable) QueryableMethods.Select
.MakeGenericMethod(queryable.ElementType,
SelectExpression.ReturnType)
.Invoke(null, new object[] {queryable, SelectExpression});

// OrderBy is applied AFTER select if GroupBy has been specified.
if (GroupByExpression != null)
Expand All @@ -129,16 +140,31 @@ public IQueryable ApplySkipAndTake(IQueryable queryable)
{
queryable = (IQueryable)
QueryableMethods.Skip.MakeGenericMethod(queryable.ElementType).Invoke(
null, new object[] { queryable, Skip });
null, new object[] {queryable, Skip});
}

queryable = (IQueryable)
QueryableMethods.Take.MakeGenericMethod(queryable.ElementType)
.Invoke(null, new object[] { queryable, Top });
.Invoke(null, new object[] {queryable, Top});
return queryable;
}


private QueryResult ApplyAndExecute<T>(IQueryable<T> totalQueryable, bool skipAndTakeAfterExecute)
{
var totalCount = (int) QueryableMethods.Count.MakeGenericMethod(totalQueryable.ElementType).Invoke(
null, new object[] {totalQueryable});

IEnumerable limitedQueryable;
if (skipAndTakeAfterExecute)
limitedQueryable = ((IEnumerable<T>) (totalQueryable)).Skip(Skip).Take(Top);
else
limitedQueryable = ApplySkipAndTake(totalQueryable);

return QueryResult.Create(limitedQueryable, Skip, totalCount, Url);
}


private IQueryable ApplyOrderByExpression(IQueryable queryable)
{
if (OrderByExpression != null)
Expand All @@ -147,9 +173,9 @@ private IQueryable ApplyOrderByExpression(IQueryable queryable)
? QueryableMethods.OrderByDescending
: QueryableMethods.OrderBy;

queryable = (IQueryable)orderMethod
.MakeGenericMethod(queryable.ElementType, OrderByExpression.ReturnType)
.Invoke(null, new object[] { queryable, OrderByExpression });
queryable = (IQueryable) orderMethod
.MakeGenericMethod(queryable.ElementType, OrderByExpression.ReturnType)
.Invoke(null, new object[] {queryable, OrderByExpression});
}
return queryable;
}
Expand Down
6 changes: 6 additions & 0 deletions PomonaNHibernateTest/App.config
@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>
47 changes: 47 additions & 0 deletions PomonaNHibernateTest/Models/PurchaseOrder.cs
@@ -0,0 +1,47 @@
using System.Collections.Generic;

namespace PomonaNHibernateTest.Models
{
public class EntityBase
{
public virtual int Id { get; set; }
}

public class Product : EntityBase
{
public virtual decimal Price { get; set; }
public virtual string Sku { get; set; }
public virtual string Name { get; set; }
}

public class Item : EntityBase
{
public virtual PurchaseOrder Order { get; set; }
public virtual int Quantity { get; set; }
public virtual decimal Price { get; set; }
public virtual Product Product { get; set; }
}

public class PurchaseOrder : EntityBase
{
public virtual int SomeGroup { get; set; }
private IList<Item> _items;

public PurchaseOrder()
{
_items = new List<Item>();
}

public virtual Customer Customer { get; set; }
public virtual IList<Item> Items
{
get { return _items; }
set { _items = value; }
}
}

public class Customer : EntityBase
{
public virtual string Name { get; set; }
}
}

0 comments on commit 2731fc8

Please sign in to comment.