@pi-r/oci 0.6.2 → 0.6.3

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.
Files changed (2) hide show
  1. package/client/index.js +32 -8
  2. package/package.json +8 -8
package/client/index.js CHANGED
@@ -140,13 +140,13 @@ async function executeBatchQuery(credential, batch, sessionKey) {
140
140
  }
141
141
  }
142
142
  else if (query) {
143
- let maxRows = typeof item.limit === 'number' ? Math.max(item.limit, 0) : undefined;
143
+ let maxRows = typeof item.limit === 'number' ? item.limit : NaN;
144
144
  if ((0, types_1.isPlainObject)(query)) {
145
145
  if (!table) {
146
146
  closeClient();
147
147
  throw (0, util_1.formatError)(item, "Missing database table" /* ERR_DB.TABLE */);
148
148
  }
149
- if (queryString && (rows = getCache(queryString += Module.asString(query, true) + (maxRows ? maxRows : '')))) {
149
+ if (queryString && (rows = getCache(queryString += Module.asString(query, true) + (maxRows > 0 ? maxRows : '')))) {
150
150
  result[i] = rows;
151
151
  continue;
152
152
  }
@@ -155,16 +155,40 @@ async function executeBatchQuery(credential, batch, sessionKey) {
155
155
  closeClient();
156
156
  throw (0, util_1.formatError)(item, "Missing database table" /* ERR_DB.TABLE */);
157
157
  }
158
- let operation = db.find().filter(query);
159
- if (maxRows) {
160
- operation = operation.limit(maxRows);
158
+ const tryQuery = async () => {
159
+ let operation = db.find().filter(query);
160
+ if (maxRows > 0) {
161
+ operation = operation.limit(maxRows);
162
+ }
163
+ return (await operation.getDocuments()).map(doc => doc.getContent());
164
+ };
165
+ try {
166
+ rows = await tryQuery();
167
+ }
168
+ catch (err) {
169
+ switch (err instanceof Error && err.code) {
170
+ case 'ORA-40820':
171
+ if (maxRows > 0) {
172
+ const limit = maxRows;
173
+ maxRows = 0;
174
+ rows = await tryQuery();
175
+ if (limit > rows.length) {
176
+ rows = rows.slice(0, limit);
177
+ }
178
+ this.addLog(types_1.STATUS_TYPE.WARN, err, service, Module.asString(query, true));
179
+ break;
180
+ }
181
+ default:
182
+ throw err;
183
+ }
161
184
  }
162
- rows = (await operation.getDocuments()).map(doc => doc.getContent());
163
185
  }
164
186
  else {
165
187
  const { params, options } = item;
166
- maxRows || (maxRows = options?.maxRows);
167
- if (queryString && (rows = getCache(queryString += query + Module.asString(params, true) + Module.asString(options, true) + (maxRows ? maxRows : '')))) {
188
+ if (options?.maxRows && isNaN(maxRows)) {
189
+ maxRows = options.maxRows;
190
+ }
191
+ if (queryString && (rows = getCache(queryString += query + Module.asString(params, true) + Module.asString(options, true) + (maxRows > 0 ? maxRows : '')))) {
168
192
  result[i] = rows;
169
193
  continue;
170
194
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-r/oci",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "Oracle (OCI) cloud functions for E-mc.",
5
5
  "main": "client/index.js",
6
6
  "publishConfig": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "repository": {
10
10
  "type": "git",
11
- "url": "https://github.com/anpham6/pi-r.git",
11
+ "url": "git+https://github.com/anpham6/pi-r.git",
12
12
  "directory": "src/cloud/oci"
13
13
  },
14
14
  "keywords": [
@@ -20,12 +20,12 @@
20
20
  "license": "MIT",
21
21
  "homepage": "https://github.com/anpham6/pi-r#readme",
22
22
  "dependencies": {
23
- "@e-mc/cloud": "^0.8.2",
24
- "@e-mc/module": "^0.8.2",
25
- "@e-mc/types": "^0.8.2",
26
- "@pi-r/aws": "^0.6.2",
27
- "@pi-r/oracle": "^0.6.2",
28
- "aws-sdk": "^2.1545.0",
23
+ "@e-mc/cloud": "^0.8.3",
24
+ "@e-mc/module": "^0.8.3",
25
+ "@e-mc/types": "^0.8.3",
26
+ "@pi-r/aws": "^0.6.3",
27
+ "@pi-r/oracle": "^0.6.3",
28
+ "aws-sdk": "^2.1547.0",
29
29
  "oracledb": "^6.3.0"
30
30
  }
31
31
  }