NextRJ Database query encasulation
Condition encasulation
export type Condition = [string, string | string[], string?, Operator?]
Generate a fuzzy search sql template
import { assertEquals } from 'https://deno.land/std/assert/mod.ts'
import { toFuzzyQueryTemplate } from 'https://deno.land/x/nextrj_query/mod.ts'
const queryTemplate = toFuzzyQueryTemplate('v', ['c1', 'c2'], { ignoreCase: false })
assertEquals(
queryTemplate,
{ content: 'c1 like :search_0 or c2 like :search_0', params: { search_0: '%v%' } },
)
Convert one condition to sql template
import { assertEquals } from 'https://deno.land/std/assert/mod.ts'
import { Operator, toConditionQueryTemplate } from 'https://deno.land/x/nextrj_query/mod.ts'
let queryTemplate = toConditionQueryTemplate(['fuzzy', 'v', { fuzzyColumns: ['c1', 'c2'] }])
assertEquals(
queryTemplate,
{ content: 'c1 ilike :param_0_0 or c2 ilike :param_0_0', params: { param_0_0: '%v%' } },
)
queryTemplate = toConditionQueryTemplate(['c', '1', 'int', Operator.EQ])
assertEquals(
queryTemplate,
{ content: 'c = :param', params: { param: 1 } },
)
queryTemplate = toConditionQueryTemplate(['c', ['1', '2'], 'int', Operator.IN])
assertEquals(
queryTemplate,
{ content: 'c in (:param_0, :param_1)', params: { param_0: 1, param_1: 2 } },
)
queryTemplate = toConditionQueryTemplate(['c', ['1', '10'], 'int', Operator.RANGE_EQ_LT])
assertEquals(
queryTemplate,
{ content: '(c >= :param_0 and c < :param_1)', params: { param_0: 1, param_1: 10 } },
)
Convert multiple conditions to sql template
import { assertEquals } from 'https://deno.land/std/assert/mod.ts'
import { Operator, toConditionsQueryTemplate } from 'https://deno.land/x/nextrj_query/mod.ts'
const queryTemplate = toConditionsQueryTemplate(
[
['fuzzy', 'v'],
['c3', '1', 'int', Operator.EQ],
['c4', ['2', '3'], 'int', Operator.IN],
['c5', ['4', '10'], 'int', Operator.RANGE_EQ_LT],
],
{ fuzzyColumns: ['c1', 'c2'] },
)
assertEquals(
queryTemplate,
{
content: [
'c1 ilike :param_0_0 or c2 ilike :param_0_0',
'c3 = :param_1',
'c4 in (:param_2_0, :param_2_1)',
'(c5 >= :param_3_0 and c < :param_3_1)',
].join('\n'),
params: {
param_0_0: '%v%',
param_1: 1,
param_2_0: 2,
param_2_1: 3,
param_3_0: 4,
param_3_1: 10,
},
},
)