コード例 #1
0
        public string Compile(QueryBuilder.QuerySetup query, Facet facet, string intervalQuery, string countColumn)
        {
            string sql = $@"

            WITH categories(category, lower, upper) AS (
                {intervalQuery}
            ), outerbounds(lower, upper) AS (
                SELECT MIN(lower), MAX(upper)
                FROM categories
            )
                SELECT c.category, c.lower, c.upper, COALESCE(r.count_column, 0) as count_column
                FROM categories c
                LEFT JOIN (
                    SELECT category, COUNT(DISTINCT {countColumn}) AS count_column
                    FROM {query.Facet.TargetTable.ResolvedSqlJoinName}
                    CROSS JOIN outerbounds
                    JOIN categories
		              ON categories.lower <= cast({facet.CategoryIdExpr} as decimal(15, 6))
		             AND categories.upper >= cast({facet.CategoryIdExpr} as decimal(15, 6))
		             AND (NOT (categories.upper < outerbounds.upper AND cast({facet.CategoryIdExpr} as decimal(15, 6)) = categories.upper))
                    {query.Joins.Combine("\n\t\t\t\t\t")}
                    WHERE TRUE
                      { "AND ".GlueTo(query.Criterias.Combine(" AND ")) }
                    GROUP BY category
                ) AS r
                  ON r.category = c.category
                ORDER BY c.lower";

            return(sql);
        }
コード例 #2
0
        public string Compile(QueryBuilder.QuerySetup querySetup, Facet facet)
        {
            string sql = $@"
          SELECT MIN({facet.CategoryIdExpr}) AS lower, MAX({facet.CategoryIdExpr}) AS upper
          FROM {facet.TargetTable.ResolvedSqlJoinName}
        ";

            return(sql);
        }
コード例 #3
0
        public virtual string Compile(QueryBuilder.QuerySetup query, Facet facet, string categoryNameFilter)
        {
            string sql = $@"
            SELECT cast({facet.CategoryIdExpr} AS varchar) AS category, {facet.CategoryNameExpr} AS name
            FROM {query.Facet.TargetTable.ResolvedSqlJoinName}
                 {query.Joins.Combine("")}
            WHERE 1 = 1
              {"AND ".GlueTo(CategoryNameLike(facet, categoryNameFilter)) }
              {"AND ".GlueTo(query.Criterias.Combine(" AND "))}
            GROUP BY 1, 2
            {SortBy(facet)}";

            return(sql);
        }
コード例 #4
0
        public string Compile(QueryBuilder.QuerySetup query, Facet facet, Facet countFacet, string aggType)
        {
            string sql = $@"
            SELECT category, {aggType}(value) AS count
            FROM (
                SELECT {facet.CategoryIdExpr} AS category, {countFacet.CategoryIdExpr} AS value
                FROM {query.Facet.TargetTable.ResolvedSqlJoinName}
                     {query.Joins.Combine("\t\t\t\t\t\n")}
                WHERE 1 = 1
                {"AND ".GlueTo(query.Criterias.Combine(" AND "))}
                GROUP BY {facet.CategoryIdExpr}, {countFacet.CategoryIdExpr}
            ) AS x
            GROUP BY category;
        ";

            return(sql);
        }