shared.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. 'use strict'
  2. const TYPES = require('./datatypes').TYPES
  3. const Table = require('./table')
  4. let PromiseLibrary = Promise
  5. const driver = {}
  6. const map = []
  7. /**
  8. * Register you own type map.
  9. *
  10. * @path module.exports.map
  11. * @param {*} jstype JS data type.
  12. * @param {*} sqltype SQL data type.
  13. */
  14. map.register = function (jstype, sqltype) {
  15. for (let index = 0; index < this.length; index++) {
  16. const item = this[index]
  17. if (item.js === jstype) {
  18. this.splice(index, 1)
  19. break
  20. }
  21. }
  22. this.push({
  23. js: jstype,
  24. sql: sqltype
  25. })
  26. return null
  27. }
  28. map.register(String, TYPES.NVarChar)
  29. map.register(Number, TYPES.Int)
  30. map.register(Boolean, TYPES.Bit)
  31. map.register(Date, TYPES.DateTime)
  32. map.register(Buffer, TYPES.VarBinary)
  33. map.register(Table, TYPES.TVP)
  34. /**
  35. * @ignore
  36. */
  37. const getTypeByValue = function (value) {
  38. if ((value === null) || (value === undefined)) { return TYPES.NVarChar }
  39. switch (typeof value) {
  40. case 'string':
  41. for (var item of Array.from(map)) {
  42. if (item.js === String) {
  43. return item.sql
  44. }
  45. }
  46. return TYPES.NVarChar
  47. case 'number':
  48. if (value % 1 === 0) {
  49. return TYPES.Int
  50. } else {
  51. return TYPES.Float
  52. }
  53. case 'boolean':
  54. for (item of Array.from(map)) {
  55. if (item.js === Boolean) {
  56. return item.sql
  57. }
  58. }
  59. return TYPES.Bit
  60. case 'object':
  61. for (item of Array.from(map)) {
  62. if (value instanceof item.js) {
  63. return item.sql
  64. }
  65. }
  66. return TYPES.NVarChar
  67. default:
  68. return TYPES.NVarChar
  69. }
  70. }
  71. module.exports = {
  72. driver,
  73. getTypeByValue,
  74. map
  75. }
  76. Object.defineProperty(module.exports, 'Promise', {
  77. get: () => {
  78. return PromiseLibrary
  79. },
  80. set: (value) => {
  81. PromiseLibrary = value
  82. }
  83. })