projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
15106: Changes full text search to use trigram indexing
[arvados.git]
/
src
/
services
/
api
/
filter-builder.ts
diff --git
a/src/services/api/filter-builder.ts
b/src/services/api/filter-builder.ts
index 08746c81b9ee1d91736b4e9e09eb79b820bd916f..77fcef6fca096bf8a13a406f1b3e0b1bd1a8ed25 100644
(file)
--- a/
src/services/api/filter-builder.ts
+++ b/
src/services/api/filter-builder.ts
@@
-11,8
+11,8
@@
export function joinFilters(filters0?: string, filters1?: string) {
export class FilterBuilder {
constructor(private filters = "") { }
export class FilterBuilder {
constructor(private filters = "") { }
- public addEqual(field: string, value?: string | boolean, resourcePrefix?: string) {
- return this.addCondition(field, "=", value, "", "", resourcePrefix
);
+ public addEqual(field: string, value?: string | boolean
| null
, resourcePrefix?: string) {
+ return this.addCondition(field, "=", value, "", "", resourcePrefix);
}
public addLike(field: string, value?: string, resourcePrefix?: string) {
}
public addLike(field: string, value?: string, resourcePrefix?: string) {
@@
-55,17
+55,27
@@
export class FilterBuilder {
return this.addCondition("properties", "exists", value, "", "", resourcePrefix);
}
return this.addCondition("properties", "exists", value, "", "", resourcePrefix);
}
+ public addFullTextSearch(value: string) {
+ const terms = value.trim().split(/(\s+)/);
+ terms.forEach(term => {
+ if (term !== " ") {
+ this.addCondition("any", "ilike", term, "%", "%");
+ }
+ });
+ return this;
+ }
+
public getFilters() {
return this.filters;
}
public getFilters() {
return this.filters;
}
- private addCondition(field: string, cond: string, value?: string | string[] | boolean, prefix: string = "", postfix: string = "", resourcePrefix?: string) {
- if (value) {
+ private addCondition(field: string, cond: string, value?: string | string[] | boolean
| null
, prefix: string = "", postfix: string = "", resourcePrefix?: string) {
+ if (value
!== undefined
) {
if (typeof value === "string") {
value = `"${prefix}${value}${postfix}"`;
} else if (Array.isArray(value)) {
value = `["${value.join(`","`)}"]`;
if (typeof value === "string") {
value = `"${prefix}${value}${postfix}"`;
} else if (Array.isArray(value)) {
value = `["${value.join(`","`)}"]`;
- } else {
+ } else
if (value !== null)
{
value = value ? "true" : "false";
}
value = value ? "true" : "false";
}