filter behaviour WIP

This commit is contained in:
Jan Prochazka
2024-08-19 12:49:26 +02:00
parent 2a48e0c4a0
commit c3609e8c7b
24 changed files with 105 additions and 76 deletions

View File

@@ -0,0 +1,17 @@
import { FilterBehaviour } from 'dbgate-types';
import {
datetimeFilterBehaviour,
logicalFilterBehaviour,
numberFilterBehaviour,
stringFilterBehaviour,
} from './filterBehaviours';
import { isTypeDateTime, isTypeLogical, isTypeNumber, isTypeString } from './commonTypeParser';
export function detectSqlFilterBehaviour(dataType: string): FilterBehaviour {
if (!dataType) return stringFilterBehaviour;
if (isTypeNumber(dataType)) return numberFilterBehaviour;
if (isTypeString(dataType)) return stringFilterBehaviour;
if (isTypeLogical(dataType)) return logicalFilterBehaviour;
if (isTypeDateTime(dataType)) return datetimeFilterBehaviour;
return stringFilterBehaviour;
}

View File

@@ -3,6 +3,7 @@ import { SqlDumper } from './SqlDumper';
import { splitQuery } from 'dbgate-query-splitter';
import { dumpSqlSelect } from 'dbgate-sqltree';
import { EngineDriver, QueryResult, RunScriptOptions } from 'dbgate-types';
import { detectSqlFilterBehaviour } from './detectSqlFilterBehaviour';
const dialect = {
limitSelect: true,
@@ -150,4 +151,7 @@ export const driverBase = {
showConnectionField: (field, values) => false,
showConnectionTab: field => true,
getAccessTokenFromAuth: async (connection, req) => null,
getFilterBehaviour(dataType: string, standardFilterBehaviours) {
return detectSqlFilterBehaviour(dataType);
},
};

View File

@@ -0,0 +1,69 @@
import { FilterBehaviour } from 'dbgate-types';
export const numberFilterBehaviour: FilterBehaviour = {
compilerType: 'sqlTree',
supportEquals: true,
supportNumberLikeComparison: true,
supportNullTesting: true,
supportSqlCondition: true,
allowNumberToken: true,
};
export const stringFilterBehaviour: FilterBehaviour = {
compilerType: 'sqlTree',
supportEquals: true,
supportStringInclusion: true,
supportEmpty: true,
supportNumberLikeComparison: true,
supportNullTesting: true,
supportSqlCondition: true,
allowStringToken: true,
allowHexString: true,
};
export const logicalFilterBehaviour: FilterBehaviour = {
compilerType: 'sqlTree',
supportBooleanValues: true,
supportNullTesting: true,
supportSqlCondition: true,
};
export const datetimeFilterBehaviour: FilterBehaviour = {
compilerType: 'sqlTree',
supportNullTesting: true,
supportSqlCondition: true,
supportDatetimeSymbols: true,
supportDatetimeComparison: true,
};
export const mongoFilterBehaviour: FilterBehaviour = {
compilerType: 'mongoCondition',
supportEquals: true,
supportArrayTesting: true,
supportNumberLikeComparison: true,
supportStringInclusion: true,
supportBooleanValues: true,
supportExistsTesting: true,
};
export const evalFilterBehaviour: FilterBehaviour = {
compilerType: 'sqlTree',
supportEquals: true,
supportStringInclusion: true,
supportEmpty: true,
supportNumberLikeComparison: true,
supportNullTesting: true,
allowStringToken: true,
};
export const standardFilterBehaviours = {
numberFilterBehaviour,
stringFilterBehaviour,
logicalFilterBehaviour,
datetimeFilterBehaviour,
mongoFilterBehaviour,
evalFilterBehaviour,
};

View File

@@ -21,3 +21,5 @@ export * from './preloadedRowsTools';
export * from './ScriptWriter';
export * from './getLogger';
export * from './getConnectionLabel';
export * from './detectSqlFilterBehaviour';
export * from './filterBehaviours';