pg-format.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // [Joshen] These are from https://github.com/datalanche/node-pg-format/blob/master/lib/index.js
  2. function formatDate(date: any) {
  3. date = date.replace('T', ' ')
  4. date = date.replace('Z', '+00')
  5. return date
  6. }
  7. function arrayToList(useSpace: any, array: any, formatter: any) {
  8. let sql = ''
  9. sql += useSpace ? ' (' : '('
  10. for (var i = 0; i < array.length; i++) {
  11. sql += (i === 0 ? '' : ', ') + formatter(array[i])
  12. }
  13. sql += ')'
  14. return sql
  15. }
  16. export function quoteLiteral(value: any): any {
  17. let literal = null
  18. let explicitCast = null
  19. if (value === undefined || value === null) {
  20. return 'NULL'
  21. } else if (value === false) {
  22. return "'f'"
  23. } else if (value === true) {
  24. return "'t'"
  25. } else if (value instanceof Date) {
  26. return "'" + formatDate(value.toISOString()) + "'"
  27. } else if (value instanceof Buffer) {
  28. return "E'\\\\x" + value.toString('hex') + "'"
  29. } else if (Array.isArray(value) === true) {
  30. let temp = []
  31. for (let i = 0; i < value.length; i++) {
  32. if (Array.isArray(value[i]) === true) {
  33. temp.push(arrayToList(i !== 0, value[i], quoteLiteral))
  34. } else {
  35. temp.push(quoteLiteral(value[i]))
  36. }
  37. }
  38. return temp.toString()
  39. } else if (value === Object(value)) {
  40. explicitCast = 'jsonb'
  41. literal = JSON.stringify(value)
  42. } else {
  43. literal = value.toString().slice(0) // create copy
  44. }
  45. let hasBackslash = false
  46. let quoted = "'"
  47. for (let i = 0; i < literal.length; i++) {
  48. let c = literal[i]
  49. if (c === "'") {
  50. quoted += c + c
  51. } else if (c === '\\') {
  52. quoted += c + c
  53. hasBackslash = true
  54. } else {
  55. quoted += c
  56. }
  57. }
  58. quoted += "'"
  59. if (hasBackslash === true) {
  60. quoted = 'E' + quoted
  61. }
  62. if (explicitCast) {
  63. quoted += '::' + explicitCast
  64. }
  65. return quoted
  66. }