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