private bool TryGetTable(MemberExpression me)
        {
            if (me == null)
            {
                this.fallback = true;
                return(false);
            }

            TableFindResult result = this.tableFinder.Find(me);

            if (result.QueryString != null)
            {
                this.queryBuilder.Append(result.QueryString);
            }

            this.arguments.AddRange(result.Arguments);

            if (Table == null)
            {
                Table = result.Table;
            }
            else if (Table != result.Table)
            {
                this.fallback = true;
                return(false);
            }

            return(true);
        }
示例#2
0
            protected override Expression VisitMember(MemberExpression memberExpression)
            {
                TableFindResult result = tableFinder.Find(memberExpression);

                if (table == null)
                {
                    table = result;
                }
                else if (Table != result.Table || result.MimeType != table.MimeType)
                {
                    Fallback = true;
                    return(memberExpression);
                }

                ContentResolverColumnMapping cmap = tableFinder.GetColumn(memberExpression.Member);

                if (cmap == null || cmap.Columns == null)
                {
                    Fallback = true;
                    return(memberExpression);
                }

                currentMap = cmap;

                if (cmap.Columns.Length == 1)
                {
                    builder.Append(cmap.Columns[0]);
                }
                else
                {
                    throw new NotSupportedException();
                }

                return(base.VisitMember(memberExpression));
            }
示例#3
0
        private Boolean TryGetTable(MemberExpression me)
        {
            if (me == null)
            {
                fallback = true;
                return(false);
            }

            TableFindResult result = tableFinder.Find(me);

            if (result.MimeType != null)
            {
                if (queryBuilder.Length > 0)
                {
                    queryBuilder.Append(" AND ");
                }

                queryBuilder.Append(String.Format("({0} = ?)", ContactsContract.DataColumns.Mimetype));
            }

            arguments.Add(result.MimeType);

            if (Table == null)
            {
                Table = result.Table;
            }
            else if (Table != result.Table)
            {
                fallback = true;
                return(false);
            }

            return(true);
        }
        private bool TryGetTable(MemberExpression me)
        {
            if (me == null)
            {
                this.fallback = true;
                return(false);
            }

            TableFindResult result = this.tableFinder.Find(me);

            if (result.MimeType != null)
            {
                this.queryBuilder.Append(String.Format("({0} = ?)", ContactsContract.DataColumns.Mimetype));
            }

            this.arguments.Add(result.MimeType);

            if (Table == null)
            {
                Table = result.Table;
            }
            else if (Table != result.Table)
            {
                this.fallback = true;
                return(false);
            }

            return(true);
        }
        private Expression VisitWhere(MethodCallExpression methodCall)
        {
            Expression expression = ExpressionEvaluator.Evaluate(methodCall);

            var eval = new WhereEvaluator(this.tableFinder, Table);

            expression = eval.Evaluate(expression);

            TableFindResult result = eval.Result;

            if (Table == null)
            {
                Table = result.Table;
            }

            if (eval.Fallback || result.Table == null || result.Table != Table)
            {
                this.fallback = true;
                return(methodCall);
            }

            this.arguments.AddRange(result.Arguments);
            if (this.queryBuilder.Length > 0)
            {
                this.queryBuilder.Append(" AND ");
            }

            this.queryBuilder.Append(result.QueryString);

            return(methodCall.Arguments[0]);
        }
示例#6
0
 public WhereEvaluator(ITableFinder tableFinder, Uri existingTable)
 {
     this.tableFinder = tableFinder;
     if (existingTable != null)
     {
         table = new TableFindResult(existingTable, null);
     }
 }
            public Expression Evaluate(Expression expression)
            {
                expression = Visit(expression);

                Result = new TableFindResult(this.table, this.builder.ToString(), this.arguments);

                return(expression);
            }
示例#8
0
        private Boolean TryGetTable(List <MemberExpression> memberExpressions)
        {
            if (memberExpressions.Count == 0)
            {
                fallback = true;
                return(false);
            }

            Uri existingTable = Table;

            TableFindResult presult = null;

            foreach (MemberExpression me in memberExpressions)
            {
                TableFindResult result = tableFinder.Find(me);
                if (result.Table == null)
                {
                    fallback = true;
                    return(false);
                }

                if (existingTable == null)
                {
                    existingTable = result.Table;
                    presult       = result;
                }
                else if (existingTable != result.Table)
                {
                    fallback = true;
                    return(false);
                }
            }

            if (presult == null)
            {
                fallback = true;
                return(false);
            }

            Table = presult.Table;

            if (presult.MimeType != null)
            {
                if (queryBuilder.Length > 0)
                {
                    queryBuilder.Append(" AND ");
                }

                queryBuilder.Append(String.Format("({0} = ?)", ContactsContract.DataColumns.Mimetype));
            }

            arguments.Add(presult.MimeType);

            return(true);
        }
        private bool TryGetTable(List <MemberExpression> memberExpressions)
        {
            if (memberExpressions.Count == 0)
            {
                this.fallback = true;
                return(false);
            }

            Android.Net.Uri existingTable = Table;

            TableFindResult presult = null;

            foreach (MemberExpression me in memberExpressions)
            {
                TableFindResult result = this.tableFinder.Find(me);
                if (result.Table == null)
                {
                    this.fallback = true;
                    return(false);
                }

                if (existingTable == null)
                {
                    existingTable = result.Table;
                    presult       = result;
                }
                else if (existingTable != result.Table)
                {
                    this.fallback = true;
                    return(false);
                }
            }

            if (presult == null)
            {
                this.fallback = true;
                return(false);
            }

            Table = presult.Table;

            if (presult.QueryString != null)
            {
                this.queryBuilder.Append(presult.QueryString);
            }

            this.arguments.AddRange(presult.Arguments);

            return(true);
        }
            protected override Expression VisitMemberAccess(MemberExpression memberExpression)
            {
                TableFindResult result = this.tableFinder.Find(memberExpression);

                if (this.table == null)
                {
                    this.table = result.Table;
                    this.builder.Append(result.QueryString);
                    this.arguments.AddRange(result.Arguments);
                }
                else if (this.table != result.Table)
                {
                    Fallback = true;
                    return(memberExpression);
                }

                ContentResolverColumnMapping cmap = this.tableFinder.GetColumn(memberExpression.Member);

                if (cmap == null || cmap.Columns == null)
                {
                    Fallback = true;
                    return(memberExpression);
                }

                this.currentMap = cmap;

                if (this.builder.Length > 0)
                {
                    this.builder.Append(" AND ");
                }

                if (cmap.Columns.Length == 1)
                {
                    this.builder.Append(cmap.Columns[0]);
                }
                else
                {
                    throw new NotSupportedException();
                }

                return(base.VisitMemberAccess(memberExpression));
            }
         protected override Expression VisitMember( MemberExpression memberExpression )
         {
            TableFindResult result = tableFinder.Find( memberExpression );
            if(table == null)
            {
               table = result;
            }
            else if(Table != result.Table || result.MimeType != table.MimeType)
            {
               Fallback = true;
               return memberExpression;
            }

            ContentResolverColumnMapping cmap = tableFinder.GetColumn( memberExpression.Member );
            if(cmap == null || cmap.Columns == null)
            {
               Fallback = true;
               return memberExpression;
            }

            currentMap = cmap;

            if(cmap.Columns.Length == 1)
            {
               builder.Append( cmap.Columns[0] );
            }
            else
            {
               throw new NotSupportedException();
            }

            return base.VisitMember( memberExpression );
         }
 public WhereEvaluator( ITableFinder tableFinder, Uri existingTable )
 {
    this.tableFinder = tableFinder;
    if(existingTable != null)
    {
       table = new TableFindResult( existingTable, null );
    }
 }
			public Expression Evaluate (Expression expression)
			{
				expression = Visit (expression);

				Result = new TableFindResult (this.table, this.builder.ToString(), this.arguments);

				return expression;
			}