public static T ExecuteScalar <T>(this QueryFactory db, Query query, IDbTransaction transaction = null, CommandType?commandType = null)
        {
            var compiled = db.compile(query.Limit(1));

            return(db.Connection.ExecuteScalar <T>(
                       compiled.Sql,
                       compiled.Bindings,
                       transaction,
                       db.QueryTimeout,
                       commandType
                       ));
        }
        public static int Execute(this QueryFactory db, Query query, IDbTransaction transaction = null, CommandType?commandType = null)
        {
            var compiled = db.compile(query);

            return(db.Connection.Execute(
                       compiled.Sql,
                       compiled.NamedBindings,
                       transaction,
                       db.QueryTimeout,
                       commandType
                       ));
        }
        public static SqlMapper.GridReader GetMultiple <T>(
            this QueryFactory db,
            Query[] queries,
            IDbTransaction transaction = null,
            CommandType?commandType    = null
            )
        {
            var compiled = queries
                           .Select(q => db.compile(q))
                           .Aggregate((a, b) => a + b);

            return(db.Connection.QueryMultiple(
                       compiled.Sql,
                       compiled.Bindings,
                       transaction,
                       db.QueryTimeout,
                       commandType
                       ));
        }
        public static T FirstOrDefault <T>(this QueryFactory db, Query query)
        {
            var compiled = db.compile(query.Limit(1));

            return(db.Connection.QueryFirstOrDefault <T>(compiled.Sql, compiled.Bindings));
        }
        public static IEnumerable <IDictionary <string, object> > GetDictionary(this QueryFactory db, Query query)
        {
            var compiled = db.compile(query);

            return(db.Connection.Query(compiled.Sql, compiled.Bindings) as IEnumerable <IDictionary <string, object> >);
        }
        public static IEnumerable <T> Get <T>(this QueryFactory db, Query query)
        {
            var compiled = db.compile(query);

            return(db.Connection.Query <T>(compiled.Sql, compiled.Bindings));
        }