@@ -6,22 +6,71 @@ import {badRequest, failedCheck} from "./errors.js";
6
6
import { validateQueryPayload } from "./validate.js" ;
7
7
8
8
const READ_ONLY = new Set ( [ "SELECT" , "USAGE" , "CONNECT" ] ) ;
9
-
10
9
export class OracleSingleton {
11
10
static instance = null ;
11
+ static types = new Map ( ) ;
12
12
constructor ( ) {
13
13
throw new Error (
14
14
"Do not use new OracleSingleton(). Call OracleSingleton.initialize() instead."
15
15
) ;
16
16
}
17
17
static initialize ( ) {
18
+ const boolean = [ "null" , "boolean" ] ,
19
+ number = [ "null" , "number" ] ,
20
+ object = [ "null" , "object" ] ,
21
+ string = [ "null" , "string" ] ;
22
+
18
23
if ( ! OracleSingleton . instance ) {
19
24
try {
20
25
OracleSingleton . instance = import ( "oracledb" ) . then ( ( module ) => {
21
26
const oracledb = module . default ;
22
27
oracledb . initOracleClient ( {
23
28
libDir : process . env . LIB_DIR_PATH ,
24
29
} ) ;
30
+
31
+ OracleSingleton . types
32
+ . set ( oracledb . DB_TYPE_BOOLEAN , {
33
+ type : boolean ,
34
+ } )
35
+ . set ( oracledb . DB_TYPE_NUMBER , { type : number } )
36
+ . set ( oracledb . DB_TYPE_BINARY_FLOAT , {
37
+ type : number ,
38
+ } )
39
+ . set ( oracledb . DB_TYPE_BINARY_DOUBLE , {
40
+ type : number ,
41
+ } )
42
+ . set ( oracledb . DB_TYPE_BINARY_INTEGER , {
43
+ type : number ,
44
+ } )
45
+ . set ( oracledb . DB_TYPE_TIMESTAMP , {
46
+ type : string ,
47
+ date : true ,
48
+ } )
49
+ . set ( oracledb . DB_TYPE_DATE , {
50
+ type : string ,
51
+ date : true ,
52
+ } )
53
+ . set ( oracledb . DB_TYPE_TIMESTAMP_TZ , {
54
+ type : string ,
55
+ date : true ,
56
+ } )
57
+ . set ( oracledb . DB_TYPE_TIMESTAMP_LTZ , {
58
+ type : string ,
59
+ date : true ,
60
+ } )
61
+ . set ( oracledb . DB_TYPE_INTERVAL_DS , {
62
+ type : string ,
63
+ date : true ,
64
+ } )
65
+ . set ( oracledb . DB_TYPE_INTERVAL_YM , {
66
+ type : string ,
67
+ date : true ,
68
+ } )
69
+ . set ( oracledb . DB_TYPE_BLOB , {
70
+ type : object ,
71
+ buffer : true ,
72
+ } ) ;
73
+
25
74
return oracledb ;
26
75
} ) ;
27
76
} catch ( err ) {
@@ -36,6 +85,14 @@ export class OracleSingleton {
36
85
) ;
37
86
return OracleSingleton . instance ;
38
87
}
88
+
89
+ get types ( ) {
90
+ if ( OracleSingleton . types . size === 0 )
91
+ throw new Error (
92
+ "OracleSingleton not initialized. Call OracleSingleton.initialize() first."
93
+ ) ;
94
+ return OracleSingleton . types ;
95
+ }
39
96
}
40
97
41
98
export async function queryStream ( req , res , pool ) {
@@ -179,43 +236,11 @@ export default async ({url, username, password}) => {
179
236
} ;
180
237
181
238
// See https://oracle.github.io/node-oracledb/doc/api.html#-312-oracle-database-type-constants
182
- const boolean = [ "null" , "boolean" ] ,
183
- number = [ "null" , "number" ] ,
184
- object = [ "null" , "object" ] ,
185
- string = [ "null" , "string" ] ;
186
- export function dataTypeSchema ( { type} ) {
187
- const oracledb = OracleSingleton . getInstance ( ) ;
188
-
189
- switch ( type ) {
190
- case oracledb . DB_TYPE_BOOLEAN :
191
- return { type : boolean } ;
192
- case oracledb . DB_TYPE_NUMBER :
193
- case oracledb . DB_TYPE_BINARY_DOUBLE :
194
- case oracledb . DB_TYPE_BINARY_FLOAT :
195
- case oracledb . DB_TYPE_BINARY_INTEGER :
196
- return { type : number } ;
197
- case oracledb . DB_TYPE_TIMESTAMP :
198
- case oracledb . DB_TYPE_DATE :
199
- case oracledb . DB_TYPE_TIMESTAMP_TZ :
200
- case oracledb . DB_TYPE_TIMESTAMP_LTZ :
201
- case oracledb . DB_TYPE_INTERVAL_DS :
202
- case oracledb . DB_TYPE_INTERVAL_YM :
203
- return { type : string , date : true } ;
204
- case oracledb . DB_TYPE_BLOB :
205
- return { type : object , buffer : true } ;
206
- case oracledb . DB_TYPE_CHAR :
207
- case oracledb . DB_TYPE_BFILE :
208
- case oracledb . DB_TYPE_CLOB :
209
- case oracledb . DB_TYPE_NCLOB :
210
- case oracledb . DB_TYPE_CURSOR :
211
- case oracledb . DB_TYPE_LONG_RAW :
212
- case oracledb . DB_TYPE_NCHAR :
213
- case oracledb . DB_TYPE_NVARCHAR :
214
- case oracledb . DB_TYPE_OBJECT :
215
- case oracledb . DB_TYPE_RAW :
216
- case oracledb . DB_TYPE_ROWID :
217
- case oracledb . DB_TYPE_VARCHAR :
218
- default :
219
- return { type : string } ;
239
+ function dataTypeSchema ( { type} ) {
240
+ const types = OracleSingleton . types ;
241
+ if ( types . has ( type ) ) {
242
+ return types . get ( type ) ;
220
243
}
244
+
245
+ return { type : [ "null" , "string" ] } ;
221
246
}
0 commit comments