/// <summary> /// Renomea a coluna para o nome do mapeamento. /// </summary> /// <param name="provider">Provider que será usado para renomear.</param> internal void RenameToMapper(GDA.Interfaces.IProvider provider) { if (!string.IsNullOrEmpty(DBColumnName)) { Rename(provider != null ? provider.QuoteExpression(DBColumnName) : DBColumnName); } }
/// <summary> /// Passa a consulta para string. /// </summary> /// <param name="provider">Provider usado para gerar a consulta.</param> /// <param name="parameterContainer"></param> /// <returns></returns> public string Parser2(GDA.Interfaces.IProvider provider, IGDAParameterContainer parameterContainer) { foreach (TableInfo ti in TablesInfo) { ti.RenameToMapper(); foreach (ColumnInfo ci in ti.Columns) { ci.RenameToMapper(provider); } } foreach (var variableInfo in VariablesInfo) { variableInfo.Replace(provider, parameterContainer, null); } return((new ParserToSqlCommand(this._parser, provider.QuoteExpressionBegin, provider.QuoteExpressionEnd)).SqlCommand); }
/// <summary> /// Constrói as informações para o resultado da consulta. /// </summary> /// <param name="provider">Provider que será utilizado no build.</param> /// <param name="aggregationFunction">Função de agregação usada para recuperar o resultado.</param> /// <param name="classesDictionary">Dicionário com as classe que já foram processadas.</param> /// <returns></returns> public override QueryReturnInfo BuildResultInfo2(GDA.Interfaces.IProvider provider, string aggregationFunction, Dictionary <string, Type> classesDictionary) { var query = Parser2(provider, parameters); query = query.TrimStart(' ', '\r', '\n', '\t'); if (query.IndexOf("SELECT ", StringComparison.InvariantCultureIgnoreCase) == 0) { var fromPos = query.IndexOf(" FROM "); if (fromPos > 0) { query = query.Substring(0, "SELECT ".Length) + aggregationFunction + query.Substring(fromPos); } } var orderByIndex = query.LastIndexOf("ORDER BY"); if (orderByIndex >= 0) { query = query.Substring(0, orderByIndex); } return(new QueryReturnInfo(query, parameters, new List <Mapper>())); }
/// <summary> /// Executa o replace da variável. /// </summary> /// <param name="provider"></param> /// <param name="parameterContainer">Container dos parametros que serão processados.</param> /// <param name="classesDictionary"></param> /// <returns></returns> public bool Replace(GDA.Interfaces.IProvider provider, IGDAParameterContainer parameterContainer, Dictionary <string, Type> classesDictionary) { if (parameterContainer == null) { return(false); } GDAParameter parameter = null; if (!parameterContainer.TryGet(Name, out parameter)) { return(false); } QueryReturnInfo returnInfo = null; if (parameter.Value is IQuery) { var query = (IQuery)parameter.Value; returnInfo = query.BuildResultInfo2(provider, query.AggregationFunctionProperty, classesDictionary); } else { returnInfo = parameter.Value as QueryReturnInfo; } if (returnInfo != null) { _expression.Text = returnInfo.CommandText; foreach (var p in returnInfo.Parameters) { if (!parameterContainer.ContainsKey(p.ParameterName)) { parameterContainer.Add(p); } } return(true); } return(false); }
//// <summary> /// Constrói as informações para o resultado da consulta. /// </summary> /// <param name="provider">Provider que será utilizado no build.</param> /// <param name="aggregationFunction">Função de agregação usada para recuperar o resultado.</param> /// <param name="classesDictionary">Dicionário com as classe que já foram processadas.</param> /// <returns></returns> public override QueryReturnInfo BuildResultInfo2(GDA.Interfaces.IProvider provider, string aggregationFunction, Dictionary <string, Type> classesDictionary) { if (string.IsNullOrEmpty(_commandText)) { throw new QueryException("Command text not informed."); } var query = _commandText; query = query.TrimStart(' ', '\r', '\n', '\t'); var match = Regex.Match(_commandText, "SELECT(?<selectpart>(\r|\n|\r\n|.*?)*?)FROM", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); if (!match.Success) { throw new QueryException("Invalid aggregation function.\r\nNot found SELECT ... FROM for substitution in command"); } query = query.Replace(match.Groups["selectpart"].Value, " " + aggregationFunction + " "); var orderByIndex = query.LastIndexOf("ORDER BY"); if (orderByIndex >= 0) { query = query.Substring(0, orderByIndex); } return(new QueryReturnInfo(query, this.Parameters, new List <Mapper>())); }
/// <summary> /// Construtor Padr�o. /// </summary> /// <param name="connectionString">ConnectionString a ser utilizado pelo provider.</param> /// <param name="provider">Provider a ser tratado.</param> public ProviderConfiguration(string connectionString, GDA.Interfaces.IProvider provider) { _ConnectionString = connectionString; _Provider = provider; }
/// <summary> /// Constrói as informações para o resultado da consulta. /// </summary> /// <param name="provider">Provider que será utilizado no build.</param> /// <param name="aggregationFunction">Função de agregação usada para recuperar o resultado.</param> /// <param name="classesDictionary">Dicionário com as classe que já foram processadas.</param> /// <returns></returns> public abstract QueryReturnInfo BuildResultInfo2(GDA.Interfaces.IProvider provider, string aggregationFunction, Dictionary <string, Type> classesDictionary);
/// <summary> /// Constrói as informações para o resultado da consulta. /// </summary> /// <param name="aggregationFunction">Função de agregação usada para recuperar o resultado.</param> /// <param name="provider">Provider que será utilizado no build.</param> /// <returns></returns> public abstract QueryReturnInfo BuildResultInfo2(GDA.Interfaces.IProvider provider, string aggregationFunction);
/// <summary> /// Constrói as informações para o resultado da consulta. /// </summary> /// <param name="aggregationFunction">Função de agregação usada para recuperar o resultado.</param> /// <returns></returns> public override QueryReturnInfo BuildResultInfo2(GDA.Interfaces.IProvider provider, string aggregationFunction) { return(BuildResultInfo2(provider, aggregationFunction, new Dictionary <string, Type>())); }
/// <summary> /// Passa a consulta para string. /// </summary> /// <param name="provider">Provider usado para gerar a consulta.</param> /// <returns></returns> public string Parser(GDA.Interfaces.IProvider provider) { return(Parser2(provider, null)); }
/// <summary> /// Converte um parametro do GDA para um parametro do ADO.NET. /// </summary> /// <param name="cmd"></param> /// <param name="parameter"></param> /// <param name="provider">Provider que será usado na conversão.</param> /// <returns></returns> internal static IDbDataParameter ConvertGDAParameter(IDbCommand cmd, GDAParameter parameter, GDA.Interfaces.IProvider provider) { if (provider is Interfaces.IParameterConverter2) { return(((Interfaces.IParameterConverter2)provider).Converter(cmd, parameter)); } else if (provider is Interfaces.IParameterConverter) { return(((Interfaces.IParameterConverter)provider).Convert(parameter)); } else { IDbDataParameter p = cmd.CreateParameter(); if (p.Direction != parameter.Direction) { p.Direction = parameter.Direction; } p.Size = parameter.Size; try { if (parameter.ParameterName[0] == '?') { p.ParameterName = provider.ParameterPrefix + parameter.ParameterName.Substring(1) + provider.ParameterSuffix; } else { p.ParameterName = parameter.ParameterName; } } catch (Exception ex) { throw new GDAException("Error on convert parameter name '" + parameter.ParameterName + "'.", ex); } if (parameter.DbTypeIsDefined) { p.DbType = parameter.DbType; } provider.SetParameterValue(p, parameter.Value == null ? DBNull.Value : parameter.Value); return(p); } }