code: def get_compiler(self, using=None, connection=None):
          
          # Copy the body of this method from Django except the final
          # return statement. We will ignore code coverage for this.
          if using is None and connection is None:  # pragma: no cover
              raise ValueError("Need either using or connection")
          if using:
              connection = connections[using]
          # Check that the compiler will be able to execute the query
          for alias, aggregate in self.annotation_select.items():
              connection.ops.check_expression_support(aggregate)
          # Instantiate the custom compiler.
          return {
              CTEUpdateQuery: CTEUpdateQueryCompiler,
              CTEInsertQuery: CTEInsertQueryCompiler,
              CTEDeleteQuery: CTEDeleteQueryCompiler,
              CTEAggregateQuery: CTEAggregateQueryCompiler,
          }.get(self.__class__, CTEQueryCompiler)(self, connection, using)
docs: Overrides the Query method get_compiler in order to return
              an instance of the above custom compiler.