Beispiel #1
0
        public void testOrderBy()
        {
            var expected    = "select count(*) from ( select * from emp ) t_";
            var transformer = new StandardCountGettingTransformer();
            var parser      = new DomaSqlParser("select * from emp order by emp.id");
            var node        = transformer.Transform(parser.Parse());
            var parameters  = new List <ParameterEmulator>();
            var builder     = new DomaSqlBuilder(node, parameters, _config);
            var result      = builder.Build();

            result.ParsedSql.Is(expected);
        }
        //[Obsolete("will remove",true)]
        //internal ISqlNode TransformSelectSqlNode(ISqlNode node, SelectOptions options)
        //{
        //    /*
        //     * Q:これは何をやっているの??
        //     * A:ページング用のSqlNodeの構築
        //     * Q:え?Countっぽいのもしてるけど??
        //     * A:それはMySQL用の特殊処理です
        //     * Q:だからどういうことだってばよ
        //     * A:よろしい
        //     *   説明しようMySQLでは下記のクエリでページングと件数の取得ができる
        //     *   1) SELECT SQL_CALC_FOUND_ROWS * FROM employees LIMIT 5, 10;
        //     *   2) SELECT FOUND_ROWS();
        //     *  簡単に言えば1のSQL_CALC_FOUND_ROWSを付加するための特殊処理ととらえればよい
        //     *
        //     * 正直わかりにくいのでMysqlPagingTransformerでSQL_CALC_FOUND_ROWSを付加したらよいのでは。。。
        //     */
        //    var transformed = node;
        //    if (options.CallCount)
        //    {
        //        transformed = ToCountCalculatingSqlNode(node);
        //    }

        //    if (options.Skip >= 0 || options.Take >= 0)
        //    {
        //        transformed = ToPagingSqlNode(transformed, options.Skip, options.Take);
        //    }

        //    return transformed;
        //}

        //[Obsolete("will remove", true)]
        //protected virtual ISqlNode ToCountCalculatingSqlNode(ISqlNode node)
        //{
        //    return node;
        //}

        internal virtual ISqlNode ToCountGettingSqlNode(ISqlNode node)
        {
            var transformer = new StandardCountGettingTransformer();

            return(transformer.Transform(node));
        }