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