@@ -366,7 +366,7 @@ private module PrivateDjango {
366366 "none" , "all" , "filter" , "exclude" , "complex_filter" , "union" , "intersection" ,
367367 "difference" , "select_for_update" , "select_related" , "prefetch_related" , "order_by" ,
368368 "distinct" , "reverse" , "defer" , "only" , "using" , "annotate" , "extra" , "raw" ,
369- "datetimes" , "dates" , "values" , "values_list"
369+ "datetimes" , "dates" , "values" , "values_list" , "alias"
370370 ] and
371371 result = [ manager ( ) , querySet ( ) ] .getMember ( name )
372372 }
@@ -386,7 +386,8 @@ private module PrivateDjango {
386386 /** Provides models for the `django.db.models.expressions.RawSQL` class. */
387387 module RawSQL {
388388 /**
389- * Gets a reference to the `django.db.models.expressions.RawSQL` class.
389+ * Gets an instance of the `django.db.models.expressions.RawSQL` class,
390+ * that was initiated with the SQL represented by `sql`.
390391 */
391392 API:: Node classRef ( ) {
392393 result = expressions ( ) .getMember ( "RawSQL" )
@@ -406,7 +407,10 @@ private module PrivateDjango {
406407 exists ( DataFlow:: TypeTracker t2 | result = instance ( t2 , sql ) .track ( t2 , t ) )
407408 }
408409
409- /** Gets an instance of the `django.db.models.expressions.RawSQL` class. */
410+ /**
411+ * Gets an instance of the `django.db.models.expressions.RawSQL` class,
412+ * that was initiated with the SQL represented by `sql`.
413+ */
410414 DataFlow:: Node instance ( ControlFlowNode sql ) {
411415 instance ( DataFlow:: TypeTracker:: end ( ) , sql ) .flowsTo ( result )
412416 }
@@ -435,6 +439,24 @@ private module PrivateDjango {
435439 override DataFlow:: Node getSql ( ) { result .asCfgNode ( ) = sql }
436440 }
437441
442+ /**
443+ * A call to the `alias` function on a model using a `RawSQL` argument.
444+ *
445+ * See https://docs.djangoproject.com/en/3.2/ref/models/querysets/#alias
446+ */
447+ private class ObjectsAlias extends SqlExecution:: Range , DataFlow:: CallCfgNode {
448+ ControlFlowNode sql ;
449+
450+ ObjectsAlias ( ) {
451+ this = django:: db:: models:: querySetReturningMethod ( "alias" ) .getACall ( ) and
452+ django:: db:: models:: expressions:: RawSQL:: instance ( sql ) in [
453+ this .getArg ( _) , this .getArgByName ( _)
454+ ]
455+ }
456+
457+ override DataFlow:: Node getSql ( ) { result .asCfgNode ( ) = sql }
458+ }
459+
438460 /**
439461 * A call to the `raw` function on a model.
440462 *
0 commit comments