/// <summary>
 /// Recupera o origem de dados associada com a consulta.
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 public Query.IQueryDataSource GetDataSource(Query.QueryInfo query)
 {
     Query.IQueryDataSource lastDataSource = null;
     if (query.StoredProcedureName != null || !query.CanUseCache || !Colosoft.Caching.CacheDataSource.IsCompatible(query))
     {
         return(GetServerDataSource());
     }
     foreach (var i in query.Entities)
     {
         var ds = GetDataSource(i);
         if (lastDataSource != null && lastDataSource != ds)
         {
             return(GetServerDataSource());
         }
         lastDataSource = ds;
     }
     if (query.NestedQueries != null)
     {
         foreach (var nestedQuery in query.NestedQueries)
         {
             var ds = GetDataSource(nestedQuery);
             if ((lastDataSource != null && lastDataSource != ds) || !nestedQuery.CanUseCache)
             {
                 return(GetServerDataSource());
             }
             lastDataSource = ds;
         }
     }
     return(lastDataSource);
 }
 /// <summary>
 /// Recupera a origem de dados comum entre as consulta informadas.
 /// </summary>
 /// <param name="queries"></param>
 /// <returns></returns>
 public Query.IQueryDataSource GetDataSource(Query.QueryInfo[] queries)
 {
     Query.IQueryDataSource lastDataSource = null;
     foreach (var i in queries)
     {
         var ds = GetDataSource(i);
         if (lastDataSource != null && lastDataSource != ds)
         {
             return(GetServerDataSource());
         }
         lastDataSource = ds;
     }
     return(lastDataSource);
 }