Exemple #1
0
        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;

        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
            }
        }