hi, we're running on nightly build from 07 Mar.
Seeing something strange - hoping you can explain why...
We have a 1-many relationship between two soft-deleted entities. EntityB has many EntityA.
Model has custom naming strategy - db has DeletedOnUtc as soft delete column.
Issuing query like so:
var query = new Query
{
QueryExpression = (
Mindscape.LightSpeed.Entity.Attribute(EntityA.PropertyXField) == "blah" &&
Mindscape.LightSpeed.Entity.Attribute("EntityB.PropertyY") == "uhoh"
)
};
sut.Find<EntityA>(query);
we're seeing it blow up with a null ref exception like so:
at Mindscape.LightSpeed.Sql.PredicateCriteria.Bind(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\PredicateCriteria.cs:line 79
at Mindscape.LightSpeed.Sql.CriteriaStatement.BindParameters(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\CriteriaStatement.cs:line 25
at Mindscape.LightSpeed.Sql.SelectStatement.BindParameters(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\SelectStatement.cs:line 520
at Mindscape.LightSpeed.Sql.ExistsCriteria.Bind(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\ExistsCriteria.cs:line 24
at Mindscape.LightSpeed.Sql.LogicalCriteria.Bind(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\LogicalCriteria.cs:line 37
at Mindscape.LightSpeed.Sql.LogicalCriteria.Bind(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\LogicalCriteria.cs:line 36
at Mindscape.LightSpeed.Sql.CriteriaStatement.BindParameters(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\CriteriaStatement.cs:line 25
at Mindscape.LightSpeed.Sql.SelectStatement.BindParameters(CommandBuilder commandBuilder) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Sql\SelectStatement.cs:line 520
at Mindscape.LightSpeed.Data.CommandBuilder.AppendSql(SqlStatement sqlStatement) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Data\CommandBuilder.cs:line 110
at Mindscape.LightSpeed.Data.CommandBuilder.AppendSql(IEnumerable`1 sqlStatements) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Data\CommandBuilder.cs:line 104
at Mindscape.LightSpeed.Data.BatchingQueryExecutionStrategy..ctor(IUnitOfWork unitOfWork, IEnumerable`1 sqlStatements) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Data\BatchingQueryExecutionStrategy.cs:line 20
at Mindscape.LightSpeed.Data.DataProviderAdapter.CreateQueryExecutionStrategy(IUnitOfWork unitOfWork, IEnumerable`1 sqlStatements, ProviderOptions providerOptions) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Data\DataProviderAdapter.cs:line 101
at Mindscape.LightSpeed.Mapping.ObjectLoader.LoadInternal(TypeModel typeModel, Query query, IList results) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Mapping\ObjectLoader.cs:line 56
at Mindscape.LightSpeed.Mapping.ObjectLoader.Load(UnitOfWorkBase unitOfWork, TypeModel typeModel, Query query, IList results) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\Mapping\ObjectLoader.cs:line 19
at Mindscape.LightSpeed.QueryingEngine.FindInternal(Query query, TypeModel typeModel, IList results) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\QueryingEngine.cs:line 395
at Mindscape.LightSpeed.QueryingEngine.Find(Query query, IList results) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\QueryingEngine.cs:line 135
at Mindscape.LightSpeed.UnitOfWork.Find(Query query, IList results) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\UnitOfWork.cs:line 281
at Mindscape.LightSpeed.UnitOfWorkBase.Find[TEntity](Query query) in D:\Libraries\Mindscape\LightSpeed\Source20120308\Src\Framework\UnitOfWorkBase.cs:line 297
at Tests.UnitOfWorkTests.when_performing_test_that_should_pass() in Tests.UnitOfWorkTests.cs:line 273
at Machine.Specifications.Catch.Exception(Action throwingAction)
]
Specifically, stepping into the LS code shows us that QueryBuilderBase.VisitSingleColumnPredicate is travelling all the way through the function to the bottom where the first argument provided [predicateExpression.IdentifierExpression.Accept(this)] resolves to null:
return new PredicateCriteria(
predicateExpression.IdentifierExpression.Accept(this),
predicateExpression.Operator.ToString(),
toDbCriteria(predicateExpression.RhsExpressions[0].Accept(this)));
... which ends up passing a null criteria to the PredicateCriteria... which later blows up.
any obvious things we should be looking for?
we were previously on a nightly build from sometime in November.
of course we're only looking at this nightly build in desperation to try and resolve some other weird inheritance-related problems we've introduced into the model. have seen many refs in the weekly notes to fixes you've made in LS wrt handling inheritance, hoping that will fix our problem A. but in the meantime we've discovered a problem B...!
thanks
justin