2
2
/* eslint-disable no-restricted-syntax */
3
3
/* eslint-disable no-await-in-loop */
4
4
/* eslint-disable no-else-return */
5
- const mysql = require ( "mysql" ) ;
6
- const fs = require ( 'fs' ) ;
5
+ const snowflake = require ( "snowflake-sdk" ) ;
7
6
8
7
let pools = { } ;
9
8
let config = { } ;
@@ -13,73 +12,64 @@ exports.init = async (cfg) => {
13
12
config = cfg ;
14
13
} ;
15
14
16
- exports . createPool = async ( poolName ) => {
15
+ exports . createSnowPool = async ( poolName ) => {
17
16
try {
18
17
const srcCfg = config . DATASOURCES [ poolName ] ;
19
18
if ( srcCfg ) {
20
19
const options = {
21
- connectionLimit : srcCfg . DB_CONNECTION_LIMIT || 5 ,
22
- host : srcCfg . DB_HOST ,
23
- user : srcCfg . DB_USER ,
20
+ account : srcCfg . DB_HOST ,
21
+ username : srcCfg . DB_USER ,
24
22
password : srcCfg . DB_PASSWORD ,
25
23
database : srcCfg . DB_DATABASE ,
26
24
port : srcCfg . PORT ,
27
- multipleStatements : srcCfg . ALLOW_MULTI_STATEMENTS || false ,
28
- timezone : srcCfg . TIMEZONE || 'local' ,
29
- typeCast : srcCfg . TYPE_CAST || true ,
30
- dateStrings : srcCfg . DATE_STRINGS || false
25
+ schema : srcCfg . SCHEMA
31
26
} ;
32
27
33
- if ( srcCfg . SSL ) {
34
- const sslConfig = { } ;
35
-
36
- if ( srcCfg . SSL . CUSTOM_CERT ) {
37
- sslConfig . ca = srcCfg . SSL . CUSTOM_CERT ;
38
- } else {
39
- sslConfig . rejectUnauthorized = srcCfg . SSL . hasOwnProperty ( 'REJECT_UNAUTHORIZED' ) ? srcCfg . SSL . REJECT_UNAUTHORIZED : true ;
40
- }
41
-
42
- options . ssl = sslConfig ;
43
- }
44
-
45
- pools [ poolName ] = mysql . createPool ( options ) ;
46
- console . debug ( `MySQL Adapter: Pool ${ poolName } created` ) ;
28
+ pools [ poolName ] = snowflake . createPool ( options , { max : 10 , min : 0 } ) ;
29
+ console . debug ( `Snowflake Adapter: Pool ${ poolName } created` ) ;
47
30
return true ;
48
31
} else {
49
- console . error ( `MySQL Adapter: Missing configuration for ${ poolName } ` ) ;
32
+ console . error ( `Snowflake Adapter: Missing configuration for ${ poolName } ` ) ;
50
33
return false ;
51
34
}
52
35
} catch ( err ) {
53
- console . error ( "MySQL Adapter: Error while closing connection" , err ) ;
36
+ console . error ( "Snowflake Adapter: Error while closing connection" , err ) ;
54
37
return false ;
55
38
}
56
39
} ;
57
40
58
41
exports . connect = async ( poolName ) => {
59
42
try {
60
43
if ( ! pools [ poolName ] ) {
61
- await this . createPool ( poolName ) ;
44
+ await this . createSnowPool ( poolName ) ;
62
45
}
63
46
return pools [ poolName ] ;
64
47
} catch ( err ) {
65
- console . error ( "MySQL Adapter: Error while retrieving a connection" , err ) ;
48
+ console . error ( "Snowflake Adapter: Error while retrieving a connection" , err ) ;
66
49
throw new Error ( err . message ) ;
67
50
}
68
51
} ;
69
52
70
53
this . query = async ( conn , query , params ) => {
71
54
return new Promise ( ( resolve , reject ) => {
72
55
try {
73
- conn . query ( query , params , ( error , results ) => {
74
- if ( error ) {
75
- console . error ( "MySQL Adapter: Failure in query: " , error ) ;
76
- this . handleError ( reject , error ) ;
77
- } else {
78
- resolve ( results ) ;
79
- }
56
+ conn . use ( async ( clientConnection ) => {
57
+ await clientConnection . execute ( {
58
+ sqlText : query ,
59
+ binds : params ? params : [ ] ,
60
+ complete : async ( err , stmt , rows ) => {
61
+ if ( err ) {
62
+ console . error ( "Failed to execute statement due to the following error: " + err . message ) ;
63
+ reject ( ) ;
64
+ } else {
65
+ console . log ( "Successfully executed statement: " + stmt . getSqlText ( ) ) ;
66
+ resolve ( rows ) ;
67
+ }
68
+ }
69
+ } )
80
70
} ) ;
81
71
} catch ( err ) {
82
- console . error ( "MySQL Adapter: Failure in query: " , err ) ;
72
+ console . error ( "Snowflake Adapter: Failure in query: " , err ) ;
83
73
this . handleError ( reject , err ) ;
84
74
}
85
75
} ) ;
@@ -101,21 +91,21 @@ exports.execute = async (srcName, query, params = {}) => {
101
91
const conn = await this . connect ( srcName ) ;
102
92
103
93
console . debug (
104
- `MySQL Adapter: Connection secured: ${ process . hrtime ( start ) [ 0 ] } s ${
94
+ `Snowflake Adapter: Connection secured: ${ process . hrtime ( start ) [ 0 ] } s ${
105
95
process . hrtime ( start ) [ 1 ] / 1000000
106
96
} ms`
107
97
) ;
108
98
const results = await this . query ( conn , query , params ) ;
109
99
110
100
console . debug (
111
- `MySQL Adapter: Query executed: ${ process . hrtime ( start ) [ 0 ] } s ${
101
+ `Snowflake Adapter: Query executed: ${ process . hrtime ( start ) [ 0 ] } s ${
112
102
process . hrtime ( start ) [ 1 ] / 1000000
113
103
} ms`
114
104
) ;
115
105
116
106
return results ;
117
107
} catch ( err ) {
118
- console . error ( "MySQL Adapter: Error while executing query" , err ) ;
108
+ console . error ( "Snowflake Adapter: Error while executing query" , err ) ;
119
109
throw new Error ( err . message ) ;
120
110
}
121
111
} ;
@@ -125,11 +115,11 @@ exports.closeAllPools = async () => {
125
115
for ( const poolAlias of Object . keys ( pools ) ) {
126
116
await this . closePool ( poolAlias ) ;
127
117
delete pools [ poolAlias ] ;
128
- console . debug ( `MySQL Adapter: Pool ${ poolAlias } closed` ) ;
118
+ console . debug ( `Snowflake Adapter: Pool ${ poolAlias } closed` ) ;
129
119
}
130
120
return true ;
131
121
} catch ( err ) {
132
- console . error ( "MySQL Adapter: Error while closing connection" , err ) ;
122
+ console . error ( "Snowflake Adapter: Error while closing connection" , err ) ;
133
123
return false ;
134
124
}
135
125
} ;
@@ -152,7 +142,7 @@ exports.closePool = async (poolAlias) => {
152
142
return true ;
153
143
}
154
144
} catch ( err ) {
155
- console . error ( "MySQL Adapter: Error while closing connection" , err ) ;
145
+ console . error ( "Snowflake Adapter: Error while closing connection" , err ) ;
156
146
return false ;
157
147
}
158
148
} ;
0 commit comments