internal SqlString[] SplitWithRegex(string pattern) { var sql = Regex.Split(ToString(), pattern).Select(s => SqlString.Parse(s)).ToArray(); int i = 0; foreach (var p in sql.SelectMany(s => s.GetParameters())) { p.BackTrack = GetParameters().ElementAt(i).BackTrack; i++; } return(sql); }
/// <summary> /// This method is a bit of a hack, and assumes /// that the column on the "right" side of the /// join appears on the "left" side of the /// operator, which is extremely weird if this /// was a normal join condition, but is natural /// for a filter. /// </summary> private void AddLeftOuterJoinCondition(SqlString on) { StringBuilder buf = new StringBuilder(on.ToString()); for (int i = 0; i < buf.Length; i++) { char character = buf[i]; bool isInsertPoint = Operators.Contains(character) || (character == ' ' && buf.Length > i + 3 && "is ".Equals(buf.ToString(i + 1, 3))); if (isInsertPoint) { buf.Insert(i, "(+)"); i += 3; } } AddCondition(SqlString.Parse(buf.ToString())); }
internal SqlString[] SplitWithRegex(string pattern) { return(Regex.Split(ToString(), pattern).Select(s => SqlString.Parse(s)).ToArray()); }