コード例 #1
0
ファイル: query.py プロジェクト: rjuju/powa-web
    def get(self, database, query):
        if not self.has_extension("pg_qualstats"):
            raise HTTPError(501, "PG qualstats is not installed")
        condition = text("""datname = :database AND s.queryid = :query
                 AND coalesce_range && tstzrange(:from, :to)""")
        sql = (select(['most_filtering.quals',
                      'most_filtering.query',
                      'to_json(most_filtering) as "most filtering"',
                      'to_json(least_filtering) as "least filtering"',
                      'to_json(most_executed) as "most executed"'])
               .select_from(
                   qual_constants("most_filtering", condition)
                   .alias("most_filtering")
                   .join(
                       qual_constants("least_filtering", condition)
                       .alias("least_filtering"),
                       text("most_filtering.rownumber = "
                            "least_filtering.rownumber"))
                   .join(qual_constants("most_executed", condition)
                         .alias("most_executed"),
                         text("most_executed.rownumber = "
                              "least_filtering.rownumber"))))
        params = {"database": database, "query": query,
                  "from": self.get_argument("from"),
                  "to": self.get_argument("to")}
        quals = self.execute(sql, params=params)
        plans = []
        if quals.rowcount > 0:

            row = quals.first()
            for key in ('most filtering', 'least filtering', 'most executed'):
                vals = row[key]
                query = format_jumbled_query(row['query'], vals['constants'])
                plan = "N/A"
                try:
                    result = self.execute("EXPLAIN %s" % query,
                                          database=database)
                    plan = "\n".join(v[0] for v in result)
                except:
                    pass
                plans.append(Plan(key, vals['constants'], query,
                                  plan, vals["filter_ratio"], vals['count']))
        if len(plans) == 0:
            self.flash("No quals found for this query", "warning")
            self.render("xhr.html", content="")
            return

        self.render("database/query/explains.html", plans=plans)
コード例 #2
0
ファイル: query.py プロジェクト: Ishanroy1892/powa-web
    def get(self, database, query):
        if not self.has_extension("pg_qualstats"):
            raise HTTPError(501, "PG qualstats is not installed")
        condition = text("""datname = :database AND s.queryid = :query
                 AND coalesce_range && tstzrange(:from, :to)""")
        sql = (select([text('most_filtering.quals'),
                      text('most_filtering.query'),
                      'to_json(most_filtering) as "most filtering"',
                      'to_json(least_filtering) as "least filtering"',
                      'to_json(most_executed) as "most executed"'])
               .select_from(
                   qual_constants("most_filtering", condition)
                   .alias("most_filtering")
                   .join(
                       qual_constants("least_filtering", condition)
                       .alias("least_filtering"),
                       text("most_filtering.rownumber = "
                            "least_filtering.rownumber"))
                   .join(qual_constants("most_executed", condition)
                         .alias("most_executed"),
                         text("most_executed.rownumber = "
                              "least_filtering.rownumber"))))
        params = {"database": database, "query": query,
                  "from": self.get_argument("from"),
                  "to": self.get_argument("to")}
        quals = self.execute(sql, params=params)
        plans = []
        if quals.rowcount > 0:

            row = quals.first()
            for key in ('most filtering', 'least filtering', 'most executed'):
                vals = row[key]
                query = format_jumbled_query(row['query'], vals['constants'])
                plan = "N/A"
                try:
                    result = self.execute("EXPLAIN %s" % query,
                                          database=database)
                    plan = "\n".join(v[0] for v in result)
                except:
                    pass
                plans.append(Plan(key, vals['constants'], query,
                                  plan, vals["filter_ratio"], vals['count']))
        if len(plans) == 0:
            self.flash("No quals found for this query", "warning")
            self.render("xhr.html", content="")
            return

        self.render("database/query/explains.html", plans=plans)
コード例 #3
0
ファイル: qual.py プロジェクト: champeric/powa-web
 def query(self):
     query = (qual_constants("most_used",
                             text("""
         datname = :database AND
         s.queryid = :query AND
         qn.qualid = :qual AND
         coalesce_range && tstzrange(:from, :to)"""), top=10))
     base = qualstat_getstatdata()
     c = inner_cc(base)
     base = base.where(c.queryid == bindparam("query")).alias()
     totals = (base.select()
               .where((c.qualid == bindparam("qual")) &
                      (c.queryid == bindparam("query")))).alias()
     return (query.alias().select()
             .column(totals.c.occurences.label('total_occurences'))
             .correlate(query))
コード例 #4
0
ファイル: qual.py プロジェクト: maito26/powa-web
 def query(self):
     query = (qual_constants("most_used",
                             text("""
         datname = :database AND
         s.queryid = :query AND
         qn.qualid = :qual AND
         coalesce_range && tstzrange(:from, :to)"""),
                             top=10))
     base = qualstat_getstatdata()
     c = inner_cc(base)
     base = base.where(c.queryid == bindparam("query")).alias()
     totals = (
         base.select().where((c.qualid == bindparam("qual"))
                             & (c.queryid == bindparam("query")))).alias()
     return (query.alias().select().column(
         totals.c.occurences.label('total_occurences')).correlate(query))