query-core 0.1.28 → 0.1.29
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/README.md +1 -1
- package/lib/search.js +107 -101
- package/package.json +1 -1
- package/src/search.ts +6 -1
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
# query
|
|
1
|
+
# query-core
|
package/lib/search.js
CHANGED
|
@@ -1,57 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
function buildFromQuery(query, sql, params, limit, offset, mp, bools, provider, totalCol) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
if (provider === exports.oracle) {
|
|
12
|
-
if (!totalCol || totalCol.length === 0) {
|
|
13
|
-
totalCol = 'total';
|
|
14
|
-
}
|
|
15
|
-
var sql2 = buildPagingQueryForOracle(sql, limit, offset, totalCol);
|
|
16
|
-
return queryAndCount(query, sql2, params, totalCol, mp, bools);
|
|
4
|
+
if (!limit || limit <= 0) {
|
|
5
|
+
return query(sql, params, mp, bools).then(function (list) {
|
|
6
|
+
var total = (list ? list.length : undefined);
|
|
7
|
+
return { list: list, total: total };
|
|
8
|
+
});
|
|
17
9
|
}
|
|
18
10
|
else {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
11
|
+
if (provider === exports.oracle) {
|
|
12
|
+
if (!totalCol || totalCol.length === 0) {
|
|
13
|
+
totalCol = 'total';
|
|
14
|
+
}
|
|
15
|
+
var sql2 = buildPagingQueryForOracle(sql, limit, offset, totalCol);
|
|
16
|
+
return queryAndCount(query, sql2, params, totalCol, mp, bools);
|
|
25
17
|
}
|
|
26
18
|
else {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
var sql2 = buildPagingQuery(sql, limit, offset);
|
|
20
|
+
var countQuery = buildCountQuery(sql);
|
|
21
|
+
var resultPromise = query(sql2, params, mp, bools);
|
|
22
|
+
var countPromise = query(countQuery, params).then(function (r) {
|
|
23
|
+
if (!r || r.length === 0) {
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
var r0 = r[0];
|
|
28
|
+
var keys = Object.keys(r0);
|
|
29
|
+
return r0[keys[0]];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return Promise.all([resultPromise, countPromise]).then(function (r) {
|
|
33
|
+
var list = r[0], total = r[1];
|
|
34
|
+
if (typeof total === 'string' && !isNaN(total)) {
|
|
35
|
+
var t = parseInt(total, 10);
|
|
36
|
+
return { list: list, total: t };
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return { list: list, total: total };
|
|
40
|
+
}
|
|
41
|
+
});
|
|
30
42
|
}
|
|
31
|
-
});
|
|
32
|
-
return Promise.all([resultPromise, countPromise]).then(function (r) {
|
|
33
|
-
var list = r[0], total = r[1];
|
|
34
|
-
return { list: list, total: total };
|
|
35
|
-
});
|
|
36
43
|
}
|
|
37
|
-
}
|
|
38
44
|
}
|
|
39
45
|
exports.buildFromQuery = buildFromQuery;
|
|
40
46
|
function queryAndCount(query, sql, params, total, mp, bools) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
if (!total || total.length === 0) {
|
|
48
|
+
total = 'total';
|
|
49
|
+
}
|
|
50
|
+
return query(sql, params, mp, bools).then(function (list) {
|
|
51
|
+
if (!list || list.length === 0) {
|
|
52
|
+
return { list: [], total: 0 };
|
|
53
|
+
}
|
|
54
|
+
var t = list[0][total];
|
|
55
|
+
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
|
|
56
|
+
var obj = list_1[_i];
|
|
57
|
+
delete obj[total];
|
|
58
|
+
}
|
|
59
|
+
return { list: list, total: t };
|
|
60
|
+
});
|
|
55
61
|
}
|
|
56
62
|
exports.queryAndCount = queryAndCount;
|
|
57
63
|
exports.oracle = 'oracle';
|
|
@@ -60,70 +66,70 @@ var S = 'SELECT';
|
|
|
60
66
|
var d = ' distinct ';
|
|
61
67
|
var D = ' DISTINCT ';
|
|
62
68
|
function buildPagingQuery(sql, limit, offset, provider) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
if (limit === undefined || limit == null) {
|
|
70
|
+
limit = 0;
|
|
71
|
+
}
|
|
72
|
+
if (offset === undefined || offset == null) {
|
|
73
|
+
offset = 0;
|
|
74
|
+
}
|
|
75
|
+
if (provider !== exports.oracle) {
|
|
76
|
+
return sql + " limit " + limit + " offset " + offset;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return buildPagingQueryForOracle(sql, limit, offset);
|
|
80
|
+
}
|
|
75
81
|
}
|
|
76
82
|
exports.buildPagingQuery = buildPagingQuery;
|
|
77
83
|
function buildPagingQueryForOracle(sql, limit, offset, total) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
84
|
+
if (!total || total.length === 0) {
|
|
85
|
+
total = 'total';
|
|
86
|
+
}
|
|
87
|
+
if (!offset) {
|
|
88
|
+
offset = 0;
|
|
89
|
+
}
|
|
90
|
+
var l = d.length;
|
|
91
|
+
var i = sql.indexOf(d);
|
|
92
|
+
if (i < 0) {
|
|
93
|
+
i = sql.indexOf(D);
|
|
94
|
+
}
|
|
95
|
+
if (i < 0) {
|
|
96
|
+
l = S.length;
|
|
97
|
+
i = sql.indexOf(s);
|
|
98
|
+
}
|
|
99
|
+
if (i < 0) {
|
|
100
|
+
i = sql.indexOf(S);
|
|
101
|
+
}
|
|
102
|
+
if (i >= 0) {
|
|
103
|
+
return sql.substr(0, l) + " count(*) over() as " + total + ", " + sql.substr(l) + " offset " + offset + " rows fetch next " + limit + " rows only";
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return sql + " offset " + offset + " rows fetch next " + limit + " rows only";
|
|
107
|
+
}
|
|
102
108
|
}
|
|
103
109
|
exports.buildPagingQueryForOracle = buildPagingQueryForOracle;
|
|
104
110
|
function buildCountQuery(sql) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
var sql2 = sql.trim();
|
|
112
|
+
var i = sql2.indexOf('select ');
|
|
113
|
+
if (i < 0) {
|
|
114
|
+
return sql;
|
|
115
|
+
}
|
|
116
|
+
var j = sql2.indexOf(' from ', i + 6);
|
|
117
|
+
if (j < 0) {
|
|
118
|
+
return sql;
|
|
119
|
+
}
|
|
120
|
+
var k = sql2.indexOf(' order by ', j);
|
|
121
|
+
var h = sql2.indexOf(' distinct ');
|
|
122
|
+
if (h > 0) {
|
|
123
|
+
var sql3 = 'select count(*) from (' + sql2.substring(i) + ') as main';
|
|
124
|
+
return sql3;
|
|
125
|
+
}
|
|
126
|
+
if (k > 0) {
|
|
127
|
+
var sql3 = 'select count(*) ' + sql2.substring(j, k);
|
|
128
|
+
return sql3;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
var sql3 = 'select count(*) ' + sql2.substring(j);
|
|
132
|
+
return sql3;
|
|
133
|
+
}
|
|
128
134
|
}
|
|
129
135
|
exports.buildCountQuery = buildCountQuery;
|
package/package.json
CHANGED
package/src/search.ts
CHANGED
|
@@ -32,7 +32,12 @@ export function buildFromQuery<T>(query: <K>(sql: string, args?: any[], m?: Stri
|
|
|
32
32
|
});
|
|
33
33
|
return Promise.all([resultPromise, countPromise]).then(r => {
|
|
34
34
|
const [list, total] = r;
|
|
35
|
-
|
|
35
|
+
if (typeof total === 'string' && !isNaN(total)) {
|
|
36
|
+
const t = parseInt(total, 10);
|
|
37
|
+
return {list, total: t};
|
|
38
|
+
} else {
|
|
39
|
+
return {list, total};
|
|
40
|
+
}
|
|
36
41
|
});
|
|
37
42
|
}
|
|
38
43
|
}
|