mirror of https://github.com/nocodb/nocodb
Pranav C
2 years ago
3 changed files with 349 additions and 303 deletions
@ -1,99 +1,115 @@ |
|||||||
// import dayjs from 'dayjs';
|
import dayjs from 'dayjs'; |
||||||
// import { convertUnits } from '../helpers/convertUnits';
|
import { convertUnits } from '../helpers/convertUnits'; |
||||||
// import { getWeekdayByText } from '../helpers/formulaFnHelper';
|
import { getWeekdayByText } from '../helpers/formulaFnHelper'; |
||||||
import commonFns from './commonFns'; |
import commonFns from './commonFns'; |
||||||
// import type { MapFnArgs } from '../mapFunctionName';
|
import type { MapFnArgs } from '../mapFunctionName'; |
||||||
|
|
||||||
const mysql2 = { |
const mysql2 = { |
||||||
...commonFns, |
...commonFns, |
||||||
// LEN: 'CHAR_LENGTH',
|
LEN: 'CHAR_LENGTH', |
||||||
// MIN: 'LEAST',
|
MIN: 'LEAST', |
||||||
// MAX: 'GREATEST',
|
MAX: 'GREATEST', |
||||||
// SEARCH: (args: MapFnArgs) => {
|
SEARCH: async (args: MapFnArgs) => { |
||||||
// args.pt.callee.name = 'LOCATE';
|
args.pt.callee.name = 'LOCATE'; |
||||||
// const temp = args.pt.arguments[0];
|
const temp = args.pt.arguments[0]; |
||||||
// args.pt.arguments[0] = args.pt.arguments[1];
|
args.pt.arguments[0] = args.pt.arguments[1]; |
||||||
// args.pt.arguments[1] = temp;
|
args.pt.arguments[1] = temp; |
||||||
// },
|
}, |
||||||
// INT: (args: MapFnArgs) => {
|
INT: async (args: MapFnArgs) => { |
||||||
// return args.knex.raw(
|
return { |
||||||
// `CAST(${args.fn(args.pt.arguments[0])} as SIGNED)${args.colAlias}`
|
builder: args.knex.raw( |
||||||
// );
|
`CAST(${(await args.fn(args.pt.arguments[0])).builder} as SIGNED)${args.colAlias}`, |
||||||
// },
|
), |
||||||
// LEFT: (args: MapFnArgs) => {
|
}; |
||||||
// return args.knex.raw(
|
}, |
||||||
// `SUBSTR(${args.fn(args.pt.arguments[0])},1,${args.fn(
|
LEFT: async (args: MapFnArgs) => { |
||||||
// args.pt.arguments[1]
|
return { |
||||||
// )})${args.colAlias}`
|
builder: args.knex.raw( |
||||||
// );
|
`SUBSTR(${(await args.fn(args.pt.arguments[0])).builder},1,${(await args.fn( |
||||||
// },
|
args.pt.arguments[1], |
||||||
// RIGHT: (args: MapFnArgs) => {
|
)).builder})${args.colAlias}`,
|
||||||
// return args.knex.raw(
|
), |
||||||
// `SUBSTR(${args.fn(args.pt.arguments[0])}, -(${args.fn(
|
}; |
||||||
// args.pt.arguments[1]
|
}, |
||||||
// )}))${args.colAlias}`
|
RIGHT: async (args: MapFnArgs) => { |
||||||
// );
|
return { |
||||||
// },
|
builder: args.knex.raw( |
||||||
// MID: 'SUBSTR',
|
`SUBSTR(${(await args.fn(args.pt.arguments[0])).builder}, -(${(await args.fn( |
||||||
// FLOAT: (args: MapFnArgs) => {
|
args.pt.arguments[1], |
||||||
// return args.knex
|
)).builder}))${args.colAlias}`,
|
||||||
// .raw(
|
), |
||||||
// `CAST(CAST(${args.fn(args.pt.arguments[0])} as CHAR) AS DOUBLE)${
|
}; |
||||||
// args.colAlias
|
}, |
||||||
// }`
|
MID: 'SUBSTR', |
||||||
// )
|
FLOAT: async (args: MapFnArgs) => { |
||||||
// .wrap('(', ')');
|
return { |
||||||
// },
|
builder: args.knex |
||||||
// DATEADD: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
.raw( |
||||||
// return knex.raw(
|
`CAST(CAST(${(await args.fn(args.pt.arguments[0])).builder} as CHAR) AS DOUBLE)${ |
||||||
// `CASE
|
args.colAlias |
||||||
// WHEN ${fn(pt.arguments[0])} LIKE '%:%' THEN
|
}`,
|
||||||
// DATE_FORMAT(DATE_ADD(${fn(pt.arguments[0])}, INTERVAL
|
) |
||||||
// ${fn(pt.arguments[1])} ${String(fn(pt.arguments[2])).replace(
|
.wrap('(', ')'), |
||||||
// /["']/g,
|
}; |
||||||
// ''
|
}, |
||||||
// )}), '%Y-%m-%d %H:%i')
|
DATEADD: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
// ELSE
|
return { |
||||||
// DATE(DATE_ADD(${fn(pt.arguments[0])}, INTERVAL
|
builder: knex.raw( |
||||||
// ${fn(pt.arguments[1])} ${String(fn(pt.arguments[2])).replace(
|
`CASE
|
||||||
// /["']/g,
|
WHEN ${(await fn(pt.arguments[0])).builder} LIKE '%:%' THEN |
||||||
// ''
|
DATE_FORMAT(DATE_ADD(${(await fn(pt.arguments[0])).builder}, INTERVAL |
||||||
// )}))
|
${(await fn(pt.arguments[1])).builder} ${String((await fn(pt.arguments[2])).builder).replace( |
||||||
// END${colAlias}`
|
/["']/g, |
||||||
// );
|
'', |
||||||
// },
|
)}), '%Y-%m-%d %H:%i') |
||||||
// DATETIME_DIFF: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
ELSE |
||||||
// const datetime_expr1 = fn(pt.arguments[0]);
|
DATE(DATE_ADD(${(await fn(pt.arguments[0])).builder}, INTERVAL |
||||||
// const datetime_expr2 = fn(pt.arguments[1]);
|
${(await fn(pt.arguments[1])).builder} ${String((await fn(pt.arguments[2])).builder).replace( |
||||||
//
|
/["']/g, |
||||||
// const unit = convertUnits(
|
'', |
||||||
// pt.arguments[2] ? fn(pt.arguments[2]).bindings[0] : 'seconds',
|
)})) |
||||||
// 'mysql'
|
END${colAlias}`,
|
||||||
// );
|
), |
||||||
//
|
}; |
||||||
// if (unit === 'MICROSECOND') {
|
}, |
||||||
// // MySQL doesn't support millisecond
|
DATETIME_DIFF: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
// // hence change from MICROSECOND to millisecond manually
|
const datetime_expr1 = (await fn(pt.arguments[0])).builder; |
||||||
// return knex.raw(
|
const datetime_expr2 = (await fn(pt.arguments[1])).builder; |
||||||
// `TIMESTAMPDIFF(${unit}, ${datetime_expr2}, ${datetime_expr1}) div 1000 ${colAlias}`
|
|
||||||
// );
|
const unit = convertUnits( |
||||||
// }
|
pt.arguments[2] ? (await fn(pt.arguments[2])).builder.bindings[0] : 'seconds', |
||||||
// return knex.raw(
|
'mysql' |
||||||
// `TIMESTAMPDIFF(${unit}, ${datetime_expr2}, ${datetime_expr1}) ${colAlias}`
|
); |
||||||
// );
|
|
||||||
// },
|
if (unit === 'MICROSECOND') { |
||||||
// WEEKDAY: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
// MySQL doesn't support millisecond
|
||||||
// // WEEKDAY() returns an index from 0 to 6 for Monday to Sunday
|
// hence change from MICROSECOND to millisecond manually
|
||||||
// return knex.raw(
|
return { |
||||||
// `(WEEKDAY(${
|
builder: knex.raw( |
||||||
// pt.arguments[0].type === 'Literal'
|
`TIMESTAMPDIFF(${unit}, ${datetime_expr2}, ${datetime_expr1}) div 1000 ${colAlias}`, |
||||||
// ? `'${dayjs(fn(pt.arguments[0])).format('YYYY-MM-DD')}'`
|
), |
||||||
// : fn(pt.arguments[0])
|
}; |
||||||
// }) - ${getWeekdayByText(
|
} |
||||||
// pt?.arguments[1]?.value
|
return { |
||||||
// )} % 7 + 7) % 7 ${colAlias}`
|
builder: knex.raw( |
||||||
// );
|
`TIMESTAMPDIFF(${unit}, ${datetime_expr2}, ${datetime_expr1}) ${colAlias}`, |
||||||
// },
|
), |
||||||
|
}; |
||||||
|
}, |
||||||
|
WEEKDAY: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
|
// WEEKDAY() returns an index from 0 to 6 for Monday to Sunday
|
||||||
|
return { |
||||||
|
builder: knex.raw( |
||||||
|
`(WEEKDAY(${ |
||||||
|
pt.arguments[0].type === 'Literal' |
||||||
|
? `'${dayjs((await fn(pt.arguments[0])).builder).format('YYYY-MM-DD')}'` |
||||||
|
: (await fn(pt.arguments[0])).builder |
||||||
|
}) - ${getWeekdayByText( |
||||||
|
pt?.arguments[1]?.value, |
||||||
|
)} % 7 + 7) % 7 ${colAlias}`,
|
||||||
|
), |
||||||
|
}; |
||||||
|
}, |
||||||
}; |
}; |
||||||
|
|
||||||
export default mysql2; |
export default mysql2; |
||||||
|
@ -1,198 +1,228 @@ |
|||||||
// import dayjs from 'dayjs';
|
import dayjs from 'dayjs'; |
||||||
// import { convertUnits } from '../helpers/convertUnits';
|
import { convertUnits } from '../helpers/convertUnits'; |
||||||
// import { getWeekdayByText } from '../helpers/formulaFnHelper';
|
import { getWeekdayByText } from '../helpers/formulaFnHelper'; |
||||||
// import {
|
import { |
||||||
// convertToTargetFormat,
|
convertToTargetFormat, |
||||||
// getDateFormat,
|
getDateFormat, |
||||||
// } from '../../../../../utils/dateTimeUtils';
|
} from '../../../../../utils/dateTimeUtils'; |
||||||
import commonFns from './commonFns'; |
import commonFns from './commonFns'; |
||||||
// import type { MapFnArgs } from '../mapFunctionName';
|
import type { MapFnArgs } from '../mapFunctionName'; |
||||||
|
|
||||||
const sqlite3 = { |
const sqlite3 = { |
||||||
...commonFns, |
...commonFns, |
||||||
// LEN: 'LENGTH',
|
LEN: 'LENGTH', |
||||||
// CEILING(args) {
|
async CEILING(args) { |
||||||
// return args.knex.raw(
|
return args.knex.raw( |
||||||
// `round(${args.fn(args.pt.arguments[0])} + 0.5)${args.colAlias}`
|
`round(${(await args.fn(args.pt.arguments[0])).builder} + 0.5)${ |
||||||
// );
|
args.colAlias |
||||||
// },
|
}` |
||||||
// FLOOR(args) {
|
); |
||||||
// return args.knex.raw(
|
}, |
||||||
// `round(${args.fn(args.pt.arguments[0])} - 0.5)${args.colAlias}`
|
async FLOOR(args) { |
||||||
// );
|
return args.knex.raw( |
||||||
// },
|
`round(${(await args.fn(args.pt.arguments[0])).builder} - 0.5)${ |
||||||
// MOD: (args: MapFnArgs) => {
|
args.colAlias |
||||||
// return args.fn({
|
}` |
||||||
// type: 'BinaryExpression',
|
); |
||||||
// operator: '%',
|
}, |
||||||
// left: args.pt.arguments[0],
|
MOD: async (args: MapFnArgs) => { |
||||||
// right: args.pt.arguments[1],
|
return ( |
||||||
// });
|
await args.fn({ |
||||||
// },
|
type: 'BinaryExpression', |
||||||
// REPEAT(args: MapFnArgs) {
|
operator: '%', |
||||||
// return args.knex.raw(
|
left: args.pt.arguments[0], |
||||||
// `replace(printf('%.' || ${args.fn(
|
right: args.pt.arguments[1], |
||||||
// args.pt.arguments[1]
|
}) |
||||||
// )} || 'c', '/'),'/',${args.fn(args.pt.arguments[0])})${args.colAlias}`
|
).builder; |
||||||
// );
|
}, |
||||||
// },
|
async REPEAT(args: MapFnArgs) { |
||||||
// NOW: 'DATE',
|
return args.knex.raw( |
||||||
// SEARCH: 'INSTR',
|
`replace(printf('%.' || ${ |
||||||
// INT(args: MapFnArgs) {
|
(await args.fn(args.pt.arguments[1])).builder |
||||||
// return args.knex.raw(
|
} || 'c', '/'),'/',${(await args.fn(args.pt.arguments[0])).builder})${ |
||||||
// `CAST(${args.fn(args.pt.arguments[0])} as INTEGER)${args.colAlias}`
|
args.colAlias |
||||||
// );
|
}` |
||||||
// },
|
); |
||||||
// LEFT: (args: MapFnArgs) => {
|
}, |
||||||
// return args.knex.raw(
|
NOW: 'DATE', |
||||||
// `SUBSTR(${args.fn(args.pt.arguments[0])},1,${args.fn(
|
SEARCH: 'INSTR', |
||||||
// args.pt.arguments[1]
|
async INT(args: MapFnArgs) { |
||||||
// )})${args.colAlias}`
|
return args.knex.raw( |
||||||
// );
|
`CAST(${(await args.fn(args.pt.arguments[0])).builder} as INTEGER)${ |
||||||
// },
|
args.colAlias |
||||||
// RIGHT: (args: MapFnArgs) => {
|
}` |
||||||
// return args.knex.raw(
|
); |
||||||
// `SUBSTR(${args.fn(args.pt.arguments[0])},-(${args.fn(
|
}, |
||||||
// args.pt.arguments[1]
|
LEFT: async (args: MapFnArgs) => { |
||||||
// )}))${args.colAlias}`
|
return args.knex.raw( |
||||||
// );
|
`SUBSTR(${(await args.fn(args.pt.arguments[0])).builder},1,${ |
||||||
// },
|
(await args.fn(args.pt.arguments[1])).builder |
||||||
// MID: 'SUBSTR',
|
})${args.colAlias}` |
||||||
// FLOAT: (args: MapFnArgs) => {
|
); |
||||||
// return args.knex
|
}, |
||||||
// .raw(`CAST(${args.fn(args.pt.arguments[0])} as FLOAT)${args.colAlias}`)
|
RIGHT: async (args: MapFnArgs) => { |
||||||
// .wrap('(', ')');
|
return args.knex.raw( |
||||||
// },
|
`SUBSTR(${(await args.fn(args.pt.arguments[0])).builder},-(${ |
||||||
// DATEADD: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
(await args.fn(args.pt.arguments[1])).builder |
||||||
// const dateIN = fn(pt.arguments[1]);
|
}))${args.colAlias}` |
||||||
// return knex.raw(
|
); |
||||||
// `CASE
|
}, |
||||||
// WHEN ${fn(pt.arguments[0])} LIKE '%:%' THEN
|
MID: 'SUBSTR', |
||||||
// STRFTIME('%Y-%m-%d %H:%M', DATETIME(DATETIME(${fn(
|
FLOAT: async (args: MapFnArgs) => { |
||||||
// pt.arguments[0]
|
return args.knex |
||||||
// )}, 'localtime'),
|
.raw( |
||||||
// ${dateIN > 0 ? '+' : ''}${fn(pt.arguments[1])} || ' ${String(
|
`CAST(${(await args.fn(args.pt.arguments[0])).builder} as FLOAT)${ |
||||||
// fn(pt.arguments[2])
|
args.colAlias |
||||||
// ).replace(/["']/g, '')}'))
|
}` |
||||||
// ELSE
|
) |
||||||
// DATE(DATETIME(${fn(pt.arguments[0])}, 'localtime'),
|
.wrap('(', ')'); |
||||||
// ${dateIN > 0 ? '+' : ''}${fn(pt.arguments[1])} || ' ${String(
|
}, |
||||||
// fn(pt.arguments[2])
|
DATEADD: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
// ).replace(/["']/g, '')}')
|
const dateIN = (await fn(pt.arguments[1])).builder; |
||||||
// END${colAlias}`
|
return knex.raw( |
||||||
// );
|
`CASE
|
||||||
// },
|
WHEN ${(await fn(pt.arguments[0])).builder} LIKE '%:%' THEN |
||||||
// DATETIME_DIFF: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
STRFTIME('%Y-%m-%d %H:%M', DATETIME(DATETIME(${fn( |
||||||
// let datetime_expr1 = fn(pt.arguments[0]);
|
pt.arguments[0] |
||||||
// let datetime_expr2 = fn(pt.arguments[1]);
|
)}, 'localtime'), |
||||||
// // JULIANDAY takes YYYY-MM-DD
|
${dateIN > 0 ? '+' : ''}${ |
||||||
// if (datetime_expr1.sql === '?' && datetime_expr1.bindings?.[0]) {
|
(await fn(pt.arguments[1])).builder |
||||||
// datetime_expr1 = `'${convertToTargetFormat(
|
} || ' ${String((await fn(pt.arguments[2])).builder).replace( |
||||||
// datetime_expr1.bindings[0],
|
/["']/g, |
||||||
// getDateFormat(datetime_expr1.bindings[0]),
|
'' |
||||||
// 'YYYY-MM-DD'
|
)}')) |
||||||
// )}'`;
|
ELSE |
||||||
// }
|
DATE(DATETIME(${(await fn(pt.arguments[0])).builder}, 'localtime'), |
||||||
//
|
${dateIN > 0 ? '+' : ''}${ |
||||||
// if (datetime_expr2.sql === '?' && datetime_expr2.bindings?.[0]) {
|
(await fn(pt.arguments[1])).builder |
||||||
// datetime_expr2 = `'${convertToTargetFormat(
|
} || ' ${String((await fn(pt.arguments[2])).builder).replace( |
||||||
// datetime_expr2.bindings[0],
|
/["']/g, |
||||||
// getDateFormat(datetime_expr2.bindings[0]),
|
'' |
||||||
// 'YYYY-MM-DD'
|
)}') |
||||||
// )}'`;
|
END${colAlias}` |
||||||
// }
|
); |
||||||
//
|
}, |
||||||
// const rawUnit = pt.arguments[2]
|
DATETIME_DIFF: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
// ? fn(pt.arguments[2]).bindings[0]
|
let datetime_expr1 = (await fn(pt.arguments[0])).builder; |
||||||
// : 'seconds';
|
let datetime_expr2 = (await fn(pt.arguments[1])).builder; |
||||||
// let sql;
|
// JULIANDAY takes YYYY-MM-DD
|
||||||
// const unit = convertUnits(rawUnit, 'sqlite');
|
if (datetime_expr1.sql === '?' && datetime_expr1.bindings?.[0]) { |
||||||
// switch (unit) {
|
datetime_expr1 = `'${convertToTargetFormat( |
||||||
// case 'seconds':
|
datetime_expr1.bindings[0], |
||||||
// sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2}))`;
|
getDateFormat(datetime_expr1.bindings[0]), |
||||||
// break;
|
'YYYY-MM-DD' |
||||||
// case 'minutes':
|
)}'`;
|
||||||
// sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 60`;
|
} |
||||||
// break;
|
|
||||||
// case 'hours':
|
if (datetime_expr2.sql === '?' && datetime_expr2.bindings?.[0]) { |
||||||
// sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 3600`;
|
datetime_expr2 = `'${convertToTargetFormat( |
||||||
// break;
|
datetime_expr2.bindings[0], |
||||||
// case 'milliseconds':
|
getDateFormat(datetime_expr2.bindings[0]), |
||||||
// sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) * 1000`;
|
'YYYY-MM-DD' |
||||||
// break;
|
)}'`;
|
||||||
// case 'weeks':
|
} |
||||||
// sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 7)`;
|
|
||||||
// break;
|
const rawUnit = pt.arguments[2] |
||||||
// case 'months':
|
? (await fn(pt.arguments[2])).builder.bindings[0] |
||||||
// sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 12 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) `;
|
: 'seconds'; |
||||||
// break;
|
let sql; |
||||||
// case 'quarters':
|
const unit = convertUnits(rawUnit, 'sqlite'); |
||||||
// sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 4 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) / 3`;
|
switch (unit) { |
||||||
// break;
|
case 'seconds': |
||||||
// case 'years':
|
sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2}))`; |
||||||
// sql = `CASE
|
break; |
||||||
// WHEN (${datetime_expr2} < ${datetime_expr1}) THEN
|
case 'minutes': |
||||||
// (
|
sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 60`; |
||||||
// (strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2}))
|
break; |
||||||
// - (strftime('%m', ${datetime_expr1}) < strftime('%m', ${datetime_expr2})
|
case 'hours': |
||||||
// OR (strftime('%m', ${datetime_expr1}) = strftime('%m', ${datetime_expr2})
|
sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) / 3600`; |
||||||
// AND strftime('%d', ${datetime_expr1}) < strftime('%d', ${datetime_expr2})))
|
break; |
||||||
// )
|
case 'milliseconds': |
||||||
// WHEN (${datetime_expr2} > ${datetime_expr1}) THEN
|
sql = `(strftime('%s', ${datetime_expr1}) - strftime('%s', ${datetime_expr2})) * 1000`; |
||||||
// -1 * (
|
break; |
||||||
// (strftime('%Y', ${datetime_expr2}) - strftime('%Y', ${datetime_expr1}))
|
case 'weeks': |
||||||
// - (strftime('%m', ${datetime_expr2}) < strftime('%m', ${datetime_expr1})
|
sql = `ROUND((JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})) / 7)`; |
||||||
// OR (strftime('%m', ${datetime_expr2}) = strftime('%m', ${datetime_expr1})
|
break; |
||||||
// AND strftime('%d', ${datetime_expr2}) < strftime('%d', ${datetime_expr1})))
|
case 'months': |
||||||
// )
|
sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 12 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) `; |
||||||
// ELSE 0
|
break; |
||||||
// END`;
|
case 'quarters': |
||||||
// break;
|
sql = `(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) * 4 + (strftime('%m', ${datetime_expr1}) - strftime('%m', ${datetime_expr2})) / 3`; |
||||||
// case 'days':
|
break; |
||||||
// sql = `JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})`;
|
case 'years': |
||||||
// break;
|
sql = `CASE
|
||||||
// default:
|
WHEN (${datetime_expr2} < ${datetime_expr1}) THEN |
||||||
// sql = '';
|
( |
||||||
// }
|
(strftime('%Y', ${datetime_expr1}) - strftime('%Y', ${datetime_expr2})) |
||||||
// return knex.raw(`${sql} ${colAlias}`);
|
- (strftime('%m', ${datetime_expr1}) < strftime('%m', ${datetime_expr2}) |
||||||
// },
|
OR (strftime('%m', ${datetime_expr1}) = strftime('%m', ${datetime_expr2}) |
||||||
// WEEKDAY: ({ fn, knex, pt, colAlias }: MapFnArgs) => {
|
AND strftime('%d', ${datetime_expr1}) < strftime('%d', ${datetime_expr2}))) |
||||||
// // strftime('%w', date) - day of week 0 - 6 with Sunday == 0
|
) |
||||||
// // WEEKDAY() returns an index from 0 to 6 for Monday to Sunday
|
WHEN (${datetime_expr2} > ${datetime_expr1}) THEN |
||||||
// return knex.raw(
|
-1 * ( |
||||||
// `(strftime('%w', ${
|
(strftime('%Y', ${datetime_expr2}) - strftime('%Y', ${datetime_expr1})) |
||||||
// pt.arguments[0].type === 'Literal'
|
- (strftime('%m', ${datetime_expr2}) < strftime('%m', ${datetime_expr1}) |
||||||
// ? `'${dayjs(fn(pt.arguments[0])).format('YYYY-MM-DD')}'`
|
OR (strftime('%m', ${datetime_expr2}) = strftime('%m', ${datetime_expr1}) |
||||||
// : fn(pt.arguments[0])
|
AND strftime('%d', ${datetime_expr2}) < strftime('%d', ${datetime_expr1}))) |
||||||
// }) - 1 - ${getWeekdayByText(
|
) |
||||||
// pt?.arguments[1]?.value
|
ELSE 0 |
||||||
// )} % 7 + 7) % 7 ${colAlias}`
|
END`;
|
||||||
// );
|
break; |
||||||
// },
|
case 'days': |
||||||
// AND: (args: MapFnArgs) => {
|
sql = `JULIANDAY(${datetime_expr1}) - JULIANDAY(${datetime_expr2})`; |
||||||
// return args.knex.raw(
|
break; |
||||||
// `CASE WHEN ${args.knex
|
default: |
||||||
// .raw(
|
sql = ''; |
||||||
// `${args.pt.arguments
|
} |
||||||
// .map((ar) => args.fn(ar, '', 'AND').toQuery())
|
return knex.raw(`${sql} ${colAlias}`); |
||||||
// .join(' AND ')}`
|
}, |
||||||
// )
|
WEEKDAY: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { |
||||||
// .wrap('(', ')')
|
// strftime('%w', date) - day of week 0 - 6 with Sunday == 0
|
||||||
// .toQuery()} THEN 1 ELSE 0 END ${args.colAlias}`
|
// WEEKDAY() returns an index from 0 to 6 for Monday to Sunday
|
||||||
// );
|
return knex.raw( |
||||||
// },
|
`(strftime('%w', ${ |
||||||
// OR: (args: MapFnArgs) => {
|
pt.arguments[0].type === 'Literal' |
||||||
// return args.knex.raw(
|
? `'${dayjs((await fn(pt.arguments[0])).builder).format( |
||||||
// `CASE WHEN ${args.knex
|
'YYYY-MM-DD' |
||||||
// .raw(
|
)}'` |
||||||
// `${args.pt.arguments
|
: (await fn(pt.arguments[0])).builder |
||||||
// .map((ar) => args.fn(ar, '', 'OR').toQuery())
|
}) - 1 - ${getWeekdayByText( |
||||||
// .join(' OR ')}`
|
pt?.arguments[1]?.value |
||||||
// )
|
)} % 7 + 7) % 7 ${colAlias}` |
||||||
// .wrap('(', ')')
|
); |
||||||
// .toQuery()} THEN 1 ELSE 0 END ${args.colAlias}`
|
}, |
||||||
// );
|
AND: async (args: MapFnArgs) => { |
||||||
// },
|
return args.knex.raw( |
||||||
|
`CASE WHEN ${args.knex |
||||||
|
.raw( |
||||||
|
`${( |
||||||
|
await Promise.all( |
||||||
|
args.pt.arguments.map(async (ar) => |
||||||
|
(await args.fn(ar, '', 'AND')).builder.toQuery() |
||||||
|
) |
||||||
|
) |
||||||
|
).join(' AND ')}` |
||||||
|
) |
||||||
|
.wrap('(', ')') |
||||||
|
.toQuery()} THEN 1 ELSE 0 END ${args.colAlias}` |
||||||
|
); |
||||||
|
}, |
||||||
|
OR: async (args: MapFnArgs) => { |
||||||
|
return args.knex.raw( |
||||||
|
`CASE WHEN ${args.knex |
||||||
|
.raw( |
||||||
|
`${( |
||||||
|
await Promise.all( |
||||||
|
args.pt.arguments.map(async (ar) => |
||||||
|
(await args.fn(ar, '', 'OR')).builder.toQuery() |
||||||
|
) |
||||||
|
) |
||||||
|
).join(' OR ')}` |
||||||
|
) |
||||||
|
.wrap('(', ')') |
||||||
|
.toQuery()} THEN 1 ELSE 0 END ${args.colAlias}` |
||||||
|
); |
||||||
|
}, |
||||||
}; |
}; |
||||||
|
|
||||||
export default sqlite3; |
export default sqlite3; |
||||||
|
Loading…
Reference in new issue