Exemplo n.º 1
0
        /// <summary>
        /// Command를 수행하고, 결과를 XML 문자열로 반환합니다.
        /// </summary>
        /// <param name="repository">Repository</param>
        /// <param name="requestItem">요청 정보</param>
        /// <returns>Data 처리 결과의 XML 문자열</returns>
        public override string Execute(IAdoRepository repository, RequestItem requestItem)
        {
            Repository = repository;

            var method            = requestItem.Method;
            var requestParameters = requestItem.Parameters;

            if (IsDebugEnabled)
            {
                log.Debug("{0}를 수행합니다. method=[{1}], requestParameters=[{2}]",
                          GetType().FullName, method, requestParameters.CollectionToString());
            }

            var    query = repository.QueryProvider.GetQuery(method).AsText(method);
            string result;

            using (var cmd = repository.GetCommand(query, true)) {
                var scalar = repository.ExecuteScalar(cmd, GetParameters(requestParameters));
                result = JsonTool.SerializeAsText(scalar);
            }

            if (IsDebugEnabled)
            {
                log.Debug("{0}를 완료했습니다. method=[{1}], requestParameters=[{2}]",
                          GetType().FullName, method, requestParameters.CollectionToString());
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Command를 수행하고, 결과를 XML 문자열로 반환합니다.
        /// </summary>
        /// <param name="repository">Repository</param>
        /// <param name="requestItem">요청 정보</param>
        /// <returns>Data 처리 결과의 XML 문자열</returns>
        public override string Execute(IAdoRepository repository, RequestItem requestItem) {
            Repository = repository;

            var method = requestItem.Method;
            var requestParameters = requestItem.Parameters;

            if(IsDebugEnabled)
                log.Debug("{0}를 수행합니다. method=[{1}], parameters=[{2}]",
                          GetType().FullName, method, requestParameters.CollectionToString());


            var query = repository.QueryProvider.GetQuery(method).AsText(method);
            string result;

            using(var cmd = repository.GetCommand(query, GetParameters(requestParameters))) {
                var reader = repository.ExecuteReader(cmd);
                var records = BuildResponse(reader);
                result = JsonTool.SerializeAsText(records);
            }

            if(IsDebugEnabled)
                log.Debug("{0}를 완료했습니다. method=[{1}], requestParameters=[{2}]", GetType().FullName, method,
                          requestParameters.CollectionToString());

            return result;
        }
Exemplo n.º 3
0
        /// <summary>
        /// <see cref="ExecuteInstance{T}(IAdoRepository,System.Func{System.Data.IDataReader,T},DbCommand,int,int,IAdoParameter[])"/>을 비동기적으로 수행합니다.
        /// </summary>
        /// <typeparam name="T">결과 셋으로 표현할 엔티티의 수형</typeparam>
        /// <param name="repository"><see cref="IAdoRepository"/></param>
        /// <param name="nameMap">DataReader 컬럼명 - Class 속성명의 매핑 정보</param>
        /// <param name="additionalMapping">추가적인 매핑 함수</param>
        /// <param name="query">실행할 SQL문 또는 Procedure Name</param>
        /// <param name="pageIndex">결과셋의 Page Index (0부터 시작)</param>
        /// <param name="pageSize">결과셋 Paging 시의 Page Size</param>
        /// <param name="parameters">패러미터</param>
        /// <returns>매핑한 엔티티 컬렉션을 결과값으로 가지는 Task</returns>
        public static Task <IPagingList <T> > ExecuteInstanceAsync <T>(this IAdoRepository repository,
                                                                       INameMap nameMap,
                                                                       Action <IDataReader, T> additionalMapping,
                                                                       string query,
                                                                       int pageIndex,
                                                                       int pageSize,
                                                                       params IAdoParameter[] parameters) where T : class
        {
            nameMap.ShouldNotBeNull("nameMap");
            query.ShouldNotBeWhiteSpace("query");

            if (IsDebugEnabled)
            {
                log.Debug("비동기적으로 ExecuteReader<{0}>()을 수행하고, 결과를 IList<{0}>으로 매핑합니다... query=[{1}]", typeof(T).FullName, query);
            }

            return(Task.Factory.StartNew(() => {
                using (var cmd = repository.GetCommand(query))
                    return repository.ExecuteInstance <T>(nameMap,
                                                          additionalMapping,
                                                          cmd,
                                                          pageIndex,
                                                          pageSize,
                                                          parameters);
            }));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Command를 수행하고, 결과를 XML 문자열로 반환합니다.
        /// </summary>
        /// <param name="repository">Repository</param>
        /// <param name="requestItem">요청 정보</param>
        /// <returns>Data 처리 결과의 XML 문자열</returns>
        public override string Execute(IAdoRepository repository, RequestItem requestItem) {
            Repository = repository;

            var method = requestItem.Method;
            var requestParameters = requestItem.Parameters;

            if(IsDebugEnabled)
                log.Debug("{0}를 수행합니다... method=[{1}], requestParameters=[{2}]",
                          GetType().FullName, method, requestParameters.CollectionToString());

            var query = repository.QueryProvider.GetQuery(method).AsText(method);
            string result;

            using(var cmd = repository.GetCommand(query, true)) {
                repository.ExecuteNonQuery(cmd, GetParameters(requestParameters));
                var outputs = AdoTool.GetOutputParameters(repository.Db, cmd);

                result = JsonTool.SerializeAsText(outputs);
            }

            if(IsDebugEnabled)
                log.Debug("{0}를 완료했습니다. method=[{1}], requestParameters=[{2}]",
                          GetType().FullName, method, requestParameters.CollectionToString());

            return result;
        }
Exemplo n.º 5
0
        /// <summary>
        /// 지정된 쿼리 문을 실행한 결과 셋의 레코드 갯수를 구한다.
        /// </summary>
        /// <param name="repository">IAdoRepository 인스턴스</param>
        /// <param name="query">실행할 Command 객체</param>
        /// <param name="parameters">Command 인자 정보</param>
        /// <returns>결과 셋의 레코드 수</returns>
        /// <remarks>
        /// 실제 SQL의 count(*) 함수를 생성하는 것이 아니라, IDataReader를 이용하여 결과 셋을 가져와서 갯수만 센다.
        /// 장점은 DataSet을 이용하여 Paging하는 것보다 빠르고, Count 용 Query문을 따로 만들 필요가 없다.
        /// 단점은 SQL의 count(*) 함수보다는 당연히 느리다.
        /// </remarks>
        public static int Count(this IAdoRepository repository, string query, params IAdoParameter[] parameters)
        {
            query.ShouldNotBeWhiteSpace("query");

            if (AdoTool.IsSqlString(query))
            {
                return(repository.CountBySqlString(query, parameters));
            }

            using (var cmd = repository.GetCommand(query))
                return(repository.Count(cmd, parameters));
        }
Exemplo n.º 6
0
        //! ===============================================================================================

        /// <summary>
        /// 지정된 쿼리문을 CommendText로 가지는 <see cref="DbCommand"/> 인스턴스를 생성합니다.
        /// </summary>
        /// <param name="repository">IAdoRepository 인스턴스</param>
        /// <param name="query">simple query string or procedure name or queryKey of QueryProvider ([Section,] QueryName)</param>
        /// <param name="parameters">파라미터 컬렉션</param>
        /// <returns>instance of <see cref="DbCommand"/></returns>
        public static DbCommand GetCommand(this IAdoRepository repository, string query, params IAdoParameter[] parameters)
        {
            query.ShouldNotBeWhiteSpace("query");

            var cmd = repository.GetCommand(query, AdoTool.DEFAULT_DISCOVER_PARAMETER);

            if (parameters.IsNotEmptySequence())
            {
                AdoTool.SetParameterValues(repository.Db, cmd, parameters);
            }

            return(cmd);
        }
Exemplo n.º 7
0
        /// <summary>
        /// <see cref="ExecuteInstance{T}(IAdoRepository,System.Func{System.Data.IDataReader,T},System.Data.Common.DbCommand,NFramework.Data.IAdoParameter[])"/> 를 비동기적으로 수행하여,
        /// DataReader로부터 T 수형의 인스턴스를 매핑한다.
        /// </summary>
        /// <typeparam name="T">결과 셋으로 표현할 엔티티의 수형</typeparam>
        /// <param name="repository"><see cref="IAdoRepository"/></param>
        /// <param name="mapFunc">DataReader로부터 {T} 수형의 인스턴스로 변환하는 메소드</param>
        /// <param name="query">실행할 SQL문 또는 Procedure Name</param>
        /// <param name="parameters">패러미터</param>
        /// <returns>매핑한 엔티티 컬렉션을 결과값으로 가지는 Task</returns>
        public static Task <IList <T> > ExecuteInstanceAsync <T>(this IAdoRepository repository,
                                                                 Func <IDataReader, T> mapFunc,
                                                                 string query,
                                                                 params IAdoParameter[] parameters)
        {
            mapFunc.ShouldNotBeNull("mapFunc");
            query.ShouldNotBeWhiteSpace("query");

            if (IsDebugEnabled)
            {
                log.Debug("비동기 방식으로 ExecuteReader<{0}>()을 수행하고, 결과를 IList<{0}>으로 매핑합니다... query=[{1}]", typeof(T).FullName, query);
            }

            return(Task.Factory.StartNew(() => {
                using (var cmd = repository.GetCommand(query))
                    return repository.ExecuteInstance <T>(mapFunc, cmd, parameters);
            }));
        }
Exemplo n.º 8
0
        /// <summary>
        /// <see cref="ExecuteInstance{T}(IAdoRepository,NFramework.Data.Persisters.IReaderPersister{T},System.Data.Common.DbCommand,NFramework.Data.IAdoParameter[])"/> 를 비동기적으로 수행하여,
        /// DataReader로부터 T 수형의 인스턴스를 매핑한다.
        /// </summary>
        /// <typeparam name="T">결과 셋으로 표현할 엔티티의 수형</typeparam>
        /// <param name="repository"><see cref="IAdoRepository"/></param>
        /// <param name="persister">DataReader로부터 {T} 수형의 인스턴스를 생성하는 생성자</param>
        /// <param name="query">실행할 SQL문 또는 Procedure Name</param>
        /// <param name="parameters">패러미터</param>
        /// <returns>매핑한 엔티티 컬렉션을 결과값으로 가지는 Task</returns>
        public static Task <IList <T> > ExecuteInstanceAsync <T>(this IAdoRepository repository,
                                                                 IReaderPersister <T> persister,
                                                                 string query,
                                                                 params IAdoParameter[] parameters) where T : class
        {
            persister.ShouldNotBeNull("persister");
            query.ShouldNotBeWhiteSpace("query");

            if (IsDebugEnabled)
            {
                log.Debug("비동기적으로 ExecuteReader<{0}>()을 수행하고, 결과를 IList<{0}>으로 매핑합니다... query=[{1}]", typeof(T).FullName, query);
            }

            return(Task.Factory.StartNew(() => {
                using (var cmd = repository.GetCommand(query))
                    return repository.ExecuteInstance <T>(persister,
                                                          cmd,
                                                          parameters);
            }));
        }
Exemplo n.º 9
0
 /// <summary>
 /// 지정한 쿼리 문의 실행 결과 셋이 존재하는지 검사한다 (결과 셋의 레코드가 하나 이상이다)
 /// </summary>
 public static bool ExistsBySqlString(this IAdoRepository repository, string sqlString, params IAdoParameter[] parameters)
 {
     using (var cmd = repository.GetCommand(sqlString))
         return(repository.Exists(cmd, parameters));
 }
Exemplo n.º 10
0
 /// <summary>
 /// 지정한 쿼리 문의 실행 결과 셋이 존재하는지 검사한다 (결과 셋의 레코드가 하나 이상이다)
 /// </summary>
 public static bool Exists(this IAdoRepository repository, string query, params IAdoParameter[] parameters)
 {
     using (var cmd = repository.GetCommand(query))
         return(repository.Exists(cmd, parameters));
 }