Пример #1
0
 public static IEnumerable <string> GetDependNames(this ISqlDefinitionFactory factory, string sql)
 {
     foreach (Match match in Regex.Matches(sql, @"/\*\*\s*DependOn\((?<queryName>.+?)\)\s*\*/"))
     {
         yield return(match.Groups["queryName"].Value);
     }
 }
        /// <summary>
        /// 指定された引数を利用してインスタンスを初期化します。
        /// </summary>
        /// <param name="factory">名前づけSQLを取得するための <see cref="ISqlDefinitionFactory"/> </param>
        /// <param name="queryName">名前付けSQL名</param>
        /// <param name="replaceValues">置換する値</param>
        public NamedClause(ISqlDefinitionFactory factory, string queryName, params object[] replaceValues)
        {
            this.factory   = factory;
            this.QueryName = queryName;
            var plain = factory.GetPlainText(queryName);

            this.Query = factory.ReplacePlaceholder(plain, replaceValues);
        }
Пример #3
0
        /// <summary>
        /// 指定された引数を利用してインスタンスを初期化します。
        /// </summary>
        /// <param name="context">利用する <see cref="DbContext"/> </param>
        /// <param name="factory">外部定義されたSQLを取得する <see cref="ISqlDefinitionFactory"/> のインスタンス</param>
        /// <param name="logContext">ログを出力するための <see cref="LogContext"/> </param>
        /// <param name="name"> <see cref="DataQuery"/> のインスタンスの名前</param>
        public DataQuery(DbContext context, ISqlDefinitionFactory factory, LogContext logContext = null, string name = null)
        {
            Contract.NotNull(context, "context");
            Contract.NotNull(factory, "factory");

            this.Context       = context;
            this.Factory       = factory;
            this.SqlDefinition = new SqlDefinition();
            this.Parameters    = parameters.AsReadOnly();

            this.logContext = logContext;
            this.Name       = name;
        }
Пример #4
0
        public static Pipe DataQuery(this Pipe pipe, DbContext context, ISqlDefinitionFactory factory)
        {
            Contract.NotNull(pipe, "pipe");
            Contract.NotNull(context, "context");
            Contract.NotNull(factory, "factory");

            pipe.UseDefaultAction(false, (request) =>
            {
                LogContext logContext = request.Context.GetLogContext();
                DataQuery query       = new DataQuery(context, factory, logContext);
                return(request.CreateResponse(HttpStatusCode.OK, query));
            });
            return(pipe);
        }
Пример #5
0
 /// <summary>
 /// 指定したSQL文字列に定義された置換プレースホルダーを指定された値で置換します。
 /// </summary>
 /// <param name="factory"><see cref="ISqlDefinitionFactory"/> のインスタンス</param>
 /// <param name="sql">SQL文字列</param>
 /// <param name="replaceValues">置換する値</param>
 /// <returns>置換プレースホルダーを置換する値で置換されたSQL文字列</returns>
 public static string ReplacePlaceholder(this ISqlDefinitionFactory factory, string sql, params object[] replaceValues)
 {
     if (string.IsNullOrEmpty(sql))
     {
         return(sql);
     }
     if (replaceValues == null || replaceValues.Length < 1)
     {
         return(sql);
     }
     return(Regex.Replace(sql, @"/\*\{(?<param>(?<index>0|([1-9][0-9]*))(?<option>.*?))\}\*/", match =>
     {
         var index = int.Parse(match.Groups["index"].Value);
         if (replaceValues.Length <= index)
         {
             return string.Empty;
         }
         return string.Format(string.Concat("{", 0, match.Groups["option"].Value, "}"), replaceValues[index]);
     }, RegexOptions.ExplicitCapture));
 }
Пример #6
0
 public WhereClauseGroup(ISqlDefinitionFactory factory)
 {
     this.Factory = factory;
 }
Пример #7
0
        /// <summary>
        /// DataQuery の初期化処理をパイプラインに追加します。
        /// </summary>
        /// <param name="pipe"></param>
        /// <param name="queryName"></param>
        /// <param name="context"></param>
        /// <param name="factory"></param>
        /// <returns></returns>
        public static Pipe DataQuery(this Pipe pipe, string queryName, DbContext context, ISqlDefinitionFactory factory)
        {
            Contract.NotNull(pipe, "pipe");
            Contract.NotEmpty(queryName, "queryName");
            Contract.NotNull(context, "context");
            Contract.NotNull(factory, "factory");

            pipe.UseDefaultAction(false, (request) =>
            {
                DataQuery query = new DataQuery(context, factory);
                query.AppendNamedQuery(queryName);
                return(request.CreateResponse(HttpStatusCode.OK, query));
            });
            return(pipe);
        }
 /// <summary>
 /// <see cref="ISqlDefinitionFactory"/> を指定して、インスタンスを初期化します。
 /// </summary>
 /// <param name="definitionFactory">名前付けSQLを取得するための <see cref="ISqlDefinitionFactory"/> </param>
 public QueryClausePartItem(ISqlDefinitionFactory definitionFactory)
 {
     this.Factory = definitionFactory;
 }
 public QueryClausePart(ISqlDefinitionFactory factory)
 {
     Contract.NotNull(factory, "factory");
     this.Factory = factory;
 }
Пример #10
0
        /// <summary>
        /// 指定したクエリ名で定義された文字列に置換プレースホルダーを指定された値で置換した文字列を取得します。
        /// </summary>
        /// <param name="factory"><see cref="ISqlDefinitionFactory"/> のインスタンス</param>
        /// <param name="queryName">クエリ名</param>
        /// <param name="replaceValues">置換する値</param>
        /// <returns>指定したクエリ名で定義された文字列に置換プレースホルダーを指定された値で置換した文字列</returns>
        public static string GetReplacedText(this ISqlDefinitionFactory factory, string queryName, params object[] replaceValues)
        {
            var query = factory.GetPlainText(queryName);

            return(factory.ReplacePlaceholder(query, replaceValues));
        }