@@ -28,30 +28,52 @@ module SQL {
2828 * Provides classes modelling the (API compatible) `mysql` and `mysql2` packages.
2929 */
3030private module MySql {
31+ private string moduleName ( ) { result = [ "mysql" , "mysql2" , "mysql2/promise" ] }
32+
3133 /** Gets the package name `mysql` or `mysql2`. */
32- API:: Node mysql ( ) { result = API:: moduleImport ( [ "mysql" , "mysql2" ] ) }
34+ API:: Node mysql ( ) { result = API:: moduleImport ( moduleName ( ) ) }
3335
3436 /** Gets a reference to `mysql.createConnection`. */
35- API:: Node createConnection ( ) { result = mysql ( ) .getMember ( "createConnection" ) }
37+ API:: Node createConnection ( ) {
38+ result = mysql ( ) .getMember ( [ "createConnection" , "createConnectionPromise" ] )
39+ }
3640
3741 /** Gets a reference to `mysql.createPool`. */
38- API:: Node createPool ( ) { result = mysql ( ) .getMember ( "createPool" ) }
42+ API:: Node createPool ( ) { result = mysql ( ) .getMember ( [ "createPool" , "createPoolCluster" ] ) }
3943
4044 /** Gets a node that contains a MySQL pool created using `mysql.createPool()`. */
41- API:: Node pool ( ) { result = createPool ( ) .getReturn ( ) }
45+ API:: Node pool ( ) {
46+ result = createPool ( ) .getReturn ( )
47+ or
48+ result = pool ( ) .getMember ( "on" ) .getReturn ( )
49+ or
50+ result = API:: Node:: ofType ( moduleName ( ) , [ "Pool" , "PoolCluster" ] )
51+ }
4252
4353 /** Gets a data flow node that contains a freshly created MySQL connection instance. */
4454 API:: Node connection ( ) {
4555 result = createConnection ( ) .getReturn ( )
4656 or
57+ result = createConnection ( ) .getReturn ( ) .getPromised ( )
58+ or
4759 result = pool ( ) .getMember ( "getConnection" ) .getParameter ( 0 ) .getParameter ( 1 )
60+ or
61+ result = pool ( ) .getMember ( "getConnection" ) .getPromised ( )
62+ or
63+ exists ( API:: CallNode call |
64+ call = pool ( ) .getMember ( "on" ) .getACall ( ) and
65+ call .getArgument ( 0 ) .getStringValue ( ) = [ "connection" , "acquire" , "release" ] and
66+ result = call .getParameter ( 1 ) .getParameter ( 0 )
67+ )
68+ or
69+ result = API:: Node:: ofType ( moduleName ( ) , [ "Connection" , "PoolConnection" ] )
4870 }
4971
5072 /** A call to the MySql `query` method. */
5173 private class QueryCall extends DatabaseAccess , DataFlow:: MethodCallNode {
5274 QueryCall ( ) {
5375 exists ( API:: Node recv | recv = pool ( ) or recv = connection ( ) |
54- this = recv .getMember ( "query" ) .getACall ( )
76+ this = recv .getMember ( [ "query" , "execute" ] ) .getACall ( )
5577 )
5678 }
5779
0 commit comments