This repository was archived by the owner on Feb 23, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Add support for null in Contains queries #17
Copy link
Copy link
Open
Description
Right now we do not support "Contains" queries when one of the items in the collection is null. Here's a query as an example:
var hasNull = new List<string> { "Foo", "Bar", null };
var result =
queryable
.Where(someEntity => hasNull.Contains(someEntity.NullableString))
.ToImmutableList();This query will need to be rewritten from a traditional NullableString IN ("Foo", "Bar") clause to a disjunctive query including both the non-null values and the null value, like so: NullableString IN ("Foo", "Bar") OR NullableString IS NULL. However, at this point it does not yet get to that far. Instead, we get the following stack trace:
Error Message:
System.NullReferenceException : Object reference not set to an instance of an object.
Stack Trace:
at System.Object.GetType()
at Invio.QueryProvider.MySql.QueryTranslatorUtilities.unwrapValue(Object value)
at Invio.QueryProvider.MySql.QueryTranslatorUtilities.valueToQueryAndParam[a](Int32 columnIndex, DBType`1 dbType, Object value)
at Microsoft.FSharp.Collections.Internal.IEnumerator.map@74.DoMoveNext(b& curr)
at Microsoft.FSharp.Collections.Internal.IEnumerator.MapEnumerator`1.System-Collections-IEnumerator-MoveNext()
at Microsoft.FSharp.Collections.SeqModule.ToList[T](IEnumerable`1 source)
at Invio.QueryProvider.MySql.QueryTranslator.result$cont@722-3(FSharpFunc`2 getDBType, FSharpFunc`2 getColumnName, FSharpFunc`2 getTableName, FSharpRef`1 columnNameUnique, FSharpRef`1 tableAliasIndex, Context context, IEnumerable enumerableObject, FSharpList`1 args, Unit unitVar)
at Invio.QueryProvider.MySql.QueryTranslator.result$cont@694(FSharpFunc`2 getDBType, FSharpFunc`2 getColumnName, FSharpFunc`2 getTableName, FSharpRef`1 columnNameUnique, FSharpRef`1 tableAliasIndex, Context context, MethodCallExpression m, Unit unitVar)
at Invio.QueryProvider.MySql.QueryTranslator.mapFun@334-2.Invoke(Expression e)
at Invio.QueryProvider.ExpressionHelper.visitor@45.Invoke(Expression e)
at Invio.QueryProvider.ExpressionHelper.Visitor.Visit(Expression expression)
at Invio.QueryProvider.ExpressionHelper.map[t](FSharpFunc`2 mapping, Expression expression)
at Invio.QueryProvider.MySql.QueryTranslator.fromWhere@585.Invoke(MethodCallExpression w)
at Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x)
at Invio.QueryProvider.MySql.QueryTranslator.result$cont@360-4(FSharpFunc`2 getDBType, FSharpFunc`2 getColumnName, FSharpFunc`2 getTableName, FSharpRef`1 columnNameUnique, FSharpRef`1 tableAliasIndex, Context context, FSharpOption`1 linqChain, Unit unitVar)
at Invio.QueryProvider.MySql.QueryTranslator.mapFun@334-2.Invoke(Expression e)
at Invio.QueryProvider.ExpressionHelper.visitor@45.Invoke(Expression e)
at Invio.QueryProvider.ExpressionHelper.Visitor.Visit(Expression expression)
at Invio.QueryProvider.ExpressionHelper.map[t](FSharpFunc`2 mapping, Expression expression)
at Invio.QueryProvider.MySql.QueryTranslator.translateToStatement(FSharpOption`1 getDBType, FSharpOption`1 getTableName, FSharpOption`1 getColumnName, Expression expression)
at Invio.QueryProvider.MySql.MySqlQueryProvider.PrepareEnumerable[T](Expression expression)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels