public void TestDateTime() { CheckSelect("SELECT #2007-07-11 16:30:00#"); CheckSelect("SELECT TIMESTAMP '2007-07-11 16:30:00'", "SELECT #2007-07-11 16:30:00#"); IStatement statement = Factory.CreateStatement( "select * from inventory where (article=@x) and (modate>@last)"); Assert.IsNotNull(statement); DateTime dateTime = new DateTime(2007, 7, 11, 16, 30, 0); MAccessTailor tailor = new MAccessTailor(); tailor.AddDate("@LAST", dateTime); statement.Traverse(tailor); StringBuilder expected = new StringBuilder(); expected.Append("SELECT *\r\nFROM inventory\r\n"); expected.Append("WHERE (article = @x) AND "); expected.Append("(modate > #2007-07-11 16:30:00#)"); Assert.AreEqual(expected.ToString(), TestUtil.Stringify(statement)); CheckSelect("SELECT GETDATE()", "SELECT Now()"); CheckSelect("SELECT Now()", "SELECT Now()"); CheckSelect("SELECT sysdate", "SELECT Now()"); }
public override string FixSql(string sql) { if (!RegexCaseWhen.IsMatch(sql)) { return sql; } var matches = RegexCaseWhen.Matches(sql); foreach (Match match in matches) { IStatement statement = Factory.CreateStatement("SELECT XXXX," + match.Value + " FROM YYYY"); var tailor = new MAccessTailor(); statement.Traverse(tailor); Stringifier stringifier = new Stringifier(); statement.Traverse(stringifier); var sqlCaseWhenFixed = stringifier.ToSql(); sqlCaseWhenFixed = sqlCaseWhenFixed.Replace("SELECT XXXX,", ""); sqlCaseWhenFixed = sqlCaseWhenFixed.Replace("FROM YYYY", ""); sql = sql.Replace(match.Value, sqlCaseWhenFixed); } return sql; }
public string TailorCommand() { bool hasParsePotential = HasCommandText(); if ((!hasParsePotential && (m_statement == null)) || m_tailored) { return(m_inner.CommandText); } if (m_inner.CommandType != CommandType.Text) { m_tailored = true; return(m_inner.CommandText); } IStatement statement = hasParsePotential ? CondParse() : m_statement; if (statement != null) { IVisitor tailor = Factory.CreateTailor(m_databaseProvider); MAccessTailor accessTailor = tailor as MAccessTailor; if (accessTailor != null) { List <string> dates = new List <string>(); foreach (DbParameter dbParameter in m_inner.Parameters) { if (dbParameter.Value is DateTime) { string name = dbParameter.ParameterName; accessTailor.AddDate(name, (DateTime)(dbParameter.Value)); dates.Add(name); } } foreach (string dateName in dates) { m_inner.Parameters.RemoveAt(dateName); } } statement.Traverse(tailor); Stringifier stringifier = new Stringifier(); statement.Traverse(stringifier); m_inner.CommandText = stringifier.ToSql(); m_statement = statement; } m_tailored = true; return(m_inner.CommandText); }
void CheckSelect(string from, string to) { if (from == null) { throw new ArgumentNullException("from"); } if (to == null) { throw new ArgumentNullException("to"); } IStatement statement = Factory.CreateStatement(from); Assert.IsNotNull(statement); MAccessTailor tailor = new MAccessTailor(); statement.Traverse(tailor); Assert.AreEqual(to, TestUtil.Stringify(statement)); }
void CheckTailorError(string tooHard) { if (tooHard == null) { throw new ArgumentNullException("tooHard"); } IStatement statement = Factory.CreateStatement(tooHard); Assert.IsNotNull(statement); try { MAccessTailor tailor = new MAccessTailor(); statement.Traverse(tailor); Assert.Fail(); } catch (InvalidOperationException exception) { Assert.IsNotNull(exception); } }