/// <summary> /// This initializes the esDataRequest for the query. /// </summary> /// <param name="request">The request to populate.</param> protected void PopulateRequest(esDataRequest request) { IMetadata meta = this.Meta; esConnection conn = this.es2.Connection; esProviderSpecificMetadata providerMetadata = meta.GetProviderMetadata(conn.ProviderMetadataKey); IDynamicQuerySerializableInternal iQuery = this as IDynamicQuerySerializableInternal; if ((this.queries != null && this.queries.Count > 0) || iQuery.InternalSetOperations != null) { AssignProviderMetadata(this, new List <esDynamicQuerySerializable>()); } string catalog = conn.Catalog; string schema = conn.Schema; iData.Catalog = catalog; iData.Schema = schema; iData.DataID = meta.DataID; iData.ProviderMetadata = providerMetadata; iData.Columns = meta.Columns; request.ConnectionString = conn.ConnectionString; request.CommandTimeout = conn.CommandTimeout; request.QueryType = esQueryType.DynamicQuery; request.DynamicQuery = this; request.DataID = meta.DataID; request.ProviderMetadata = providerMetadata; request.Catalog = catalog; request.Schema = schema; request.Columns = meta.Columns; if (this.m_selectAll) { _selectAll(); } if (es.QuerySource == null || es.QuerySource.Length == 0) { es.QuerySource = providerMetadata.Source; } }
/// <summary> /// /// </summary> private void AssignProviderMetadata(esDynamicQuerySerializable query, List <esDynamicQuerySerializable> beenThere) { if (beenThere.Contains(query)) { return; } beenThere.Add(query); esDynamicQuery theQuery = query as esDynamicQuery; IDynamicQuerySerializableInternal iQuery = query as IDynamicQuerySerializableInternal; if (theQuery != null) { esConnection conn = theQuery.es2.Connection; if (iQuery.ProviderMetadata == null) { esProviderSpecificMetadata providerMetadata = theQuery.Meta.GetProviderMetadata(conn.ProviderMetadataKey); iQuery.DataID = theQuery.Meta.DataID; iQuery.Columns = theQuery.Meta.Columns; iQuery.ProviderMetadata = providerMetadata; } iQuery.Catalog = conn.Catalog; iQuery.Schema = conn.Schema; } // This code is for proxies as they are unable to work with column and provider metadata // until serialized back to the server if (iQuery.SelectAll) { foreach (esColumnMetadata col in (esColumnMetadataCollection)iQuery.Columns) { esQueryItem item = new esQueryItem(this, col.Name, col.esType); query.Select(item); } } else { List <esQueryItem> columns = iQuery.SelectAllExcept; if (columns != null) { foreach (esColumnMetadata col in (esColumnMetadataCollection)iQuery.Columns) { bool found = false; for (int i = 0; i < columns.Count; i++) { if (col.Name == (string)columns[i]) { found = true; break; } } if (found) { continue; } esExpression item = new esQueryItem(this, col.Name, col.esType); query.Select(item); } } } foreach (esDynamicQuerySerializable subQuery in iQuery.queries.Values) { AssignProviderMetadata(subQuery, beenThere); } if (iQuery.InternalSetOperations != null) { foreach (esSetOperation setOperation in iQuery.InternalSetOperations) { AssignProviderMetadata(setOperation.Query, beenThere); } } }