UNPKG

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