1 | 'use strict'
|
2 |
|
3 | const TYPES = require('./datatypes').TYPES
|
4 | const Table = require('./table')
|
5 |
|
6 | let PromiseLibrary = Promise
|
7 | const driver = {}
|
8 | const map = []
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | map.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 |
|
35 | map.register(String, TYPES.NVarChar)
|
36 | map.register(Number, TYPES.Int)
|
37 | map.register(Boolean, TYPES.Bit)
|
38 | map.register(Date, TYPES.DateTime)
|
39 | map.register(Buffer, TYPES.VarBinary)
|
40 | map.register(Table, TYPES.TVP)
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | const 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 |
|
89 | module.exports = {
|
90 | driver,
|
91 | getTypeByValue,
|
92 | map
|
93 | }
|
94 |
|
95 | Object.defineProperty(module.exports, 'Promise', {
|
96 | get: () => {
|
97 | return PromiseLibrary
|
98 | },
|
99 | set: (value) => {
|
100 | PromiseLibrary = value
|
101 | }
|
102 | })
|