Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
 /// <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);
 }
Ejemplo n.º 3
0
        /// <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();
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }
Ejemplo n.º 6
0
 /// <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));
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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)));
        }
Ejemplo n.º 9
0
        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);
        }