| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 'use strict'
- const TYPES = require('./datatypes').TYPES
- const Table = require('./table')
- let PromiseLibrary = Promise
- const driver = {}
- const map = []
- /**
- * Register you own type map.
- *
- * @path module.exports.map
- * @param {*} jstype JS data type.
- * @param {*} sqltype SQL data type.
- */
- map.register = function (jstype, sqltype) {
- for (let index = 0; index < this.length; index++) {
- const item = this[index]
- if (item.js === jstype) {
- this.splice(index, 1)
- break
- }
- }
- this.push({
- js: jstype,
- sql: sqltype
- })
- return null
- }
- map.register(String, TYPES.NVarChar)
- map.register(Number, TYPES.Int)
- map.register(Boolean, TYPES.Bit)
- map.register(Date, TYPES.DateTime)
- map.register(Buffer, TYPES.VarBinary)
- map.register(Table, TYPES.TVP)
- /**
- * @ignore
- */
- const getTypeByValue = function (value) {
- if ((value === null) || (value === undefined)) { return TYPES.NVarChar }
- switch (typeof value) {
- case 'string':
- for (var item of Array.from(map)) {
- if (item.js === String) {
- return item.sql
- }
- }
- return TYPES.NVarChar
- case 'number':
- if (value % 1 === 0) {
- return TYPES.Int
- } else {
- return TYPES.Float
- }
- case 'boolean':
- for (item of Array.from(map)) {
- if (item.js === Boolean) {
- return item.sql
- }
- }
- return TYPES.Bit
- case 'object':
- for (item of Array.from(map)) {
- if (value instanceof item.js) {
- return item.sql
- }
- }
- return TYPES.NVarChar
- default:
- return TYPES.NVarChar
- }
- }
- module.exports = {
- driver,
- getTypeByValue,
- map
- }
- Object.defineProperty(module.exports, 'Promise', {
- get: () => {
- return PromiseLibrary
- },
- set: (value) => {
- PromiseLibrary = value
- }
- })
|