-
+
diff --git a/packages/web/src/modals/SetFilterModal_Select.svelte b/packages/web/src/modals/SetFilterModal_Select.svelte
index dba3365ea..dd4b54b15 100644
--- a/packages/web/src/modals/SetFilterModal_Select.svelte
+++ b/packages/web/src/modals/SetFilterModal_Select.svelte
@@ -2,90 +2,59 @@
import FormSelectFieldRaw from '../forms/FormSelectFieldRaw.svelte';
export let name;
- export let filterType;
+ export let filterBehaviour;
function getOptions() {
- switch (filterType) {
- case 'number':
- return [
- { value: '=', label: 'equals' },
- { value: '<>', label: 'does not equal' },
- { value: '<', label: 'is smaller' },
- { value: '>', label: 'is greater' },
- { value: '<=', label: 'is smaller or equal' },
- { value: '>=', label: 'is greater or equal' },
- { value: 'NULL', label: 'is NULL' },
- { value: 'NOT NULL', label: 'is not NULL' },
- { value: 'sql', label: 'SQL condition' },
- { value: 'sqlRight', label: 'SQL condition - right side only' },
- ];
- case 'string':
- return [
- { value: '+', label: 'contains' },
- { value: '~', label: 'does not contain' },
- { value: '^', label: 'begins with' },
- { value: '!^', label: 'does not begin with' },
- { value: '$', label: 'ends with' },
- { value: '!$', label: 'does not end with' },
- { value: '=', label: 'equals' },
- { value: '<>', label: 'does not equal' },
- { value: '<', label: 'is smaller' },
- { value: '>', label: 'is greater' },
- { value: '<=', label: 'is smaller or equal' },
- { value: '>=', label: 'is greater or equal' },
- { value: 'NULL', label: 'is NULL' },
- { value: 'NOT NULL', label: 'is not NULL' },
- { value: 'sql', label: 'SQL condition' },
- { value: 'sqlRight', label: 'SQL condition - right side only' },
- ];
- case 'datetime':
- return [
- { value: '=', label: 'equals' },
- { value: '<>', label: 'does not equal' },
- { value: '<', label: 'is before' },
- { value: '>', label: 'is after' },
- { value: '<=', label: 'is before or equal' },
- { value: '>=', label: 'is after or equal' },
- { value: 'NULL', label: 'is NULL' },
- { value: 'NOT NULL', label: 'is not NULL' },
- { value: 'sql', label: 'SQL condition' },
- { value: 'sqlRight', label: 'SQL condition - right side only' },
- ];
- case 'mongo':
- return [
- { value: '=', label: 'equals' },
- { value: '<>', label: 'does not equal' },
- { value: '<', label: 'is smaller' },
- { value: '>', label: 'is greater' },
- { value: '<=', label: 'is smaller or equal' },
- { value: '>=', label: 'is greater or equal' },
- { value: '+', label: 'contains' },
- { value: '~', label: 'does not contain' },
- { value: '^', label: 'begins with' },
- { value: '!^', label: 'does not begin with' },
- { value: '$', label: 'ends with' },
- { value: '!$', label: 'does not end with' },
- { value: 'EXISTS', label: 'field exists' },
- { value: 'NOT EXISTS', label: 'field does not exist' },
- ];
- case 'eval':
- return [
- { value: '=', label: 'equals' },
- { value: '<>', label: 'does not equal' },
- { value: '<', label: 'is smaller' },
- { value: '>', label: 'is greater' },
- { value: '<=', label: 'is smaller or equal' },
- { value: '>=', label: 'is greater or equal' },
- { value: '+', label: 'contains' },
- { value: '~', label: 'does not contain' },
- { value: '^', label: 'begins with' },
- { value: '!^', label: 'does not begin with' },
- { value: '$', label: 'ends with' },
- { value: '!$', label: 'does not end with' },
- { value: 'NULL', label: 'is NULL' },
- { value: 'NOT NULL', label: 'is not NULL' },
- ];
+ const res = [];
+ if (filterBehaviour.supportEquals) {
+ res.push({ value: '=', label: 'equals' }, { value: '<>', label: 'does not equal' });
}
+
+ if (filterBehaviour.supportStringInclusion) {
+ res.push(
+ { value: '+', label: 'contains' },
+ { value: '~', label: 'does not contain' },
+ { value: '^', label: 'begins with' },
+ { value: '!^', label: 'does not begin with' },
+ { value: '$', label: 'ends with' },
+ { value: '!$', label: 'does not end with' }
+ );
+ }
+
+ if (filterBehaviour.supportNumberLikeComparison) {
+ res.push(
+ { value: '<', label: 'is smaller' },
+ { value: '>', label: 'is greater' },
+ { value: '<=', label: 'is smaller or equal' },
+ { value: '>=', label: 'is greater or equal' }
+ );
+ }
+
+ if (filterBehaviour.supportDatetimeComparison) {
+ res.push(
+ { value: '<', label: 'is before' },
+ { value: '>', label: 'is after' },
+ { value: '<=', label: 'is before or equal' },
+ { value: '>=', label: 'is after or equal' }
+ );
+ }
+
+ if (filterBehaviour.supportNullTesting) {
+ res.push({ value: 'NULL', label: 'is NULL' }, { value: 'NOT NULL', label: 'is not NULL' });
+ }
+
+ if (filterBehaviour.supportExistsTesting) {
+ res.push({ value: 'EXISTS', label: 'field exists' }, { value: 'NOT EXISTS', label: 'field does not exist' });
+ }
+
+ if (filterBehaviour.supportSqlCondition) {
+ res.push(
+ { value: 'sql', label: 'SQL condition' },
+ { value: 'sqlRight', label: 'SQL condition - right side only' }
+ );
+ }
+
+ return res;
}
diff --git a/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte b/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte
index 97499a8ff..1f7e42ccf 100644
--- a/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte
+++ b/packages/web/src/perspectives/PerspectiveFiltersColumn.svelte
@@ -57,7 +57,7 @@
column.dataNode.setFilter(value)}
columnName={column.dataNode.uniqueName}
- filterType={column.dataNode.filterType}
+ filterBehaviour={column.dataNode.filterBehaviour}
/>
{/each}
diff --git a/plugins/dbgate-plugin-mongo/src/frontend/driver.js b/plugins/dbgate-plugin-mongo/src/frontend/driver.js
index 4ad54613a..4945c19e3 100644
--- a/plugins/dbgate-plugin-mongo/src/frontend/driver.js
+++ b/plugins/dbgate-plugin-mongo/src/frontend/driver.js
@@ -93,6 +93,10 @@ const driver = {
}
return res;
},
+
+ getFilterBehaviour(dataType, standardFilterBehaviours) {
+ return standardFilterBehaviours.mongoFilterBehaviour;
+ },
};
module.exports = driver;