private void QueryMultipleTest <T1, T2, T3, T4>(T1 value1, T2 value2, T3 value3 = default(T3), T4 value4 = default(T4))
        {
            // set-up
            ISqlQuery   sqlQuery   = A.Fake <ISqlQuery>();
            SqlText     sqlText    = A.Fake <SqlText>();
            IGridReader gridReader = A.Fake <IGridReader>();

            if (value1 != null)
            {
                A.CallTo(() => gridReader.Read <T1>()).Returns(new[] { value1 });
            }

            if (value2 != null)
            {
                A.CallTo(() => gridReader.Read <T2>()).Returns(new[] { value2 });
            }

            if (value3 != null)
            {
                A.CallTo(() => gridReader.Read <T3>()).Returns(new[] { value3 });
            }

            if (value4 != null)
            {
                A.CallTo(() => gridReader.Read <T4>()).Returns(new[] { value4 });
            }

            A.CallTo(() => sqlQuery.QueryMultiple(A <string> .Ignored, A <ParameterCollection> .Ignored, CommandType.Text, A <int?> .Ignored, A <Action <IDbConnection> > .Ignored)).Returns(gridReader);

            IEnumerable <IEnumerable> result;

            // call and assert

            if (value4 != null)
            {
                result = sqlQuery.QueryMultiple <T1, T2, T3, T4>(sqlText);
                ((IEnumerable <T1>)result.First()).First().MustBe(value1);
                ((IEnumerable <T2>)result.Skip(1).First()).First().MustBe(value2);
                ((IEnumerable <T3>)result.Skip(2).First()).First().MustBe(value3);
                ((IEnumerable <T4>)result.Skip(3).First()).First().MustBe(value4);
            }
            else if (value3 != null)
            {
                result = sqlQuery.QueryMultiple <T1, T2, T3>(sqlText);
                ((IEnumerable <T1>)result.First()).First().MustBe(value1);
                ((IEnumerable <T2>)result.Skip(1).First()).First().MustBe(value2);
                ((IEnumerable <T3>)result.Skip(2).First()).First().MustBe(value3);
            }
            else
            {
                result = sqlQuery.QueryMultiple <T1, T2>(sqlText);
                ((IEnumerable <T1>)result.First()).First().MustBe(value1);
                ((IEnumerable <T2>)result.Skip(1).First()).First().MustBe(value2);
            }
        }
        public void QueryMultiple_executes_with_arguments()
        {
            // set-up
            ISqlQuery           sqlQuery   = A.Fake <ISqlQuery>();
            SqlText             sqlText    = A.Fake <SqlText>();
            ParameterCollection parameters = new ParameterCollection();
            const string        sql        = "select 1";

            A.CallTo(() => sqlText.Sql()).Returns(sql);
            A.CallTo(() => sqlText.Parameters).Returns(parameters);

            // call tolist because of the yield delayed evaluation
            sqlQuery.QueryMultiple <int, DateTime>(sqlText).ToList();

            // assert
            A.CallTo(() => sqlQuery.QueryMultiple(sqlText.Sql(), sqlText.Parameters, CommandType.Text, A <int?> .Ignored, A <Action <IDbConnection> > .Ignored)).MustHaveHappenedOnceExactly();
        }
Example #3
0
        /// <summary>
        /// Returns multiple recordsets for the provided types.
        /// </summary>
        /// <typeparam name="TFirst"></typeparam>
        /// <typeparam name="TSecond"></typeparam>
        /// <param name="sqlQuery"></param>
        /// <param name="sqlText"></param>
        /// <param name="onExecute"></param>
        /// <returns></returns>
        public static IEnumerable <IEnumerable> QueryMultiple <TFirst, TSecond>(this ISqlQuery sqlQuery, SqlText sqlText, Action <IDbConnection> onExecute = null)
        {
            using (IGridReader gridReader = sqlQuery.QueryMultiple(sqlText.Sql(), sqlText.Parameters, commandType: CommandType.Text, onExecute: onExecute))
            {
                yield return(gridReader.Read <TFirst>());

                yield return(gridReader.Read <TSecond>());
            }
        }
        public void QueryMultiple_executes_connection_callback()
        {
            // set-up
            ISqlQuery    sqlQuery = A.Fake <ISqlQuery>();
            SqlText      sqlText  = A.Fake <SqlText>();
            const string sql      = "select 1";

            A.CallTo(() => sqlText.Sql()).Returns(sql);
            Action <IDbConnection> callback = A.Fake <Action <IDbConnection> >();

            A.CallTo(() => sqlQuery.QueryMultiple(sql, A <object> .Ignored, CommandType.Text, A <int?> .Ignored, callback)).Invokes(() => callback(null));

            // call tolist because of the yield delayed evaluation
            sqlQuery.QueryMultiple <string, int>(sqlText, callback).ToList();

            // assert
            A.CallTo(() => callback(A <IDbConnection> .Ignored)).MustHaveHappenedOnceExactly();
        }
Example #5
0
        /// <summary>
        /// Returns multiple recordsets for the provided types.
        /// </summary>
        /// <typeparam name="TFirst"></typeparam>
        /// <typeparam name="TSecond"></typeparam>
        /// <typeparam name="TThird"></typeparam>
        /// <param name="sqlQuery"></param>
        /// <param name="sqlText"></param>
        /// <returns></returns>
        public static IEnumerable <IEnumerable> QueryMultiple <TFirst, TSecond, TThird>(this ISqlQuery sqlQuery, SqlText sqlText)
        {
            using (IGridReader gridReader = sqlQuery.QueryMultiple(sqlText.Sql(), sqlText.Parameters, commandType: CommandType.Text))
            {
                yield return(gridReader.Read <TFirst>());

                yield return(gridReader.Read <TSecond>());

                yield return(gridReader.Read <TThird>());
            }
        }
        public void QueryPage_excutes_with_arguments()
        {
            // set-up
            ISqlQuery           sqlQuery   = A.Fake <ISqlQuery>();
            ParameterCollection parameters = new ParameterCollection();
            Select select = new Select();

            // call
            sqlQuery.QueryPage <DateTime>(select);

            // assert
            A.CallTo(() => sqlQuery.QueryMultiple(select.Sql(), select.Parameters, CommandType.Text, A <int?> .Ignored, A <Action <IDbConnection> > .Ignored)).MustHaveHappenedOnceExactly();
        }
        public void QueryPage_gets_count_from_data_count_when_includeCount_is_false()
        {
            // set-up
            ISqlQuery   sqlQuery   = A.Fake <ISqlQuery>();
            Select      select     = new Select(includeCount: false);
            IGridReader gridReader = A.Fake <IGridReader>();
            DateTime    now        = DateTime.Now;

            A.CallTo(() => gridReader.Read <DateTime>()).Returns(new[] { now });
            A.CallTo(() => gridReader.Read <int>()).Returns(new[] { 5 });
            A.CallTo(() => sqlQuery.QueryMultiple(select.Sql(), select.Parameters, CommandType.Text, A <int?> .Ignored, A <Action <IDbConnection> > .Ignored)).Returns(gridReader);

            // call
            DataPage <DateTime> dataPage = sqlQuery.QueryPage <DateTime>(select);

            // assert
            dataPage.Count.MustBe(1);
            dataPage.Data.First().MustBe(now);
        }