/// <summary> /// Creates a Command Parameter Setter. /// The placeholders ${column:_} and ${context:_} will be replaced by real command parameter like @myParameter. /// The parameters will be assigned during execution with parent row column values or values from the context /// </summary> /// <param name="sqlText">sql text to execute</param> /// <param name="connection">Connection which is used to create the command objects</param> /// <param name="prefix">Command paramenter prefix types</param> public DefaultCommandWithParameterSetter(string sqlText, IDbConnection connection, CommandParameterPrefix prefix) { this.prefix = prefix; command = connection.CreateCommand(); var processedSqlText = ParseParameterExpression(sqlText, this.parameterExpressions, prefix); command.CommandText = processedSqlText; command.Prepare(); }
/// <summary> /// Creates new Commands for all queries within the tree. /// The complete object graph will be processed. /// </summary> /// <param name="mappedObject">root Object to start</param> /// <param name="prefix">Command parameter prefix type <see cref="CommandParameterPrefix"/></param> public void CreateCommandsForAllMappedQueries(MappedObject mappedObject, CommandParameterPrefix prefix) { if (queryCommands != null) { return; } queryCommands = new Dictionary <MappedQuery, ICommandWithParameterSetter>(); InternalCreateQueryNewCommands(mappedObject, prefix, queryCommands); }
/// <summary> /// Creates a Command Parameter Setter. /// The placeholders ${column:_} and ${context:_} will be replaced by real command parameter like @myParameter. /// The parameters will be assigned during execution with parent row column values or values from the context /// </summary> /// <param name="sqlText">sql text to execute</param> /// <param name="connection">Connection which is used to create the command objects</param> /// <param name="prefix">Command paramenter prefix types</param> public DefaultCommandWithParameterSetter(string sqlText, IConnectionProvider connectionProvider, CommandParameterPrefix prefix) { this.prefix = prefix; connection = connectionProvider.GetNewConnection(); connection.Open(); command = connection.CreateCommand(); var processedSqlText = ParseParameterExpression(sqlText, this.parameterExpressions, prefix, command); command.CommandText = processedSqlText; command.Prepare(); }
/// <summary> /// Return the matching prefix char. /// '@' or ':' /// </summary> /// <param name="prefix">prefix type</param> /// <returns>for AtSign='@' and Colon=':'</returns> public static string ToRealPrefix(this CommandParameterPrefix prefix) { switch (prefix) { case CommandParameterPrefix.AtSign: return("@"); case CommandParameterPrefix.Colon: return(":"); } return(null); }
internal void InternalCreateQueryNewCommands(MappedObject mappedObject, CommandParameterPrefix prefix, IDictionary <MappedQuery, ICommandWithParameterSetter> commands) { if (mappedObject is MappedQuery) { var mappedQuery = mappedObject as MappedQuery; var queryWithNestedResults = mappedObject as MappedQueryWithNestedResults; var queryText = queryWithNestedResults != null?EnforceOrderingOfQueryWithNestedResults(queryWithNestedResults.Query, queryWithNestedResults.IdColumn) : mappedQuery.Query; commands.Add(mappedQuery, commandSetterFactory.CreateCommand(queryText, connection, prefix)); } foreach (var mappedProperty in mappedObject.MappedPropertyList) { if (mappedProperty.GetValidQuery() != null) { InternalCreateQueryNewCommands(mappedProperty.GetValidQuery(), prefix, commands); } if (mappedProperty.MappedObject != null) { InternalCreateQueryNewCommands(mappedProperty.MappedObject, prefix, commands); } } }
/// <summary> /// Creates a new DefaultCommandParameterSetter /// </summary> /// <param name="sqlText">sql text to execute</param> /// <param name="connection">Connection which is used to create the command objects</param> /// <param name="prefix">Command paramenter prefix types</param> /// <returns>new DefaultCommandParameterSetter instance</returns> public ICommandWithParameterSetter CreateCommand(string sqlText, IConnectionProvider connectionProvider, CommandParameterPrefix prefix) { return(new DefaultCommandWithParameterSetter(sqlText, connectionProvider, prefix)); }
internal string ReplaceParameter(Match match, List <Func <ParentObject, IDictionary <string, object>, object> > parsedParameterExpression, CommandParameterPrefix prefix, IDbCommand dbCommand) { var newParameterIndex = parsedParameterExpression.Count; var expression = RemovePlaceholderPattern(match.Value); string dbTypeName = null; if (expression.StartsWith(PREFIX_LOOKUP_COLUMN)) { var parts = ParseDbTypeName(expression.Remove(0, PREFIX_LOOKUP_COLUMN.Length)); dbTypeName = parts.Item2; parsedParameterExpression.Add(CreateLookUpFunc(parts.Item1)); } if (expression.StartsWith(PREFIX_LOOKUP_CONTEXT)) { var parts = ParseDbTypeName(expression.Remove(0, PREFIX_LOOKUP_CONTEXT.Length)); dbTypeName = parts.Item2; parsedParameterExpression.Add(CreateContextLookUpFunc(parts.Item1)); } var paramName = prefix.ToRealPrefix() + PARAM_PREFIX + newParameterIndex; CreateDbParameterAndAssignValue(dbCommand, null, paramName, dbTypeName); return(paramName); }
internal string ParseParameterExpression(string sqlText, List <Func <ParentObject, IDictionary <string, object>, object> > parsedParameterExpression, CommandParameterPrefix prefix, IDbCommand dbCommand) { var regExpMatcher = new Regex(PLACEHOLDER_PATTERN, RegexOptions.IgnoreCase); return(regExpMatcher.Replace(sqlText, match => ReplaceParameter(match, parsedParameterExpression, prefix, command))); }
internal string ReplaceParameter(Match match, List <Func <ParentObject, IDictionary <string, object>, object> > parsedParameterExpression, CommandParameterPrefix prefix) { var newParameterIndex = parsedParameterExpression.Count; var expression = RemovePlaceholderPattern(match.Value); if (expression.StartsWith(PREFIX_LOOKUP_COLUMN)) { parsedParameterExpression.Add(CreateLookUpFunc(expression.Remove(0, PREFIX_LOOKUP_COLUMN.Length))); } if (expression.StartsWith(PREFIX_LOOKUP_CONTEXT)) { parsedParameterExpression.Add(CreateContextLookUpFunc(expression.Remove(0, PREFIX_LOOKUP_CONTEXT.Length))); } return(prefix.ToRealPrefix() + PARAM_PREFIX + newParameterIndex); }