Improve helpers structure (#10052)

* Improve helpers structure

* Added DatabaseHelper base class

* Refactor index.ts
This commit is contained in:
Oreille
2021-12-01 21:08:24 +01:00
committed by GitHub
parent 13deca8ddc
commit bc864d1f51
28 changed files with 288 additions and 348 deletions

View File

@@ -8,8 +8,7 @@ import { Aggregate, Filter, LogicalFilterAND, Query } from '@directus/shared/typ
import { applyFunctionToColumnName } from './apply-function-to-column-name';
import { getColumn } from './get-column';
import { getRelationType } from './get-relation-type';
import { getGeometryHelper } from '../database/helpers/geometry';
import { getDateHelper } from '../database/helpers/date';
import { getHelpers } from '../database/helpers';
const generateAlias = customAlphabet('abcdefghijklmnopqrstuvwxyz', 5);
@@ -144,6 +143,7 @@ export function applyFilter(
collection: string,
subQuery = false
) {
const helpers = getHelpers(knex);
const relations: Relation[] = schema.relations;
const aliasMap: Record<string, string> = {};
@@ -371,8 +371,6 @@ export function applyFilter(
});
}
const dateHelper = getDateHelper();
const [collection, field] = key.split('.');
if (collection in schema.collections && field in schema.collections[collection].fields) {
@@ -380,9 +378,9 @@ export function applyFilter(
if (['date', 'dateTime', 'time', 'timestamp'].includes(type)) {
if (Array.isArray(compareValue)) {
compareValue = compareValue.map((val) => dateHelper.parseDate(val));
compareValue = compareValue.map((val) => helpers.date.parse(val));
} else {
compareValue = dateHelper.parseDate(compareValue);
compareValue = helpers.date.parse(compareValue);
}
}
}
@@ -479,21 +477,19 @@ export function applyFilter(
dbQuery[logical].whereNotBetween(selectionRaw, value);
}
const geometryHelper = getGeometryHelper();
if (operator == '_intersects') {
dbQuery[logical].whereRaw(geometryHelper.intersects(key, compareValue));
dbQuery[logical].whereRaw(helpers.st.intersects(key, compareValue));
}
if (operator == '_nintersects') {
dbQuery[logical].whereRaw(geometryHelper.nintersects(key, compareValue));
dbQuery[logical].whereRaw(helpers.st.nintersects(key, compareValue));
}
if (operator == '_intersects_bbox') {
dbQuery[logical].whereRaw(geometryHelper.intersects_bbox(key, compareValue));
dbQuery[logical].whereRaw(helpers.st.intersects_bbox(key, compareValue));
}
if (operator == '_nintersects_bbox') {
dbQuery[logical].whereRaw(geometryHelper.nintersects_bbox(key, compareValue));
dbQuery[logical].whereRaw(helpers.st.nintersects_bbox(key, compareValue));
}
}