/// <summary> /// Recupera a quantidade de registros com base na Query. /// </summary> /// <param name="session">Sessão utilizada para a execução do comando.</param> /// <param name="query">Consulta usada.</param> /// <returns>Quantidade de registro encontrados com base na consulta.</returns> public long Count(GDASession session, IQuery query) { IProvider provider = session != null && session.ProviderConfiguration != null ? session.ProviderConfiguration.Provider : GDA.GDASettings.DefaultProviderConfiguration.Provider; QueryReturnInfo qri = query.BuildResultInfo2(provider, "COUNT(*)"); return(Convert.ToInt64(ExecuteScalar(session, qri.CommandText, qri.Parameters.ToArray()))); }
/// <summary> /// Recupera a média dos valores da propriedade especificada na consulta. /// </summary> /// <param name="session">Sessão utilizada para a execução do comando.</param> /// <param name="query">Consulta usada.</param> /// <returns>Valor medio encontrado ou zero.</returns> public double Avg(GDASession session, IQuery query) { IProvider provider = session != null && session.ProviderConfiguration != null ? session.ProviderConfiguration.Provider : GDA.GDASettings.DefaultProviderConfiguration.Provider; QueryReturnInfo qri = query.BuildResultInfo2(provider, "AVG(" + query.AggregationFunctionProperty + ")"); object result = ExecuteScalar(session, qri.CommandText, qri.Parameters.ToArray()); if (result == null) { return(0.0d); } else { return(Convert.ToDouble(result)); } }
/// <summary> /// Recupera os valores da propriedade que se encontra no resultado da consulta. /// </summary> /// <param name="session">Sess�o para execu��o do comando.</param> /// <param name="query">Comando da consulta que ser� executada.</param> /// <param name="propertyName">Nome da propriedade que ser� recuperada.</param> /// <returns>Valores da propriedade encontrada.</returns> public IEnumerable <GDAPropertyValue> GetValues(GDASession session, IQuery query, string propertyName) { if (string.IsNullOrEmpty(propertyName)) { throw new ArgumentNullException("propertyName"); } if (query == null) { query = new Query(); } query.ReturnTypeQuery = typeof(Model); QueryReturnInfo returnInfo = query.BuildResultInfo <Model>(this.Configuration); List <Mapper> listAttr = returnInfo.RecoverProperties; string sqlQuery = returnInfo.CommandText; IDbConnection conn = CreateConnection(session); IDbCommand cmd = CreateCommand(session, conn); cmd.CommandType = CommandType.Text; bool usingPaging = false; if (query.SkipCount > 0 || query.TakeCount > 0) { usingPaging = true; } if (listAttr.Count == 0) { throw new GDAException("Not found properties mappers to model {0}.", typeof(Model).FullName); } if (returnInfo.Parameters != null) { for (int i = 0; i < returnInfo.Parameters.Count; i++) { try { string newName = (returnInfo.Parameters[i].ParameterName[0] != '?' ? returnInfo.Parameters[i].ParameterName : UserProvider.ParameterPrefix + returnInfo.Parameters[i].ParameterName.Substring(1) + UserProvider.ParameterSuffix); sqlQuery = sqlQuery.Replace(returnInfo.Parameters[i].ParameterName, newName); } catch (Exception ex) { throw new GDAException("Error on make parameter name '" + returnInfo.Parameters[i].ParameterName + "'.", ex); } cmd.Parameters.Add(GDA.Helper.GDAHelper.ConvertGDAParameter(cmd, returnInfo.Parameters[i], UserProvider)); } } if (usingPaging) { sqlQuery = UserProvider.SQLCommandLimit(listAttr, sqlQuery, query.SkipCount, query.TakeCount); } cmd.CommandText = sqlQuery; var property = listAttr.Find(delegate(Mapper m) { return(m.PropertyMapperName == propertyName); }); if (property == null) { throw new GDAException("Property {0} not found in {1}.", propertyName, typeof(Model).FullName); } IDataReader dReader = null; if (session == null) { try { conn.Open(); } catch (Exception ex) { throw new GDAException(ex); } GDAConnectionManager.NotifyConnectionOpened(conn); } try { SendMessageDebugTrace("CommandText: " + cmd.CommandText); using (var executionHandler = Diagnostics.GDATrace.CreateExecutionHandler(cmd)) try { dReader = cmd.ExecuteReader(); } catch (Exception ex) { ex = new GDAException(ex); executionHandler.Fail(ex); throw ex; } if (dReader.FieldCount == 0) { throw new GDAException("The query not return any field."); } var propertyExists = false; while (dReader.Read()) { var i = new GDADataRecord(dReader, null); if (!propertyExists && i.GetOrdinal(property.Name) < 0) { yield break; } propertyExists = true; yield return(new GDAPropertyValue(i.GetValue(property.Name), true)); } } finally { if (session == null) { try { conn.Close(); } catch { SendMessageDebugTrace("Error close connection."); } } if (dReader != null) { dReader.Close(); } } }