@@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
22import { QueryDto } from './dto/query.dto' ;
33import { QueryType } from '../common/enums/query-type.enum' ;
44import { ShellService } from '../shell/shell.service' ;
5- import { ResultSetHeader , RowDataPacket } from 'mysql2/promise' ;
5+ import { Connection , ResultSetHeader , RowDataPacket } from 'mysql2/promise' ;
66import { Shell } from '../shell/shell.entity' ;
77import { UserDBManager } from '../config/query-database/user-db-manager.service' ;
88import { UsageService } from 'src/usage/usage.service' ;
@@ -17,12 +17,17 @@ export class QueryService {
1717 private readonly redisService : RedisService ,
1818 ) { }
1919
20- async execute ( req : any , shellId : number , queryDto : QueryDto ) {
21- this . redisService . setActiveUser ( req . sessionID ) ;
20+ async execute (
21+ connection : Connection ,
22+ sessionId : string ,
23+ shellId : number ,
24+ queryDto : QueryDto ,
25+ ) {
26+ this . redisService . setActiveUser ( sessionId ) ;
2227 await this . shellService . findShellOrThrow ( shellId ) ;
2328
2429 const baseUpdateData = {
25- sessionId : req . sessionID ,
30+ sessionId : sessionId ,
2631 query : queryDto . query ,
2732 queryType : this . detectQueryType ( queryDto . query ) ,
2833 } ;
@@ -35,7 +40,11 @@ export class QueryService {
3540 text : '지원하지 않는 쿼리입니다.' ,
3641 } ) ;
3742 }
38- updateData = await this . processQuery ( req , baseUpdateData , queryDto . query ) ;
43+ updateData = await this . processQuery (
44+ connection ,
45+ baseUpdateData ,
46+ queryDto . query ,
47+ ) ;
3948 } catch ( e ) {
4049 const text = `ERROR ${ e . errno || '' } (${ e . sqlState || '' } ): ${ e . sqlMessage || '' } ` ;
4150
@@ -47,21 +56,19 @@ export class QueryService {
4756 } ;
4857 return await this . shellService . replace ( shellId , updateData ) ;
4958 }
50- await this . usageService . updateRowCount ( req ) ;
59+ await this . usageService . updateRowCount ( connection , sessionId ) ;
5160 return await this . shellService . replace ( shellId , updateData ) ;
5261 }
5362
5463 private async processQuery (
55- req : any ,
64+ connection : Connection ,
5665 baseUpdateData : any ,
5766 query : string ,
5867 ) : Promise < Partial < Shell > > {
5968 const isResultTable = this . existResultTable ( baseUpdateData . queryType ) ;
6069
61- const rows = await this . userDBManager . run ( req , query ) ;
62- const runTime = await this . measureQueryRunTime ( req ) ;
63-
64- // Update usage
70+ const rows = await this . userDBManager . run ( connection , query ) ;
71+ const runTime = await this . measureQueryRunTime ( connection ) ;
6572
6673 let text : string ;
6774 let resultTable : RowDataPacket [ ] ;
@@ -100,11 +107,12 @@ export class QueryService {
100107 return validTypes . includes ( type ) ;
101108 }
102109
103- async measureQueryRunTime ( req : any ) : Promise < string > {
110+ async measureQueryRunTime ( connection : Connection ) : Promise < string > {
104111 try {
112+ const query = `SHOW PROFILES` ;
105113 const rows = ( await this . userDBManager . run (
106- req ,
107- 'show profiles;' ,
114+ connection ,
115+ query ,
108116 ) ) as RowDataPacket [ ] ;
109117 let lastQueryRunTime = rows [ rows . length - 1 ] ?. Duration ;
110118 lastQueryRunTime = Math . round ( lastQueryRunTime * 1000 ) / 1000 || 0 ;
0 commit comments