mirror of https://github.com/nocodb/nocodb
7 changed files with 149 additions and 83 deletions
@ -0,0 +1,54 @@ |
|||||||
|
import {MapFnArgs} from "../mapFunctionName"; |
||||||
|
|
||||||
|
const mssql = { |
||||||
|
MIN: (args: MapFnArgs) => { |
||||||
|
if (args.pt.arguments.length === 1) { |
||||||
|
return args.fn(args.pt.arguments[0]) |
||||||
|
} |
||||||
|
let query = ''; |
||||||
|
for (const [i, arg] of Object.entries(args.pt.arguments)) { |
||||||
|
if (+i === args.pt.arguments.length - 1) { |
||||||
|
query += args.knex.raw(`\n\tElse ${args.fn(arg).toQuery()}`).toQuery() |
||||||
|
} else { |
||||||
|
query += args.knex.raw(`\n\tWhen ${args.pt.arguments.filter((_, j) => +i !== j).map(arg1 => `${args.fn(arg).toQuery()} < ${args.fn(arg1).toQuery()}`).join(' And ')} Then ${args.fn(arg).toQuery()}`).toQuery() |
||||||
|
} |
||||||
|
} |
||||||
|
return args.knex.raw(`Case ${query}\n End${args.colAlias}`) |
||||||
|
}, |
||||||
|
MAX: (args: MapFnArgs) => { |
||||||
|
if (args.pt.arguments.length === 1) { |
||||||
|
return args.fn(args.pt.arguments[0]) |
||||||
|
} |
||||||
|
let query = ''; |
||||||
|
for (const [i, arg] of Object.entries(args.pt.arguments)) { |
||||||
|
if (+i === args.pt.arguments.length - 1) { |
||||||
|
query += args.knex.raw(`\nElse ${args.fn(arg).toQuery()}`).toQuery() |
||||||
|
} else { |
||||||
|
query += args.knex.raw(`\nWhen ${args.pt.arguments.filter((_, j) => +i !== j).map(arg1 => `${args.fn(arg).toQuery()} > ${args.fn(arg1).toQuery()}`).join(' And ')} Then ${args.fn(arg).toQuery()}`).toQuery() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return args.knex.raw(`Case ${query}\n End${args.colAlias}`) |
||||||
|
}, |
||||||
|
MOD: (pt) => { |
||||||
|
Object.assign(pt, { |
||||||
|
type: 'BinaryExpression', |
||||||
|
operator: '%', |
||||||
|
left: pt.arguments[0], |
||||||
|
right: pt.arguments[1] |
||||||
|
}) |
||||||
|
}, |
||||||
|
REPEAT: 'REPLICATE', |
||||||
|
NOW: 'getdate', |
||||||
|
SEARCH: (args: MapFnArgs) => { |
||||||
|
args.pt.callee.name = 'CHARINDEX'; |
||||||
|
const temp = args.pt.arguments[0] |
||||||
|
args.pt.arguments[0] = args.pt.arguments[1] |
||||||
|
args.pt.arguments[1] = temp; |
||||||
|
}, |
||||||
|
INT: (args: MapFnArgs) => { |
||||||
|
return args.knex.raw(`CASE WHEN ISNUMERIC(${args.fn(args.pt.arguments[0]).toQuery()}) = 1 THEN FLOOR(${args.fn(args.pt.arguments[0]).toQuery()}) ELSE 0 END${args.colAlias}`) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default mssql; |
@ -0,0 +1,27 @@ |
|||||||
|
import {MapFnArgs} from "../mapFunctionName"; |
||||||
|
|
||||||
|
|
||||||
|
const mysql2 = { |
||||||
|
LEN: 'CHAR_LENGTH', |
||||||
|
MIN: 'LEAST', |
||||||
|
MAX: 'GREATEST', |
||||||
|
SEARCH: (args: MapFnArgs) => { |
||||||
|
args.pt.callee.name = 'LOCATE'; |
||||||
|
const temp = args.pt.arguments[0] |
||||||
|
args.pt.arguments[0] = args.pt.arguments[1] |
||||||
|
args.pt.arguments[1] = temp; |
||||||
|
}, |
||||||
|
INT:(args: MapFnArgs) =>{ |
||||||
|
return args.knex.raw(`CAST(${args.fn(args.pt.arguments[0])} as SIGNED)${args.colAlias}`) |
||||||
|
}, |
||||||
|
LEFT:(args: MapFnArgs)=> { |
||||||
|
return args.knex.raw(`SUBSTR(${args.fn(args.pt.arguments[0])},1,${args.fn(args.pt.arguments[1])})${args.colAlias}`) |
||||||
|
}, |
||||||
|
RIGHT:(args: MapFnArgs)=> { |
||||||
|
return args.knex.raw(`SUBSTR(${args.fn(args.pt.arguments[0])},-${args.fn(args.pt.arguments[1])})${args.colAlias}`) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export default mysql2; |
||||||
|
|
@ -0,0 +1,21 @@ |
|||||||
|
import {MapFnArgs} from "../mapFunctionName"; |
||||||
|
|
||||||
|
const pg = { |
||||||
|
LEN: 'length', |
||||||
|
MIN: 'least', |
||||||
|
MAX: 'greatest', |
||||||
|
CEILING: 'ceil', |
||||||
|
ROUND: 'round', |
||||||
|
POWER: 'pow', |
||||||
|
SQRT: 'sqrt', |
||||||
|
SEARCH: (args: MapFnArgs) => { |
||||||
|
return args.knex.raw(`POSITION(${args.knex.raw(args.fn(args.pt.arguments[1]).toQuery())} in ${args.knex.raw(args.fn(args.pt.arguments[0]).toQuery())})${args.colAlias}`) |
||||||
|
}, |
||||||
|
INT(args: MapFnArgs) { |
||||||
|
// todo: correction
|
||||||
|
return args.knex.raw(`REGEXP_REPLACE(COALESCE(${args.fn(args.pt.arguments[0])}::character varying, '0'), '[^0-9]+|\\.[0-9]+' ,'')${args.colAlias}`) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export default pg; |
@ -0,0 +1,30 @@ |
|||||||
|
import {MapFnArgs} from "../mapFunctionName"; |
||||||
|
|
||||||
|
|
||||||
|
const sqlite3 = { |
||||||
|
LEN: 'LENGTH', |
||||||
|
CEILING(_pt) { |
||||||
|
// todo:
|
||||||
|
}, FLOOR(_pt) { |
||||||
|
// todo:
|
||||||
|
}, |
||||||
|
MOD:(pt) => { |
||||||
|
Object.assign(pt, { |
||||||
|
type: 'BinaryExpression', |
||||||
|
operator: '%', |
||||||
|
left: pt.arguments[0], |
||||||
|
right: pt.arguments[1] |
||||||
|
}) |
||||||
|
}, |
||||||
|
REPEAT(args: MapFnArgs) { |
||||||
|
return args.knex.raw(`replace(printf('%.' || ${args.fn(args.pt.arguments[1])} || 'c', '/'),'/',${args.fn(args.pt.arguments[0])})${args.colAlias}`) |
||||||
|
}, |
||||||
|
NOW: 'DATE', |
||||||
|
SEARCH:'INSTR', |
||||||
|
INT(args: MapFnArgs) { |
||||||
|
return args.knex.raw(`CAST(${args.fn(args.pt.arguments[0])} as INTEGER)${args.colAlias}`) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
export default sqlite3; |
Loading…
Reference in new issue