public override void VisitInExpression(InExpression inExpression) { if (inExpression.Values == null) { throw new SqlErrorException("IN predicate only supports a list of values right now"); } Expression memberExpression; if (inExpression.Expression is ColumnReference columnReferenceExpression) { //Check here if any index can be used aswell var identifiers = columnReferenceExpression.Identifiers; identifiers = MemberUtils.RemoveAlias(_previousStage, identifiers); memberExpression = MemberUtils.GetMember(_previousStage, identifiers, _visitorMetadata.OperationsProvider, out var property); AddUsedProperty(property); AddNameToStack(string.Join(".", identifiers)); } else { throw new SqlErrorException("IN predicate can only be used against column names"); } IList list = ListUtils.GetNewListFunction(memberExpression.Type)(); foreach (var value in inExpression.Values) { if (value is Literal literal) { list.Add(TypeConvertUtils.ConvertToType(literal.GetValue(), memberExpression.Type)); } else if (value is VariableReference variableReference) { var sqlParameter = _visitorMetadata.Parameters.GetParameter(variableReference.Name); var variableValue = sqlParameter.GetValue(memberExpression.Type); list.Add(variableValue); } else { throw new SqlErrorException("IN predicate only supports literal or parameter values."); } } var inPredicate = _visitorMetadata.OperationsProvider.GetListContains(memberExpression, list); AddExpressionToStack(inPredicate); }