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); }
/// <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; }
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); }
/// <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)); }
public WhereClauseGroup(ISqlDefinitionFactory factory) { this.Factory = factory; }
/// <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; }
/// <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)); }