code: def compile(self):
          
          # Can't tell if this is a hack or not. Revisit later
          self.context.set_query(self)
  
          # If any subqueries, translate them and add to beginning of query as
          # part of the WITH section
          with_frag = self.format_subqueries()
  
          # SELECT
          select_frag = self.format_select_set()
  
          # FROM, JOIN, UNION
          from_frag = self.format_table_set()
  
          # WHERE
          where_frag = self.format_where()
  
          # GROUP BY and HAVING
          groupby_frag = self.format_group_by()
  
          # ORDER BY
          order_frag = self.format_order_by()
  
          # LIMIT
          limit_frag = self.format_limit()
  
          # Glue together the query fragments and return
          query = '\n'.join(
              filter(
                  None,
                  [
                      with_frag,
                      select_frag,
                      from_frag,
                      where_frag,
                      groupby_frag,
                      order_frag,
                      limit_frag,
                  ],
              )
          )
          return query
docs: This method isn't yet idempotent; calling multiple times may yield
          unexpected results