@@ -11,43 +11,29 @@ private import semmle.python.Concepts
11
11
12
12
private module SqlAlchemy {
13
13
/**
14
- * An instantization of a SqlAlchemy Session object.
14
+ * Returns an instantization of a SqlAlchemy Session object.
15
15
* See https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session and
16
16
* https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.sessionmaker
17
17
*/
18
- private class SqlAlchemySessionInstance extends API:: Node {
19
- SqlAlchemySessionInstance ( ) {
20
- this in [
21
- API:: moduleImport ( "sqlalchemy.orm" ) .getMember ( "Session" ) .getReturn ( ) ,
22
- API:: moduleImport ( "sqlalchemy.orm" ) .getMember ( "sessionmaker" ) .getReturn ( ) .getReturn ( )
23
- ]
24
- }
25
-
26
- override string toString ( ) { result = "Use of SqlAlchemy Session instantization" }
18
+ private API:: Node getSqlAlchemySessionInstance ( ) {
19
+ result = API:: moduleImport ( "sqlalchemy.orm" ) .getMember ( "Session" ) .getReturn ( ) or
20
+ result = API:: moduleImport ( "sqlalchemy.orm" ) .getMember ( "sessionmaker" ) .getReturn ( ) .getReturn ( )
27
21
}
28
22
29
23
/**
30
- * An instantization of a SqlAlchemy Engine object.
24
+ * Returns an instantization of a SqlAlchemy Engine object.
31
25
* See https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine
32
26
*/
33
- private class SqlAlchemyEngineInstance extends API:: Node {
34
- SqlAlchemyEngineInstance ( ) {
35
- this = API:: moduleImport ( "sqlalchemy" ) .getMember ( "create_engine" ) .getReturn ( )
36
- }
37
-
38
- override string toString ( ) { result = "Use of SqlAlchemy create_engine member" }
27
+ private API:: Node getSqlAlchemyEngineInstance ( ) {
28
+ result = API:: moduleImport ( "sqlalchemy" ) .getMember ( "create_engine" ) .getReturn ( )
39
29
}
40
30
41
31
/**
42
- * An instantization of a SqlAlchemy Query object.
32
+ * Returns an instantization of a SqlAlchemy Query object.
43
33
* See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query
44
34
*/
45
- private class SqlAlchemyQueryInstance extends API:: Node {
46
- SqlAlchemyQueryInstance ( ) {
47
- this = any ( SqlAlchemySessionInstance sessionInstance ) .getMember ( "query" ) .getReturn ( )
48
- }
49
-
50
- override string toString ( ) { result = "Use of SqlAlchemy Session Query member" }
35
+ private API:: Node getSqlAlchemyQueryInstance ( ) {
36
+ result = getSqlAlchemySessionInstance ( ) .getMember ( "query" ) .getReturn ( )
51
37
}
52
38
53
39
/**
@@ -59,11 +45,14 @@ private module SqlAlchemy {
59
45
*/
60
46
private class SqlAlchemyExecuteCall extends DataFlow:: CallCfgNode , SqlExecution:: Range {
61
47
SqlAlchemyExecuteCall ( ) {
62
- exists ( SqlAlchemySessionInstance sessionInstance , SqlAlchemyEngineInstance engineInstance |
63
- this = sessionInstance .getMember ( "execute" ) .getACall ( ) or
64
- this = engineInstance .getMember ( "connect" ) .getReturn ( ) .getMember ( "execute" ) .getACall ( ) or
65
- this = engineInstance .getMember ( "begin" ) .getReturn ( ) .getMember ( "execute" ) .getACall ( )
66
- )
48
+ // new way
49
+ this = getSqlAlchemySessionInstance ( ) .getMember ( "execute" ) .getACall ( ) or
50
+ this =
51
+ getSqlAlchemyEngineInstance ( )
52
+ .getMember ( [ "connect" , "begin" ] )
53
+ .getReturn ( )
54
+ .getMember ( "execute" )
55
+ .getACall ( )
67
56
}
68
57
69
58
override DataFlow:: Node getSql ( ) { result = this .getArg ( 0 ) }
@@ -76,8 +65,10 @@ private module SqlAlchemy {
76
65
*/
77
66
private class SqlAlchemyScalarCall extends DataFlow:: CallCfgNode , SqlExecution:: Range {
78
67
SqlAlchemyScalarCall ( ) {
79
- this = any ( SqlAlchemySessionInstance sessionInstance ) .getMember ( "scalar" ) .getACall ( ) or
80
- this = any ( SqlAlchemyEngineInstance engineInstance ) .getMember ( "scalar" ) .getACall ( )
68
+ this =
69
+ [ getSqlAlchemySessionInstance ( ) , getSqlAlchemyEngineInstance ( ) ]
70
+ .getMember ( "scalar" )
71
+ .getACall ( )
81
72
}
82
73
83
74
override DataFlow:: Node getSql ( ) { result = this .getArg ( 0 ) }
@@ -88,9 +79,7 @@ private module SqlAlchemy {
88
79
* See https://docs.sqlalchemy.org/en/14/orm/query.html?highlight=query#sqlalchemy.orm.Query
89
80
*/
90
81
private class SqlAlchemyQueryCall extends DataFlow:: CallCfgNode , SqlExecution:: Range {
91
- SqlAlchemyQueryCall ( ) {
92
- this = any ( SqlAlchemyQueryInstance queryInstance ) .getAMember ( ) .getACall ( )
93
- }
82
+ SqlAlchemyQueryCall ( ) { this = getSqlAlchemyQueryInstance ( ) .getAMember ( ) .getACall ( ) }
94
83
95
84
override DataFlow:: Node getSql ( ) { result = this .getArg ( 0 ) }
96
85
}
0 commit comments