query-core 0.1.31 → 0.2.0
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/lib/query.js +1 -1
- package/lib/search.js +15 -2
- package/package.json +1 -1
- package/src/query.ts +1 -1
- package/src/search.ts +13 -2
package/lib/query.js
CHANGED
|
@@ -14,7 +14,7 @@ function buildSort(sort, map) {
|
|
|
14
14
|
var field = st;
|
|
15
15
|
var tp = st.charAt(0);
|
|
16
16
|
if (tp === '-' || tp === '+') {
|
|
17
|
-
field = st.
|
|
17
|
+
field = st.substring(1);
|
|
18
18
|
}
|
|
19
19
|
var sortType = (tp === '-' ? ' desc' : '');
|
|
20
20
|
sort2.push(getField(field.trim(), map) + sortType);
|
package/lib/search.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function
|
|
3
|
+
function getOffset(limit, page, ifirstPageSize) {
|
|
4
|
+
if (ifirstPageSize && ifirstPageSize > 0) {
|
|
5
|
+
var offset = limit * (page - 2) + ifirstPageSize;
|
|
6
|
+
return offset < 0 ? 0 : offset;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
var offset = limit * (page - 1);
|
|
10
|
+
return offset < 0 ? 0 : offset;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.getOffset = getOffset;
|
|
14
|
+
function buildFromQuery(query, sql, params, limit, page, mp, bools, provider, totalCol) {
|
|
4
15
|
if (!limit || limit <= 0) {
|
|
5
16
|
return query(sql, params, mp, bools).then(function (list) {
|
|
6
17
|
var total = (list ? list.length : undefined);
|
|
@@ -8,6 +19,8 @@ function buildFromQuery(query, sql, params, limit, offset, mp, bools, provider,
|
|
|
8
19
|
});
|
|
9
20
|
}
|
|
10
21
|
else {
|
|
22
|
+
var ipage = (!page || page <= 0 ? 1 : page);
|
|
23
|
+
var offset = getOffset(limit, ipage);
|
|
11
24
|
if (provider === exports.oracle) {
|
|
12
25
|
if (!totalCol || totalCol.length === 0) {
|
|
13
26
|
totalCol = 'total';
|
|
@@ -100,7 +113,7 @@ function buildPagingQueryForOracle(sql, limit, offset, total) {
|
|
|
100
113
|
i = sql.indexOf(S);
|
|
101
114
|
}
|
|
102
115
|
if (i >= 0) {
|
|
103
|
-
return sql.
|
|
116
|
+
return sql.substring(0, l) + " count(*) over() as " + total + ", " + sql.substring(l) + " offset " + offset + " rows fetch next " + limit + " rows only";
|
|
104
117
|
}
|
|
105
118
|
else {
|
|
106
119
|
return sql + " offset " + offset + " rows fetch next " + limit + " rows only";
|
package/package.json
CHANGED
package/src/query.ts
CHANGED
|
@@ -15,7 +15,7 @@ export function buildSort(sort?: string, map?: Attributes|StringMap): string {
|
|
|
15
15
|
let field = st;
|
|
16
16
|
const tp = st.charAt(0);
|
|
17
17
|
if (tp === '-' || tp === '+') {
|
|
18
|
-
field = st.
|
|
18
|
+
field = st.substring(1);
|
|
19
19
|
}
|
|
20
20
|
const sortType = (tp === '-' ? ' desc' : '');
|
|
21
21
|
sort2.push(getField(field.trim(), map) + sortType);
|
package/src/search.ts
CHANGED
|
@@ -4,13 +4,24 @@ export interface SearchResult<T> {
|
|
|
4
4
|
list: T[];
|
|
5
5
|
total?: number;
|
|
6
6
|
}
|
|
7
|
-
export function
|
|
7
|
+
export function getOffset(limit: number, page: number, ifirstPageSize?: number): number {
|
|
8
|
+
if (ifirstPageSize && ifirstPageSize > 0) {
|
|
9
|
+
const offset = limit * (page - 2) + ifirstPageSize;
|
|
10
|
+
return offset < 0 ? 0 : offset;
|
|
11
|
+
} else {
|
|
12
|
+
const offset = limit * (page - 1);
|
|
13
|
+
return offset < 0 ? 0 : offset;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function buildFromQuery<T>(query: <K>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[]) => Promise<K[]>, sql: string, params?: any[], limit?: number, page?: number, mp?: StringMap, bools?: Attribute[], provider?: string, totalCol?: string): Promise<SearchResult<T>> {
|
|
8
17
|
if (!limit || limit <= 0) {
|
|
9
18
|
return query<T>(sql, params, mp, bools).then(list => {
|
|
10
19
|
const total = (list ? list.length : undefined);
|
|
11
20
|
return {list, total};
|
|
12
21
|
});
|
|
13
22
|
} else {
|
|
23
|
+
const ipage = (!page || page <= 0 ? 1 : page)
|
|
24
|
+
const offset = getOffset(limit, ipage)
|
|
14
25
|
if (provider === oracle) {
|
|
15
26
|
if (!totalCol || totalCol.length === 0) {
|
|
16
27
|
totalCol = 'total';
|
|
@@ -95,7 +106,7 @@ export function buildPagingQueryForOracle(sql: string, limit: number, offset?: n
|
|
|
95
106
|
i = sql.indexOf(S);
|
|
96
107
|
}
|
|
97
108
|
if (i >= 0) {
|
|
98
|
-
return `${sql.
|
|
109
|
+
return `${sql.substring(0, l)} count(*) over() as ${total}, ${sql.substring(l)} offset ${offset} rows fetch next ${limit} rows only`;
|
|
99
110
|
} else {
|
|
100
111
|
return `${sql} offset ${offset} rows fetch next ${limit} rows only`;
|
|
101
112
|
}
|