@cubejs-backend/mssql-driver 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/MSSqlDriver.d.ts +96 -0
- package/dist/src/MSSqlDriver.d.ts.map +1 -0
- package/dist/src/MSSqlDriver.js +336 -0
- package/dist/src/MSSqlDriver.js.map +1 -0
- package/dist/src/QueryStream.d.ts +24 -0
- package/dist/src/QueryStream.d.ts.map +1 -0
- package/dist/src/QueryStream.js +59 -0
- package/dist/src/QueryStream.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +20 -0
- package/dist/src/index.js.map +1 -0
- package/index.js +11 -0
- package/package.json +22 -6
- package/CHANGELOG.md +0 -1752
- package/driver/MSSqlDriver.js +0 -340
- package/driver/QueryStream.js +0 -62
- package/driver/index.d.ts +0 -9
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Cube Dev, Inc.
|
|
3
|
+
* @license Apache-2.0
|
|
4
|
+
* @fileoverview The `MSSqlDriver` and related types declaration.
|
|
5
|
+
*/
|
|
6
|
+
import { config as MsSQLConfig } from 'mssql';
|
|
7
|
+
import { BaseDriver, DriverInterface, StreamOptions, DownloadQueryResultsOptions, TableStructure, DriverCapabilities, DownloadQueryResultsResult } from '@cubejs-backend/base-driver';
|
|
8
|
+
import { QueryStream } from './QueryStream';
|
|
9
|
+
export type MSSqlDriverConfiguration = Omit<MsSQLConfig, 'server'> & {
|
|
10
|
+
readOnly?: boolean;
|
|
11
|
+
server?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* MS SQL driver class.
|
|
15
|
+
*/
|
|
16
|
+
export declare class MSSqlDriver extends BaseDriver implements DriverInterface {
|
|
17
|
+
private readonly connectionPool;
|
|
18
|
+
private readonly initialConnectPromise;
|
|
19
|
+
private readonly config;
|
|
20
|
+
/**
|
|
21
|
+
* Returns default concurrency value.
|
|
22
|
+
*/
|
|
23
|
+
static getDefaultConcurrency(): number;
|
|
24
|
+
/**
|
|
25
|
+
* Class constructor.
|
|
26
|
+
*/
|
|
27
|
+
constructor(config?: MSSqlDriverConfiguration & {
|
|
28
|
+
/**
|
|
29
|
+
* Data source name.
|
|
30
|
+
*/
|
|
31
|
+
dataSource?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Max pool size value for the [cube]<-->[db] pool.
|
|
34
|
+
*/
|
|
35
|
+
maxPoolSize?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Time to wait for a response from a connection after validation
|
|
38
|
+
* request before determining it as not valid. Default - 10000 ms.
|
|
39
|
+
*/
|
|
40
|
+
testConnectionTimeout?: number;
|
|
41
|
+
server?: string;
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Returns the configurable driver options
|
|
45
|
+
* Note: It returns the unprefixed option names.
|
|
46
|
+
* In case of using multi sources options need to be prefixed manually.
|
|
47
|
+
*/
|
|
48
|
+
static driverEnvVariables(): string[];
|
|
49
|
+
testConnection(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Executes query in streaming mode.
|
|
52
|
+
*
|
|
53
|
+
* @param {string} query
|
|
54
|
+
* @param {Array} values
|
|
55
|
+
* @param {{ highWaterMark: number? }} options
|
|
56
|
+
* @return {Promise<StreamTableDataWithTypes>}
|
|
57
|
+
*/
|
|
58
|
+
stream(query: string, values: unknown[], { highWaterMark }: StreamOptions): Promise<{
|
|
59
|
+
rowStream: QueryStream;
|
|
60
|
+
types: TableStructure;
|
|
61
|
+
release: () => Promise<void>;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* @param {{
|
|
65
|
+
* [name: string]: {
|
|
66
|
+
* index: number,
|
|
67
|
+
* name: string,
|
|
68
|
+
* type: *,
|
|
69
|
+
* nullable: boolean,
|
|
70
|
+
* caseSensitive: boolean,
|
|
71
|
+
* identity: boolean,
|
|
72
|
+
* readOnly: boolean,
|
|
73
|
+
* length: number?,
|
|
74
|
+
* scale: number?,
|
|
75
|
+
* precision: number?
|
|
76
|
+
* }
|
|
77
|
+
* }} fields
|
|
78
|
+
*/
|
|
79
|
+
private mapFields;
|
|
80
|
+
query(query: string, values: unknown[]): Promise<any>;
|
|
81
|
+
param(paramIndex: number): string;
|
|
82
|
+
tableColumnTypes(table: string): Promise<TableStructure>;
|
|
83
|
+
getTablesQuery(schemaName: string): Promise<any>;
|
|
84
|
+
createSchemaIfNotExists(schemaName: string): Promise<void>;
|
|
85
|
+
informationSchemaQuery(): string;
|
|
86
|
+
downloadQueryResults(query: string, values: unknown[], options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult>;
|
|
87
|
+
protected fromGenericType(columnType: string): string;
|
|
88
|
+
protected toGenericType(columnType: string): string;
|
|
89
|
+
readOnly(): boolean;
|
|
90
|
+
wrapQueryWithLimit(query: {
|
|
91
|
+
query: string;
|
|
92
|
+
limit: number;
|
|
93
|
+
}): void;
|
|
94
|
+
capabilities(): DriverCapabilities;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=MSSqlDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MSSqlDriver.d.ts","sourceRoot":"","sources":["../../src/MSSqlDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAY,EAAkB,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAKnE,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,2BAA2B,EAC3B,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoB5C,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAgBF;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAW,YAAW,eAAe;IACpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0B;IAEhE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAElD;;OAEG;WACW,qBAAqB;IAInC;;OAEG;gBACgB,MAAM,GAAE,wBAAwB,GAAG;QAClD;;WAEG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;QAEpB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;;WAGG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ;IAyCR;;;;OAIG;WACW,kBAAkB;IAWnB,cAAc;IAK3B;;;;;;;OAOG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,aAAa;;;;;IA+BtF;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,SAAS;IAsEJ,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAe5C,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI3B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB9D,cAAc,CAAC,UAAU,EAAE,MAAM;IAO3B,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE,sBAAsB,IAAI,MAAM;IAY1B,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAiB9I,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIrD,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5C,QAAQ,IAAI,OAAO;IAInB,kBAAkB,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;IAIzD,YAAY,IAAI,kBAAkB;CAK1C"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @copyright Cube Dev, Inc.
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
* @fileoverview The `MSSqlDriver` and related types declaration.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
24
|
+
if (mod && mod.__esModule) return mod;
|
|
25
|
+
var result = {};
|
|
26
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
27
|
+
__setModuleDefault(result, mod);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.MSSqlDriver = void 0;
|
|
32
|
+
const mssql_1 = __importStar(require("mssql"));
|
|
33
|
+
const shared_1 = require("@cubejs-backend/shared");
|
|
34
|
+
const base_driver_1 = require("@cubejs-backend/base-driver");
|
|
35
|
+
const QueryStream_1 = require("./QueryStream");
|
|
36
|
+
// ********* Value converters ***************** //
|
|
37
|
+
const numericTypes = [
|
|
38
|
+
mssql_1.default.TYPES.Int,
|
|
39
|
+
mssql_1.default.TYPES.BigInt,
|
|
40
|
+
mssql_1.default.TYPES.SmallInt,
|
|
41
|
+
mssql_1.default.TYPES.TinyInt,
|
|
42
|
+
mssql_1.default.TYPES.Decimal,
|
|
43
|
+
mssql_1.default.TYPES.Numeric,
|
|
44
|
+
mssql_1.default.TYPES.Float,
|
|
45
|
+
mssql_1.default.TYPES.Real,
|
|
46
|
+
mssql_1.default.TYPES.Money,
|
|
47
|
+
mssql_1.default.TYPES.SmallMoney
|
|
48
|
+
];
|
|
49
|
+
for (const type of numericTypes) {
|
|
50
|
+
mssql_1.default.valueHandler.set(type, (value) => (value != null ? String(value) : value));
|
|
51
|
+
}
|
|
52
|
+
const GenericTypeToMSSql = {
|
|
53
|
+
boolean: 'bit',
|
|
54
|
+
string: 'nvarchar(max)',
|
|
55
|
+
text: 'nvarchar(max)',
|
|
56
|
+
timestamp: 'datetime2',
|
|
57
|
+
uuid: 'uniqueidentifier'
|
|
58
|
+
};
|
|
59
|
+
const MSSqlToGenericType = {
|
|
60
|
+
bit: 'boolean',
|
|
61
|
+
uniqueidentifier: 'uuid',
|
|
62
|
+
datetime2: 'timestamp'
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* MS SQL driver class.
|
|
66
|
+
*/
|
|
67
|
+
class MSSqlDriver extends base_driver_1.BaseDriver {
|
|
68
|
+
connectionPool;
|
|
69
|
+
initialConnectPromise;
|
|
70
|
+
config;
|
|
71
|
+
/**
|
|
72
|
+
* Returns default concurrency value.
|
|
73
|
+
*/
|
|
74
|
+
static getDefaultConcurrency() {
|
|
75
|
+
return 2;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Class constructor.
|
|
79
|
+
*/
|
|
80
|
+
constructor(config = {}) {
|
|
81
|
+
super({
|
|
82
|
+
testConnectionTimeout: config.testConnectionTimeout,
|
|
83
|
+
});
|
|
84
|
+
const dataSource = config.dataSource ||
|
|
85
|
+
(0, shared_1.assertDataSource)('default');
|
|
86
|
+
/**
|
|
87
|
+
* @type {import('mssql').config}
|
|
88
|
+
*/
|
|
89
|
+
this.config = {
|
|
90
|
+
readOnly: true,
|
|
91
|
+
server: (0, shared_1.getEnv)('dbHost', { dataSource }),
|
|
92
|
+
database: (0, shared_1.getEnv)('dbName', { dataSource }),
|
|
93
|
+
port: (0, shared_1.getEnv)('dbPort', { dataSource }),
|
|
94
|
+
user: (0, shared_1.getEnv)('dbUser', { dataSource }),
|
|
95
|
+
password: (0, shared_1.getEnv)('dbPass', { dataSource }),
|
|
96
|
+
domain: (0, shared_1.getEnv)('dbDomain', { dataSource }),
|
|
97
|
+
requestTimeout: (0, shared_1.getEnv)('dbQueryTimeout') * 1000,
|
|
98
|
+
options: {
|
|
99
|
+
encrypt: (0, shared_1.getEnv)('dbSsl', { dataSource }),
|
|
100
|
+
useUTC: false
|
|
101
|
+
},
|
|
102
|
+
pool: {
|
|
103
|
+
max: config.maxPoolSize ||
|
|
104
|
+
(0, shared_1.getEnv)('dbMaxPoolSize', { dataSource }) ||
|
|
105
|
+
8,
|
|
106
|
+
min: 0,
|
|
107
|
+
idleTimeoutMillis: 30 * 1000,
|
|
108
|
+
acquireTimeoutMillis: 20 * 1000
|
|
109
|
+
},
|
|
110
|
+
...config
|
|
111
|
+
};
|
|
112
|
+
const { readOnly, ...poolConfig } = this.config;
|
|
113
|
+
this.connectionPool = new mssql_1.ConnectionPool(poolConfig);
|
|
114
|
+
this.initialConnectPromise = this.connectionPool.connect();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Returns the configurable driver options
|
|
118
|
+
* Note: It returns the unprefixed option names.
|
|
119
|
+
* In case of using multi sources options need to be prefixed manually.
|
|
120
|
+
*/
|
|
121
|
+
static driverEnvVariables() {
|
|
122
|
+
return [
|
|
123
|
+
'CUBEJS_DB_HOST',
|
|
124
|
+
'CUBEJS_DB_NAME',
|
|
125
|
+
'CUBEJS_DB_PORT',
|
|
126
|
+
'CUBEJS_DB_USER',
|
|
127
|
+
'CUBEJS_DB_PASS',
|
|
128
|
+
'CUBEJS_DB_DOMAIN',
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
async testConnection() {
|
|
132
|
+
const conn = await this.initialConnectPromise.then((pool) => pool.request());
|
|
133
|
+
await conn.query('SELECT 1 as number');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Executes query in streaming mode.
|
|
137
|
+
*
|
|
138
|
+
* @param {string} query
|
|
139
|
+
* @param {Array} values
|
|
140
|
+
* @param {{ highWaterMark: number? }} options
|
|
141
|
+
* @return {Promise<StreamTableDataWithTypes>}
|
|
142
|
+
*/
|
|
143
|
+
async stream(query, values, { highWaterMark }) {
|
|
144
|
+
const pool = await this.initialConnectPromise;
|
|
145
|
+
const request = pool.request();
|
|
146
|
+
request.stream = true;
|
|
147
|
+
(values || []).forEach((v, i) => {
|
|
148
|
+
request.input(`_${i + 1}`, v);
|
|
149
|
+
});
|
|
150
|
+
request.query(query);
|
|
151
|
+
const stream = new QueryStream_1.QueryStream(request, highWaterMark);
|
|
152
|
+
const fields = await new Promise((resolve, reject) => {
|
|
153
|
+
request.on('recordset', (columns) => {
|
|
154
|
+
resolve(this.mapFields(columns));
|
|
155
|
+
});
|
|
156
|
+
request.on('error', (err) => {
|
|
157
|
+
reject(err);
|
|
158
|
+
});
|
|
159
|
+
stream.on('error', (err) => {
|
|
160
|
+
reject(err);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
rowStream: stream,
|
|
165
|
+
types: fields,
|
|
166
|
+
release: async () => {
|
|
167
|
+
request.cancel();
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* @param {{
|
|
173
|
+
* [name: string]: {
|
|
174
|
+
* index: number,
|
|
175
|
+
* name: string,
|
|
176
|
+
* type: *,
|
|
177
|
+
* nullable: boolean,
|
|
178
|
+
* caseSensitive: boolean,
|
|
179
|
+
* identity: boolean,
|
|
180
|
+
* readOnly: boolean,
|
|
181
|
+
* length: number?,
|
|
182
|
+
* scale: number?,
|
|
183
|
+
* precision: number?
|
|
184
|
+
* }
|
|
185
|
+
* }} fields
|
|
186
|
+
*/
|
|
187
|
+
mapFields(fields) {
|
|
188
|
+
return Object.keys(fields).map((field) => {
|
|
189
|
+
let type;
|
|
190
|
+
switch (fields[field].type) {
|
|
191
|
+
case mssql_1.default.Bit:
|
|
192
|
+
type = 'boolean';
|
|
193
|
+
break;
|
|
194
|
+
// integers
|
|
195
|
+
case mssql_1.default.Int:
|
|
196
|
+
case mssql_1.default.SmallInt:
|
|
197
|
+
case mssql_1.default.TinyInt:
|
|
198
|
+
case mssql_1.default.BigInt:
|
|
199
|
+
type = 'int';
|
|
200
|
+
break;
|
|
201
|
+
// float
|
|
202
|
+
case mssql_1.default.Money:
|
|
203
|
+
case mssql_1.default.SmallMoney:
|
|
204
|
+
case mssql_1.default.Numeric:
|
|
205
|
+
case mssql_1.default.Decimal:
|
|
206
|
+
type = 'decimal';
|
|
207
|
+
break;
|
|
208
|
+
// double
|
|
209
|
+
case mssql_1.default.Real:
|
|
210
|
+
case mssql_1.default.Float:
|
|
211
|
+
type = 'double';
|
|
212
|
+
break;
|
|
213
|
+
// strings
|
|
214
|
+
case mssql_1.default.Char:
|
|
215
|
+
case mssql_1.default.NChar:
|
|
216
|
+
case mssql_1.default.Text:
|
|
217
|
+
case mssql_1.default.NText:
|
|
218
|
+
case mssql_1.default.VarChar:
|
|
219
|
+
case mssql_1.default.NVarChar:
|
|
220
|
+
case mssql_1.default.Xml:
|
|
221
|
+
type = 'text';
|
|
222
|
+
break;
|
|
223
|
+
// date and time
|
|
224
|
+
case mssql_1.default.Time:
|
|
225
|
+
type = 'time';
|
|
226
|
+
break;
|
|
227
|
+
case mssql_1.default.Date:
|
|
228
|
+
type = 'timestamp';
|
|
229
|
+
break;
|
|
230
|
+
case mssql_1.default.DateTime:
|
|
231
|
+
case mssql_1.default.DateTime2:
|
|
232
|
+
case mssql_1.default.SmallDateTime:
|
|
233
|
+
case mssql_1.default.DateTimeOffset:
|
|
234
|
+
type = 'timestamp';
|
|
235
|
+
break;
|
|
236
|
+
// others
|
|
237
|
+
case mssql_1.default.UniqueIdentifier:
|
|
238
|
+
case mssql_1.default.Variant:
|
|
239
|
+
case mssql_1.default.Binary:
|
|
240
|
+
case mssql_1.default.VarBinary:
|
|
241
|
+
case mssql_1.default.Image:
|
|
242
|
+
case mssql_1.default.UDT:
|
|
243
|
+
case mssql_1.default.Geography:
|
|
244
|
+
case mssql_1.default.Geometry:
|
|
245
|
+
case mssql_1.default.TVP:
|
|
246
|
+
type = 'string';
|
|
247
|
+
break;
|
|
248
|
+
// unknown
|
|
249
|
+
default:
|
|
250
|
+
type = 'string';
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
return { name: fields[field].name, type: this.toGenericType(type) };
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
async query(query, values) {
|
|
257
|
+
let cancelFn = null;
|
|
258
|
+
const promise = this.initialConnectPromise.then((pool) => {
|
|
259
|
+
const request = pool.request();
|
|
260
|
+
(values || []).forEach((v, i) => request.input(`_${i + 1}`, v));
|
|
261
|
+
// TODO time zone UTC set in driver ?
|
|
262
|
+
cancelFn = () => request.cancel();
|
|
263
|
+
return request.query(query).then(res => res.recordset);
|
|
264
|
+
});
|
|
265
|
+
promise.cancel = () => cancelFn && cancelFn();
|
|
266
|
+
return promise;
|
|
267
|
+
}
|
|
268
|
+
param(paramIndex) {
|
|
269
|
+
return `@_${paramIndex + 1}`;
|
|
270
|
+
}
|
|
271
|
+
async tableColumnTypes(table) {
|
|
272
|
+
const [schema, name] = table.split('.');
|
|
273
|
+
const columns = await this.query(`SELECT column_name as ${this.quoteIdentifier('column_name')},
|
|
274
|
+
table_name as ${this.quoteIdentifier('table_name')},
|
|
275
|
+
table_schema as ${this.quoteIdentifier('table_schema')},
|
|
276
|
+
data_type as ${this.quoteIdentifier('data_type')}
|
|
277
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
278
|
+
WHERE table_name = ${this.param(0)} AND table_schema = ${this.param(1)}`, [name, schema]);
|
|
279
|
+
return columns.map(c => ({ name: c.column_name, type: this.toGenericType(c.data_type) }));
|
|
280
|
+
}
|
|
281
|
+
getTablesQuery(schemaName) {
|
|
282
|
+
return this.query(`SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = ${this.param(0)}`, [schemaName]);
|
|
283
|
+
}
|
|
284
|
+
async createSchemaIfNotExists(schemaName) {
|
|
285
|
+
return this.query(`SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name = ${this.param(0)}`, [schemaName]).then((schemas) => {
|
|
286
|
+
if (schemas.length === 0) {
|
|
287
|
+
return this.query(`CREATE SCHEMA ${schemaName}`, []);
|
|
288
|
+
}
|
|
289
|
+
return null;
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
informationSchemaQuery() {
|
|
293
|
+
// fix The multipart identifier "columns.data_type" could not be bound
|
|
294
|
+
return `
|
|
295
|
+
SELECT column_name as ${this.quoteIdentifier('column_name')},
|
|
296
|
+
table_name as ${this.quoteIdentifier('table_name')},
|
|
297
|
+
table_schema as ${this.quoteIdentifier('table_schema')},
|
|
298
|
+
data_type as ${this.quoteIdentifier('data_type')}
|
|
299
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
300
|
+
WHERE table_schema NOT IN ('information_schema', 'sys')
|
|
301
|
+
`;
|
|
302
|
+
}
|
|
303
|
+
async downloadQueryResults(query, values, options) {
|
|
304
|
+
if (options?.streamImport) {
|
|
305
|
+
return this.stream(query, values, options);
|
|
306
|
+
}
|
|
307
|
+
const result = await this.query(query, values);
|
|
308
|
+
const types = Object.keys(result.columns).map((key) => ({
|
|
309
|
+
name: result.columns[key].name,
|
|
310
|
+
type: this.toGenericType(result.columns[key].type.declaration),
|
|
311
|
+
}));
|
|
312
|
+
return {
|
|
313
|
+
rows: result,
|
|
314
|
+
types,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
fromGenericType(columnType) {
|
|
318
|
+
return GenericTypeToMSSql[columnType] || super.fromGenericType(columnType);
|
|
319
|
+
}
|
|
320
|
+
toGenericType(columnType) {
|
|
321
|
+
return MSSqlToGenericType[columnType] || super.toGenericType(columnType);
|
|
322
|
+
}
|
|
323
|
+
readOnly() {
|
|
324
|
+
return !!this.config.readOnly;
|
|
325
|
+
}
|
|
326
|
+
wrapQueryWithLimit(query) {
|
|
327
|
+
query.query = `SELECT TOP ${query.limit} * FROM (${query.query}) AS t`;
|
|
328
|
+
}
|
|
329
|
+
capabilities() {
|
|
330
|
+
return {
|
|
331
|
+
incrementalSchemaLoading: true,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
exports.MSSqlDriver = MSSqlDriver;
|
|
336
|
+
//# sourceMappingURL=MSSqlDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MSSqlDriver.js","sourceRoot":"","sources":["../../src/MSSqlDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
import sql from 'mssql';
|
|
4
|
+
/**
|
|
5
|
+
* MS-SQL query stream class.
|
|
6
|
+
*/
|
|
7
|
+
export declare class QueryStream extends Readable {
|
|
8
|
+
private request;
|
|
9
|
+
private toRead;
|
|
10
|
+
/**
|
|
11
|
+
* @constructor
|
|
12
|
+
*/
|
|
13
|
+
constructor(request: sql.Request, highWaterMark: number);
|
|
14
|
+
/**
|
|
15
|
+
* @override
|
|
16
|
+
*/
|
|
17
|
+
_read(toRead: number): void;
|
|
18
|
+
private transformRow;
|
|
19
|
+
/**
|
|
20
|
+
* @override
|
|
21
|
+
*/
|
|
22
|
+
_destroy(error: any, callback: CallableFunction): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=QueryStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStream.d.ts","sourceRoot":"","sources":["../../src/QueryStream.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,GAAG,MAAM,OAAO,CAAC;AAKxB;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;IACvC,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,MAAM,CAAa;IAE3B;;OAEG;gBACgB,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM;IAsB9D;;OAEG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM;IAK3B,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB;CAKvD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryStream = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
5
|
+
const shared_1 = require("@cubejs-backend/shared");
|
|
6
|
+
/**
|
|
7
|
+
* MS-SQL query stream class.
|
|
8
|
+
*/
|
|
9
|
+
class QueryStream extends stream_1.Readable {
|
|
10
|
+
request;
|
|
11
|
+
toRead = 0;
|
|
12
|
+
/**
|
|
13
|
+
* @constructor
|
|
14
|
+
*/
|
|
15
|
+
constructor(request, highWaterMark) {
|
|
16
|
+
super({
|
|
17
|
+
objectMode: true,
|
|
18
|
+
highWaterMark: highWaterMark || (0, shared_1.getEnv)('dbQueryStreamHighWaterMark'),
|
|
19
|
+
});
|
|
20
|
+
this.request = request;
|
|
21
|
+
this.request.on('row', row => {
|
|
22
|
+
this.transformRow(row);
|
|
23
|
+
const canAdd = this.push(row);
|
|
24
|
+
if (this.toRead-- <= 0 || !canAdd) {
|
|
25
|
+
this.request?.pause();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
this.request.on('done', () => {
|
|
29
|
+
this.push(null);
|
|
30
|
+
});
|
|
31
|
+
this.request.on('error', (err) => {
|
|
32
|
+
this.destroy(err);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @override
|
|
37
|
+
*/
|
|
38
|
+
_read(toRead) {
|
|
39
|
+
this.toRead += toRead;
|
|
40
|
+
this.request?.resume();
|
|
41
|
+
}
|
|
42
|
+
transformRow(row) {
|
|
43
|
+
for (const [key, value] of Object.entries(row)) {
|
|
44
|
+
if (value instanceof Date) {
|
|
45
|
+
row[key] = value.toJSON();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @override
|
|
51
|
+
*/
|
|
52
|
+
_destroy(error, callback) {
|
|
53
|
+
this.request?.cancel();
|
|
54
|
+
this.request = null;
|
|
55
|
+
callback(error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.QueryStream = QueryStream;
|
|
59
|
+
//# sourceMappingURL=QueryStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryStream.js","sourceRoot":"","sources":["../../src/QueryStream.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAElC,mDAEgC;AAEhC;;GAEG;AACH,MAAa,WAAY,SAAQ,iBAAQ;IAC/B,OAAO,CAAqB;IAE5B,MAAM,GAAW,CAAC,CAAC;IAE3B;;OAEG;IACH,YAAmB,OAAoB,EAAE,aAAqB;QAC5D,KAAK,CAAC;YACJ,UAAU,EAAE,IAAI;YAChB,aAAa,EACX,aAAa,IAAI,IAAA,eAAM,EAAC,4BAA4B,CAAC;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAc;QACzB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,GAAwB;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9C,IAAI,KAAK,YAAY,IAAI,EAAE;gBACzB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;aAC3B;SACF;IACH,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,KAAU,EAAE,QAA0B;QACpD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;CACF;AAtDD,kCAsDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,cAAc,eAAe,CAAC;AAE9B,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
const MSSqlDriver_1 = require("./MSSqlDriver");
|
|
18
|
+
__exportStar(require("./MSSqlDriver"), exports);
|
|
19
|
+
exports.default = MSSqlDriver_1.MSSqlDriver;
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4C;AAE5C,gDAA8B;AAE9B,kBAAe,yBAAW,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const fromExports = require('./dist/src');
|
|
2
|
+
const { MSSqlDriver } = require('./dist/src/MSSqlDriver');
|
|
3
|
+
|
|
4
|
+
const toExport = MSSqlDriver;
|
|
5
|
+
|
|
6
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
7
|
+
for (const [key, module] of Object.entries(fromExports)) {
|
|
8
|
+
toExport[key] = module;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
module.exports = toExport;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@cubejs-backend/mssql-driver",
|
|
3
3
|
"description": "Cube.js MS SQL database driver",
|
|
4
4
|
"author": "Cube Dev, Inc.",
|
|
5
|
-
"version": "1.3.
|
|
5
|
+
"version": "1.3.6",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/cube-js/cube.git",
|
|
@@ -11,21 +11,37 @@
|
|
|
11
11
|
"engines": {
|
|
12
12
|
"node": "^14.0.0 || ^16.0.0 || >=17.0.0"
|
|
13
13
|
},
|
|
14
|
-
"
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/src",
|
|
16
|
+
"index.js"
|
|
17
|
+
],
|
|
18
|
+
"main": "index.js",
|
|
19
|
+
"typings": "dist/src/index.d.ts",
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "rm -rf dist && npm run tsc",
|
|
22
|
+
"tsc": "tsc",
|
|
23
|
+
"watch": "tsc -w",
|
|
24
|
+
"lint": "eslint src/* --ext .ts,.js",
|
|
25
|
+
"lint:fix": "eslint --fix src/* --ext .ts,.js"
|
|
26
|
+
},
|
|
15
27
|
"dependencies": {
|
|
16
|
-
"@cubejs-backend/base-driver": "1.3.
|
|
17
|
-
"
|
|
28
|
+
"@cubejs-backend/base-driver": "1.3.6",
|
|
29
|
+
"@cubejs-backend/shared": "1.3.6",
|
|
30
|
+
"mssql": "^11.0.1"
|
|
18
31
|
},
|
|
19
32
|
"devDependencies": {
|
|
20
|
-
"@types/mssql": "^9.1.
|
|
33
|
+
"@types/mssql": "^9.1.7",
|
|
21
34
|
"@types/node": "^20"
|
|
22
35
|
},
|
|
23
36
|
"jest": {
|
|
24
37
|
"testEnvironment": "node"
|
|
25
38
|
},
|
|
39
|
+
"eslintConfig": {
|
|
40
|
+
"extends": "../cubejs-linter"
|
|
41
|
+
},
|
|
26
42
|
"license": "Apache-2.0",
|
|
27
43
|
"publishConfig": {
|
|
28
44
|
"access": "public"
|
|
29
45
|
},
|
|
30
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "1701f21fd2bce4d6c70b05992cc64d4b4ab596db"
|
|
31
47
|
}
|