stimulsoft-data-adapter 2021.3.7 → 2021.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FirebirdAdapter.js +147 -141
- package/MSSQLAdapter.js +248 -229
- package/MySQLAdapter.js +207 -201
- package/PostgreSQLAdapter.js +246 -240
- package/app.js +89 -82
- package/package.json +50 -50
package/PostgreSQLAdapter.js
CHANGED
|
@@ -1,240 +1,246 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
case
|
|
58
|
-
case
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
case
|
|
63
|
-
case
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
case
|
|
70
|
-
types[columnIndex] = "
|
|
71
|
-
|
|
72
|
-
case
|
|
73
|
-
types[columnIndex] = "
|
|
74
|
-
|
|
75
|
-
case
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
case
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
case
|
|
82
|
-
case
|
|
83
|
-
case
|
|
84
|
-
case
|
|
85
|
-
case
|
|
86
|
-
case
|
|
87
|
-
case
|
|
88
|
-
case
|
|
89
|
-
case
|
|
90
|
-
case
|
|
91
|
-
case
|
|
92
|
-
case
|
|
93
|
-
case
|
|
94
|
-
case
|
|
95
|
-
case
|
|
96
|
-
case
|
|
97
|
-
case
|
|
98
|
-
case
|
|
99
|
-
case
|
|
100
|
-
case
|
|
101
|
-
case
|
|
102
|
-
case
|
|
103
|
-
case
|
|
104
|
-
case
|
|
105
|
-
case
|
|
106
|
-
case
|
|
107
|
-
case
|
|
108
|
-
case
|
|
109
|
-
case
|
|
110
|
-
case
|
|
111
|
-
case
|
|
112
|
-
case
|
|
113
|
-
case
|
|
114
|
-
case
|
|
115
|
-
case
|
|
116
|
-
case
|
|
117
|
-
case
|
|
118
|
-
case
|
|
119
|
-
case
|
|
120
|
-
case
|
|
121
|
-
case
|
|
122
|
-
case
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
case "
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
case "
|
|
200
|
-
case "
|
|
201
|
-
info["
|
|
202
|
-
break;
|
|
203
|
-
|
|
204
|
-
case "
|
|
205
|
-
case "
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
1
|
+
/*
|
|
2
|
+
Stimulsoft.Reports.JS
|
|
3
|
+
Version: 2021.4.4
|
|
4
|
+
Build date: 2021.11.18
|
|
5
|
+
License: https://www.stimulsoft.com/en/licensing/reports
|
|
6
|
+
*/
|
|
7
|
+
exports.process = function (command, onResult) {
|
|
8
|
+
var end = function (result) {
|
|
9
|
+
try {
|
|
10
|
+
if (client) client.end();
|
|
11
|
+
result.adapterVersion = "2021.4.4";
|
|
12
|
+
onResult(result);
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
var onError = function (message) {
|
|
19
|
+
end({ success: false, notice: message });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
var connect = function () {
|
|
24
|
+
client.connect(function (error) {
|
|
25
|
+
if (error) onError(error.message);
|
|
26
|
+
else onConnect();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var query = function (queryString) {
|
|
31
|
+
client.query(queryString, function (error, recordset) {
|
|
32
|
+
if (error) onError(error.message);
|
|
33
|
+
else {
|
|
34
|
+
onQuery(recordset);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
var onConnect = function () {
|
|
40
|
+
if (command.queryString) query(command.queryString);
|
|
41
|
+
else end({ success: true });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var onQuery = function (recordset) {
|
|
45
|
+
var columns = [];
|
|
46
|
+
var rows = [];
|
|
47
|
+
var types = [];
|
|
48
|
+
|
|
49
|
+
for (var columnIndex in recordset.fields) {
|
|
50
|
+
var column = recordset.fields[columnIndex]
|
|
51
|
+
columns.push(column.name);
|
|
52
|
+
|
|
53
|
+
switch (column.dataTypeID) {
|
|
54
|
+
case 16: // BOOL
|
|
55
|
+
types[columnIndex] = "boolean"; break;
|
|
56
|
+
|
|
57
|
+
case 20: // INT8
|
|
58
|
+
case 21: // INT2
|
|
59
|
+
case 23: // INT4
|
|
60
|
+
types[columnIndex] = "int"; break;
|
|
61
|
+
|
|
62
|
+
case 700: // FLOAT4
|
|
63
|
+
case 701: // FLOAT8
|
|
64
|
+
case 790: // MONEY
|
|
65
|
+
types[columnIndex] = "number"; break;
|
|
66
|
+
|
|
67
|
+
case 702: // ABSTIME
|
|
68
|
+
case 1082: // DATE
|
|
69
|
+
case 1114: // TIMESTAMP
|
|
70
|
+
types[columnIndex] = "datetime"; break;
|
|
71
|
+
|
|
72
|
+
case 1184: // TIMESTAMPTZ
|
|
73
|
+
types[columnIndex] = "datetimeZ"; break;
|
|
74
|
+
|
|
75
|
+
case 1083: // TIME
|
|
76
|
+
types[columnIndex] = "time"; break;
|
|
77
|
+
|
|
78
|
+
case 1266: // TIMETZ
|
|
79
|
+
types[columnIndex] = "timeZ"; break;
|
|
80
|
+
|
|
81
|
+
case 17: // BYTEA
|
|
82
|
+
case 18: // CHAR
|
|
83
|
+
case 19:
|
|
84
|
+
case 24: // REGPROC
|
|
85
|
+
case 25: // TEXT
|
|
86
|
+
case 26: // OID
|
|
87
|
+
case 27: // TID
|
|
88
|
+
case 28: // XID
|
|
89
|
+
case 29: // CID
|
|
90
|
+
case 114: // JSON
|
|
91
|
+
case 142: // XML
|
|
92
|
+
case 194: // PG_NODE_TREE
|
|
93
|
+
case 210: // SMGR
|
|
94
|
+
case 602: // PATH
|
|
95
|
+
case 604: // POLYGON
|
|
96
|
+
case 650: // CIDR
|
|
97
|
+
case 703: // RELTIME
|
|
98
|
+
case 704: // TINTERVAL
|
|
99
|
+
case 718: // CIRCLE
|
|
100
|
+
case 774: // MACADDR8
|
|
101
|
+
case 829: // MACADDR
|
|
102
|
+
case 869: // INET
|
|
103
|
+
case 1033: // ACLITEM
|
|
104
|
+
case 1042: // BPCHAR
|
|
105
|
+
case 1043: // VARCHAR
|
|
106
|
+
case 1186: // INTERVAL
|
|
107
|
+
case 1560: // BIT
|
|
108
|
+
case 1562: // VARBIT
|
|
109
|
+
case 1700: // NUMERIC
|
|
110
|
+
case 1790: // REFCURSOR
|
|
111
|
+
case 2202: // REGPROCEDURE
|
|
112
|
+
case 2203: // REGOPER
|
|
113
|
+
case 2204: // REGOPERATOR
|
|
114
|
+
case 2205: // REGCLASS
|
|
115
|
+
case 2206: // REGTYPE
|
|
116
|
+
case 2950: // UUID
|
|
117
|
+
case 2970: // TXID_SNAPSHOT
|
|
118
|
+
case 3220: // PG_LSN
|
|
119
|
+
case 3361: // PG_NDISTINCT
|
|
120
|
+
case 3402: // PG_DEPENDENCIES
|
|
121
|
+
case 3614: // TSVECTOR
|
|
122
|
+
case 3615: // TSQUERY
|
|
123
|
+
case 3642: // GTSVECTOR
|
|
124
|
+
case 3734: // REGCONFIG
|
|
125
|
+
case 3769: // REGDICTIONARY
|
|
126
|
+
case 3802: // JSONB
|
|
127
|
+
case 4089: // REGNAMESPACE
|
|
128
|
+
case 4096: // REGROLE
|
|
129
|
+
default:
|
|
130
|
+
types[columnIndex] = "string"; break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (recordset.rows.length > 0 && Array.isArray(recordset.rows[0])) recordset.rows = recordset.rows[0];
|
|
135
|
+
for (var recordIndex in recordset.rows) {
|
|
136
|
+
var row = [];
|
|
137
|
+
for (var columnName in recordset.rows[recordIndex]) {
|
|
138
|
+
var columnIndex = columns.indexOf(columnName);
|
|
139
|
+
if (recordset.rows[recordIndex][columnName] instanceof Uint8Array) {
|
|
140
|
+
types[columnIndex] = "array";
|
|
141
|
+
recordset.rows[recordIndex][columnName] = Buffer.from(recordset.rows[recordIndex][columnName]).toString('base64');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (recordset.rows[recordIndex][columnName] != null && typeof recordset.rows[recordIndex][columnName].toISOString === "function") {
|
|
145
|
+
if (types[columnIndex] == "datetimeZ") {
|
|
146
|
+
recordset.rows[recordIndex][columnName] = recordset.rows[recordIndex][columnName].toISOString();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
var dateTime = new Date(recordset.rows[recordIndex][columnName].getTime() - (recordset.rows[recordIndex][columnName].getTimezoneOffset() * 60000)).toISOString();
|
|
150
|
+
recordset.rows[recordIndex][columnName] = dateTime.replace("Z", "");
|
|
151
|
+
types[columnIndex] = "datetime";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (recordset.rows[recordIndex][columnName] != null && types[columnIndex] == "timeZ") {
|
|
156
|
+
var time = recordset.rows[recordIndex][columnName];
|
|
157
|
+
var offset = time.substr(time.indexOf("+"));
|
|
158
|
+
if (offset.indexOf(":") == -1) offset += ":00";
|
|
159
|
+
time = time.substr(0, time.indexOf("+"));
|
|
160
|
+
if (time.indexOf(".") == -1) time += ".000"
|
|
161
|
+
recordset.rows[recordIndex][columnName] = "0001-01-01T" + time + offset;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
row[columnIndex] = recordset.rows[recordIndex][columnName];
|
|
165
|
+
}
|
|
166
|
+
rows.push(row);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
for (var typeIndex in types) {
|
|
170
|
+
if (types[typeIndex] == "timeZ") types[typeIndex] = "datetimeoffset";
|
|
171
|
+
if (types[typeIndex] == "datetimeZ") types[typeIndex] = "datetime";
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
end({ success: true, columns: columns, rows: rows, types: types });
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
var getConnectionStringInfo = function (connectionString) {
|
|
178
|
+
var info = { port: 5432 };
|
|
179
|
+
|
|
180
|
+
for (var propertyIndex in connectionString.split(";")) {
|
|
181
|
+
var property = connectionString.split(";")[propertyIndex];
|
|
182
|
+
if (property) {
|
|
183
|
+
var match = property.split(new RegExp('=|:'));
|
|
184
|
+
if (match && match.length >= 2) {
|
|
185
|
+
match[0] = match[0].trim().toLowerCase();
|
|
186
|
+
match[1] = match[1].trim();
|
|
187
|
+
|
|
188
|
+
switch (match[0]) {
|
|
189
|
+
case "data source":
|
|
190
|
+
case "server":
|
|
191
|
+
case "host":
|
|
192
|
+
info["host"] = match[1];
|
|
193
|
+
break;
|
|
194
|
+
|
|
195
|
+
case "port":
|
|
196
|
+
info["port"] = match[1];
|
|
197
|
+
break;
|
|
198
|
+
|
|
199
|
+
case "database":
|
|
200
|
+
case "location":
|
|
201
|
+
info["database"] = match[1];
|
|
202
|
+
break;
|
|
203
|
+
|
|
204
|
+
case "uid":
|
|
205
|
+
case "user":
|
|
206
|
+
case "user id":
|
|
207
|
+
info["userId"] = match[1];
|
|
208
|
+
break;
|
|
209
|
+
|
|
210
|
+
case "pwd":
|
|
211
|
+
case "password":
|
|
212
|
+
info["password"] = match[1];
|
|
213
|
+
break;
|
|
214
|
+
|
|
215
|
+
case "ssl":
|
|
216
|
+
info["ssl"] = match[1];
|
|
217
|
+
break;
|
|
218
|
+
case "sslmode":
|
|
219
|
+
if (match[1] == "require") info["ssl"] = 1;
|
|
220
|
+
else if (match[1] == "disable") info["ssl"] = 0;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return info;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
var pg = require('pg');
|
|
231
|
+
if (command.connectionString.startsWith("postgres://")) command.postgreConnectionString = command.connectionString
|
|
232
|
+
else {
|
|
233
|
+
command.connectionStringInfo = getConnectionStringInfo(command.connectionString);
|
|
234
|
+
|
|
235
|
+
command.postgreConnectionString = "postgres://" + command.connectionStringInfo.userId + ":" + command.connectionStringInfo.password + "@" + command.connectionStringInfo.host;
|
|
236
|
+
if (command.connectionStringInfo.port != null) command.postgreConnectionString += ":" + command.connectionStringInfo.port;
|
|
237
|
+
command.postgreConnectionString += "/" + command.connectionStringInfo.database;
|
|
238
|
+
}
|
|
239
|
+
var client = new pg.Client(command.postgreConnectionString);
|
|
240
|
+
|
|
241
|
+
connect();
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
onError(e.stack);
|
|
245
|
+
}
|
|
246
|
+
}
|