@bdkinc/knex-ibmi 0.0.21 → 0.0.22

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.
@@ -0,0 +1,7 @@
1
+ import Transaction from "knex/lib/execution/transaction";
2
+ declare class IBMiTransaction extends Transaction {
3
+ begin(connection: any): Promise<any>;
4
+ rollback(connection: any): Promise<any>;
5
+ commit(connection: any): Promise<any>;
6
+ }
7
+ export default IBMiTransaction;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const transaction_1 = require("knex/lib/execution/transaction");
5
+ class IBMiTransaction extends transaction_1.default {
6
+ async begin(connection) {
7
+ await connection.beginTransaction();
8
+ return connection;
9
+ }
10
+ async rollback(connection) {
11
+ await connection.rollback();
12
+ return connection;
13
+ }
14
+ async commit(connection) {
15
+ await connection.commit();
16
+ return connection;
17
+ }
18
+ }
19
+ exports.default = IBMiTransaction;
20
+ //# sourceMappingURL=ibmi-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmi-transaction.js","sourceRoot":"","sources":["../../src/execution/ibmi-transaction.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,gEAAyD;AAEzD,MAAM,eAAgB,SAAQ,qBAAW;IACvC,KAAK,CAAC,KAAK,CAAC,UAAU;QACpB,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAU;QACvB,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAU;QACrB,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { Connection } from "odbc";
2
+ import { knex, Knex } from "knex";
3
+ import * as odbc from "odbc";
4
+ import SchemaCompiler from "./schema/ibmi-compiler";
5
+ import TableCompiler from "./schema/ibmi-tablecompiler";
6
+ import ColumnCompiler from "./schema/ibmi-columncompiler";
7
+ import QueryCompiler from "./query/ibmi-querycompiler";
8
+ declare class DB2Client extends knex.Client {
9
+ constructor(config: any);
10
+ _driver(): typeof odbc;
11
+ printDebug(message: string): void;
12
+ acquireRawConnection(): Promise<any>;
13
+ destroyRawConnection(connection: Connection): Promise<void>;
14
+ _getConnectionString(connectionConfig: any): string;
15
+ _query(connection: any, obj: any): Promise<any>;
16
+ transaction(container: any, config: any, outerTx: any): Knex.Transaction;
17
+ schemaCompiler(): SchemaCompiler;
18
+ tableCompiler(): TableCompiler;
19
+ columnCompiler(): ColumnCompiler;
20
+ queryCompiler(): QueryCompiler;
21
+ processResponse(obj: any, runner: any): any;
22
+ }
23
+ interface DB2PoolConfig {
24
+ min: number;
25
+ max: number;
26
+ }
27
+ interface DB2ConnectionParams {
28
+ CMT?: number;
29
+ CONNTYPE?: number;
30
+ DBQ?: string;
31
+ MAXDECPREC?: 31 | 63;
32
+ MAXDECSCALE?: number;
33
+ MINDIVSCALE?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
34
+ NAM?: 0 | 1;
35
+ DFT?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
36
+ DSP?: 0 | 1 | 2 | 3 | 4;
37
+ DEC?: 0 | 1;
38
+ DECFLOATERROROPTION?: 0 | 1;
39
+ DECFLOATROUNDMODE?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
40
+ MAPDECIMALFLOATDESCRIBE?: 1 | 3;
41
+ }
42
+ interface DB2ConnectionConfig {
43
+ database: string;
44
+ host: string;
45
+ port: 50000 | number;
46
+ user: string;
47
+ password: string;
48
+ driver: "IBM i Access ODBC Driver" | string;
49
+ connectionStringParams?: DB2ConnectionParams;
50
+ pool?: DB2PoolConfig;
51
+ }
52
+ export interface DB2Config {
53
+ client: any;
54
+ connection: DB2ConnectionConfig;
55
+ pool?: DB2PoolConfig;
56
+ }
57
+ export declare const DB2Dialect: typeof DB2Client;
58
+ export default DB2Client;
package/dist/index.js ADDED
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DB2Dialect = void 0;
4
+ const process = require("process");
5
+ const knex_1 = require("knex");
6
+ const odbc = require("odbc");
7
+ const console = require("console");
8
+ const ibmi_compiler_1 = require("./schema/ibmi-compiler");
9
+ const ibmi_tablecompiler_1 = require("./schema/ibmi-tablecompiler");
10
+ const ibmi_columncompiler_1 = require("./schema/ibmi-columncompiler");
11
+ const ibmi_transaction_1 = require("./execution/ibmi-transaction");
12
+ const ibmi_querycompiler_1 = require("./query/ibmi-querycompiler");
13
+ class DB2Client extends knex_1.knex.Client {
14
+ constructor(config) {
15
+ super(config);
16
+ this.driverName = "odbc";
17
+ if (this.dialect && !this.config.client) {
18
+ // @ts-ignore
19
+ this.logger.warn(`Using 'this.dialect' to identify the client is deprecated and support for it will be removed in the future. Please use configuration option 'client' instead.`);
20
+ }
21
+ const dbClient = this.config.client || this.dialect;
22
+ if (!dbClient) {
23
+ throw new Error(`knex: Required configuration option 'client' is missing.`);
24
+ }
25
+ if (config.version) {
26
+ this.version = config.version;
27
+ }
28
+ if (this.driverName && config.connection) {
29
+ this.initializeDriver();
30
+ if (!config.pool || (config.pool && config.pool.max !== 0)) {
31
+ this.initializePool(config);
32
+ }
33
+ }
34
+ this.valueForUndefined = this.raw("DEFAULT");
35
+ if (config.useNullAsDefault) {
36
+ this.valueForUndefined = null;
37
+ }
38
+ }
39
+ _driver() {
40
+ return odbc;
41
+ }
42
+ printDebug(message) {
43
+ if (process.env.DEBUG === "true") {
44
+ // @ts-ignore
45
+ this.logger.debug(message);
46
+ }
47
+ }
48
+ // Get a raw connection, called by the pool manager whenever a new
49
+ // connection needs to be added to the pool.
50
+ async acquireRawConnection() {
51
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
52
+ this.printDebug("acquiring raw connection");
53
+ const connectionConfig = this.config.connection;
54
+ console.log(this._getConnectionString(connectionConfig));
55
+ // @ts-ignore
56
+ if ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.pool) {
57
+ const poolConfig = {
58
+ connectionString: this._getConnectionString(connectionConfig),
59
+ connectionTimeout:
60
+ // @ts-ignore
61
+ ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.connection) === null || _d === void 0 ? void 0 : _d.acquireConnectionTimeout) || 60000,
62
+ // @ts-ignore
63
+ initialSize: ((_g = (_f = (_e = this.config) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.pool) === null || _g === void 0 ? void 0 : _g.min) || 2,
64
+ // @ts-ignore
65
+ maxSize: ((_k = (_j = (_h = this.config) === null || _h === void 0 ? void 0 : _h.connection) === null || _j === void 0 ? void 0 : _j.pool) === null || _k === void 0 ? void 0 : _k.max) || 10,
66
+ reuseConnection: true,
67
+ };
68
+ const pool = await this.driver.pool(poolConfig);
69
+ return await pool.connect();
70
+ }
71
+ return await this.driver.connect(this._getConnectionString(connectionConfig));
72
+ }
73
+ // Used to explicitly close a connection, called internally by the pool manager
74
+ // when a connection times out or the pool is shutdown.
75
+ async destroyRawConnection(connection) {
76
+ console.log("destroy connection");
77
+ return await connection.close();
78
+ }
79
+ _getConnectionString(connectionConfig) {
80
+ const connectionStringParams = connectionConfig.connectionStringParams || {};
81
+ const connectionStringExtension = Object.keys(connectionStringParams).reduce((result, key) => {
82
+ const value = connectionStringParams[key];
83
+ return `${result}${key}=${value};`;
84
+ }, "");
85
+ return `${`DRIVER=${connectionConfig.driver};SYSTEM=${connectionConfig.host};HOSTNAME=${connectionConfig.host};` +
86
+ `PORT=${connectionConfig.port};DATABASE=${connectionConfig.database};` +
87
+ `UID=${connectionConfig.user};PWD=${connectionConfig.password};`}${connectionStringExtension}`;
88
+ }
89
+ // Runs the query on the specified connection, providing the bindings
90
+ // and any other necessary prep work.
91
+ async _query(connection, obj) {
92
+ if (!obj || typeof obj == "string")
93
+ obj = { sql: obj };
94
+ const method = (obj.hasOwnProperty("method") && obj.method !== "raw"
95
+ ? obj.method
96
+ : obj.sql.split(" ")[0]).toLowerCase();
97
+ obj.sqlMethod = method;
98
+ // Different functions are used since query() doesn't return # of rows affected,
99
+ // which is needed for queries that modify the database
100
+ if (method === "select" || method === "first" || method === "pluck") {
101
+ const rows = await connection.query(obj.sql, obj.bindings);
102
+ if (rows) {
103
+ obj.response = { rows, rowCount: rows.length };
104
+ }
105
+ }
106
+ else {
107
+ await connection.beginTransaction();
108
+ console.log("transaction begun");
109
+ try {
110
+ const statement = await connection.createStatement();
111
+ await statement.prepare(obj.sql);
112
+ if (obj.bindings) {
113
+ await statement.bind(obj.bindings);
114
+ }
115
+ const result = await statement.execute();
116
+ // this is hacky we check the SQL for the ID column
117
+ // most dialects return the ID of the inserted
118
+ // we check for the IDENTITY scalar function
119
+ // if that function is present, then we just return the value of the
120
+ // IDENTITY column
121
+ if (result.statement.includes("IDENTITY_VAL_LOCAL()")) {
122
+ obj.response = {
123
+ rows: result.map((row) => {
124
+ var _a;
125
+ return result.columns && ((_a = result.columns) === null || _a === void 0 ? void 0 : _a.length) > 0
126
+ ? row[result.columns[0].name]
127
+ : row;
128
+ }),
129
+ rowCount: result.count,
130
+ };
131
+ }
132
+ else if (method === "update") {
133
+ if (obj.selectReturning) {
134
+ const returningSelect = await connection.query(obj.selectReturning);
135
+ obj.response = {
136
+ rows: returningSelect,
137
+ rowCount: result.count,
138
+ };
139
+ }
140
+ else {
141
+ obj.response = {
142
+ rows: result,
143
+ rowCount: result.count,
144
+ };
145
+ }
146
+ }
147
+ else {
148
+ obj.response = { rows: result, rowCount: result.count };
149
+ }
150
+ }
151
+ catch (err) {
152
+ console.error(err);
153
+ await connection.rollback();
154
+ throw new Error(err);
155
+ }
156
+ finally {
157
+ console.log("transaction committed");
158
+ await connection.commit();
159
+ }
160
+ }
161
+ console.log({ obj });
162
+ return obj;
163
+ }
164
+ transaction(container, config, outerTx) {
165
+ // @ts-ignore
166
+ return new ibmi_transaction_1.default(this, ...arguments);
167
+ }
168
+ schemaCompiler() {
169
+ // @ts-ignore
170
+ return new ibmi_compiler_1.default(this, ...arguments);
171
+ }
172
+ tableCompiler() {
173
+ // @ts-ignore
174
+ return new ibmi_tablecompiler_1.default(this, ...arguments);
175
+ }
176
+ columnCompiler() {
177
+ // @ts-ignore
178
+ return new ibmi_columncompiler_1.default(this, ...arguments);
179
+ }
180
+ queryCompiler() {
181
+ // @ts-ignore
182
+ return new ibmi_querycompiler_1.default(this, ...arguments);
183
+ }
184
+ processResponse(obj, runner) {
185
+ if (obj === null)
186
+ return null;
187
+ const resp = obj.response;
188
+ const method = obj.sqlMethod;
189
+ const { rows, rowCount } = resp;
190
+ if (obj.output)
191
+ return obj.output.call(runner, resp);
192
+ switch (method) {
193
+ case "select":
194
+ return rows;
195
+ case "pluck":
196
+ return rows.map(obj.pluck);
197
+ case "first":
198
+ return rows[0];
199
+ case "insert":
200
+ return rows;
201
+ case "del":
202
+ case "delete":
203
+ case "update":
204
+ if (obj.selectReturning) {
205
+ return rows;
206
+ }
207
+ return rowCount;
208
+ case "counter":
209
+ return rowCount;
210
+ default:
211
+ return rows;
212
+ }
213
+ }
214
+ }
215
+ exports.DB2Dialect = DB2Client;
216
+ exports.default = DB2Client;
217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import QueryCompiler from "knex/lib/query/querycompiler";
2
+ declare class IBMiQueryCompiler extends QueryCompiler {
3
+ insert(): "" | {
4
+ sql: string;
5
+ returning: any;
6
+ };
7
+ _buildInsertData(insertValues: any, returningSql: any): string;
8
+ _prepInsert(data: any): any;
9
+ update(): {
10
+ sql: string;
11
+ returning: any;
12
+ selectReturning: string;
13
+ };
14
+ _returning(method: any, value: any, withTrigger: any): string | undefined;
15
+ columnizeWithPrefix(prefix: any, target: any): string;
16
+ }
17
+ export default IBMiQueryCompiler;
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const querycompiler_1 = require("knex/lib/query/querycompiler");
5
+ const isObject_1 = require("lodash/isObject");
6
+ const wrappingFormatter_1 = require("knex/lib/formatter/wrappingFormatter");
7
+ const date_fns_1 = require("date-fns");
8
+ const isEmpty_1 = require("lodash/isEmpty");
9
+ const console = require("console");
10
+ class IBMiQueryCompiler extends querycompiler_1.default {
11
+ insert() {
12
+ // @ts-ignore
13
+ const insertValues = this.single.insert || [];
14
+ // we need to return a value
15
+ // we need to wrap the insert statement in a select statement
16
+ // we use the "IDENTITY_VAL_LOCAL()" function to return the IDENTITY
17
+ // unless specified in a return
18
+ // @ts-ignore
19
+ let sql = `SELECT ${
20
+ // @ts-ignore
21
+ this.single.returning
22
+ ? // @ts-ignore
23
+ this.formatter.columnize(this.single.returning)
24
+ : "IDENTITY_VAL_LOCAL()"} FROM FINAL TABLE(`;
25
+ // @ts-ignore
26
+ sql += this.with() + `insert into ${this.tableName} `;
27
+ // @ts-ignore
28
+ const { returning } = this.single;
29
+ const returningSql = returning
30
+ ? // @ts-ignore
31
+ this._returning("insert", returning) + " "
32
+ : "";
33
+ if (Array.isArray(insertValues)) {
34
+ if (insertValues.length === 0) {
35
+ return "";
36
+ }
37
+ }
38
+ else if (typeof insertValues === "object" && (0, isEmpty_1.default)(insertValues)) {
39
+ return {
40
+ // @ts-ignore
41
+ sql: sql + returningSql + this._emptyInsertValue,
42
+ returning,
43
+ };
44
+ }
45
+ // @ts-ignore
46
+ sql += this._buildInsertData(insertValues, returningSql);
47
+ sql += ")";
48
+ return {
49
+ sql,
50
+ returning,
51
+ };
52
+ }
53
+ _buildInsertData(insertValues, returningSql) {
54
+ let sql = "";
55
+ const insertData = this._prepInsert(insertValues);
56
+ if (typeof insertData === "string") {
57
+ sql += insertData;
58
+ }
59
+ else {
60
+ if (insertData.columns.length) {
61
+ // @ts-ignore
62
+ sql += `(${this.formatter.columnize(insertData.columns)}`;
63
+ sql +=
64
+ `) ${returningSql}values (` +
65
+ // @ts-ignore
66
+ this._buildInsertValues(insertData) +
67
+ ")";
68
+ }
69
+ else if (insertValues.length === 1 && insertValues[0]) {
70
+ // @ts-ignore
71
+ sql += returningSql + this._emptyInsertValue;
72
+ }
73
+ else {
74
+ return "";
75
+ }
76
+ }
77
+ return sql;
78
+ }
79
+ _prepInsert(data) {
80
+ if ((0, isObject_1.default)(data)) {
81
+ if (data.hasOwnProperty("migration_time")) {
82
+ const parsed = new Date(data.migration_time);
83
+ data.migration_time = (0, date_fns_1.format)(parsed, "yyyy-MM-dd HH:mm:ss");
84
+ }
85
+ }
86
+ const isRaw = (0, wrappingFormatter_1.rawOrFn)(data, undefined,
87
+ // @ts-ignore
88
+ this.builder,
89
+ // @ts-ignore
90
+ this.client,
91
+ // @ts-ignore
92
+ this.bindingsHolder);
93
+ if (isRaw)
94
+ return isRaw;
95
+ let columns = [];
96
+ const values = [];
97
+ if (!Array.isArray(data))
98
+ data = data ? [data] : [];
99
+ let i = -1;
100
+ while (++i < data.length) {
101
+ if (data[i] == null)
102
+ break;
103
+ if (i === 0)
104
+ columns = Object.keys(data[i]).sort();
105
+ const row = new Array(columns.length);
106
+ const keys = Object.keys(data[i]);
107
+ let j = -1;
108
+ while (++j < keys.length) {
109
+ const key = keys[j];
110
+ let idx = columns.indexOf(key);
111
+ if (idx === -1) {
112
+ columns = columns.concat(key).sort();
113
+ idx = columns.indexOf(key);
114
+ let k = -1;
115
+ while (++k < values.length) {
116
+ values[k].splice(idx, 0, undefined);
117
+ }
118
+ row.splice(idx, 0, undefined);
119
+ }
120
+ row[idx] = data[i][key];
121
+ }
122
+ values.push(row);
123
+ }
124
+ return {
125
+ columns,
126
+ values,
127
+ };
128
+ }
129
+ update() {
130
+ // @ts-ignore
131
+ const withSQL = this.with();
132
+ // @ts-ignore
133
+ const updates = this._prepUpdate(this.single.update);
134
+ // @ts-ignore
135
+ const where = this.where();
136
+ // @ts-ignore
137
+ const order = this.order();
138
+ // @ts-ignore
139
+ const limit = this.limit();
140
+ // @ts-ignore
141
+ const { returning } = this.single;
142
+ // @ts-ignore
143
+ const values = Object.values(this.single.update)
144
+ .map((a) => `${a}`)
145
+ .join(", ");
146
+ // @ts-ignore
147
+ console.log({
148
+ returning,
149
+ // @ts-ignore
150
+ where,
151
+ // @ts-ignore
152
+ updates,
153
+ // @ts-ignore
154
+ single: this.single.update,
155
+ // @ts-ignore
156
+ grouped: this.grouped.where,
157
+ values,
158
+ });
159
+ // @ts-ignore
160
+ const moreWheres =
161
+ // @ts-ignore
162
+ this.grouped.where && this.grouped.where.length > 0
163
+ ? // @ts-ignore
164
+ this.grouped.where.map((w) => {
165
+ // @ts-ignore
166
+ if (this.single.update.hasOwnProperty(w.column))
167
+ return;
168
+ if (!w.value)
169
+ return;
170
+ return `"${w.column}" ${w.not ? "!" : ""}${w.operator} ${w.value}`;
171
+ })
172
+ : [];
173
+ let selectReturning = returning
174
+ ? `select ${returning.map((a) => `"${a}"`).join(", ")} from ${
175
+ // @ts-ignore
176
+ this.tableName
177
+ // @ts-ignore
178
+ } where ${Object.entries(this.single.update)
179
+ .map(([key, value]) => `"${key}" = '${value}'`)
180
+ .join(" and ")}${moreWheres.length > 0 && " and "}${moreWheres.join(" and ")}`
181
+ : "";
182
+ console.log({ selectReturning });
183
+ const sql = withSQL +
184
+ // @ts-ignore
185
+ `update ${this.single.only ? "only " : ""}${this.tableName}` +
186
+ " set " +
187
+ // @ts-ignore
188
+ updates.join(", ") +
189
+ (where ? ` ${where}` : "") +
190
+ (order ? ` ${order}` : "") +
191
+ (limit ? ` ${limit}` : "");
192
+ return { sql, returning, selectReturning };
193
+ }
194
+ _returning(method, value, withTrigger) {
195
+ // currently a placeholder in case I need to update return values
196
+ console.log("_returning", value);
197
+ switch (method) {
198
+ case "update":
199
+ case "insert":
200
+ return value
201
+ ? // @ts-ignore
202
+ `${withTrigger ? " into #out" : ""}`
203
+ : "";
204
+ case "del":
205
+ return value
206
+ ? // @ts-ignore
207
+ `${withTrigger ? " into #out" : ""}`
208
+ : "";
209
+ case "rowcount":
210
+ return value ? "select @@rowcount" : "";
211
+ }
212
+ }
213
+ columnizeWithPrefix(prefix, target) {
214
+ const columns = typeof target === "string" ? [target] : target;
215
+ let str = "", i = -1;
216
+ while (++i < columns.length) {
217
+ if (i > 0)
218
+ str += ", ";
219
+ // @ts-ignore
220
+ str += prefix + this.wrap(columns[i]);
221
+ }
222
+ return str;
223
+ }
224
+ }
225
+ exports.default = IBMiQueryCompiler;
226
+ //# sourceMappingURL=ibmi-querycompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmi-querycompiler.js","sourceRoot":"","sources":["../../src/query/ibmi-querycompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import ColumnCompiler from "knex/lib/schema/columncompiler";
2
+ declare class IBMiColumnCompiler extends ColumnCompiler {
3
+ increments(options?: {
4
+ primaryKey: boolean;
5
+ }): string;
6
+ }
7
+ export default IBMiColumnCompiler;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const columncompiler_1 = require("knex/lib/schema/columncompiler");
5
+ class IBMiColumnCompiler extends columncompiler_1.default {
6
+ increments(options = { primaryKey: true }) {
7
+ return ("int not null generated always as identity (start with 1, increment by 1)" +
8
+ // @ts-ignore
9
+ (this.tableCompiler._canBeAddPrimaryKey(options) ? " primary key" : ""));
10
+ }
11
+ }
12
+ exports.default = IBMiColumnCompiler;
13
+ //# sourceMappingURL=ibmi-columncompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmi-columncompiler.js","sourceRoot":"","sources":["../../src/schema/ibmi-columncompiler.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,mEAA4D;AAE5D,MAAM,kBAAmB,SAAQ,wBAAc;IAC7C,UAAU,CAAC,OAAO,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;QACvC,OAAO,CACL,0EAA0E;YAC1E,aAAa;YACb,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CACxE,CAAC;IACJ,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import SchemaCompiler from "knex/lib/schema/compiler";
2
+ declare class IBMiSchemaCompiler extends SchemaCompiler {
3
+ hasTable(tableName: any): void;
4
+ toSQL(): any;
5
+ }
6
+ export default IBMiSchemaCompiler;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const compiler_1 = require("knex/lib/schema/compiler");
5
+ class IBMiSchemaCompiler extends compiler_1.default {
6
+ hasTable(tableName) {
7
+ // @ts-ignore
8
+ const formattedTable = this.client.parameter(
9
+ // @ts-ignore
10
+ prefixedTableName(this.schema, tableName),
11
+ // @ts-ignore
12
+ this.builder,
13
+ // @ts-ignore
14
+ this.bindingsHolder);
15
+ const bindings = [tableName];
16
+ let sql = `SELECT TABLE_NAME FROM QSYS2.SYSTABLES ` +
17
+ `where TYPE = 'T' and TABLE_NAME = ${formattedTable}`;
18
+ // @ts-ignore
19
+ if (this.schema) {
20
+ sql += " and TABLE_SCHEMA = ?";
21
+ // @ts-ignore
22
+ bindings.push(this.schema);
23
+ }
24
+ // @ts-ignore
25
+ this.pushQuery({
26
+ sql,
27
+ bindings,
28
+ output: (resp) => {
29
+ return resp.rowCount > 0;
30
+ },
31
+ });
32
+ }
33
+ toSQL() {
34
+ // @ts-ignore
35
+ const sequence = this.builder._sequence;
36
+ for (let i = 0, l = sequence.length; i < l; i++) {
37
+ const query = sequence[i];
38
+ this[query.method].apply(this, query.args);
39
+ }
40
+ // @ts-ignore
41
+ return this.sequence;
42
+ }
43
+ }
44
+ function prefixedTableName(prefix, table) {
45
+ return prefix ? `${prefix}.${table}` : table;
46
+ }
47
+ exports.default = IBMiSchemaCompiler;
48
+ //# sourceMappingURL=ibmi-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmi-compiler.js","sourceRoot":"","sources":["../../src/schema/ibmi-compiler.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,uDAAsD;AAEtD,MAAM,kBAAmB,SAAQ,kBAAc;IAC7C,QAAQ,CAAC,SAAS;QAChB,aAAa;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QAC1C,aAAa;QACb,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACzC,aAAa;QACb,IAAI,CAAC,OAAO;QACZ,aAAa;QACb,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,GAAG,GACL,yCAAyC;YACzC,qCAAqC,cAAc,EAAE,CAAC;QACxD,aAAa;QACb,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,GAAG,IAAI,uBAAuB,CAAC;YAC/B,aAAa;YACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,aAAa;QACb,IAAI,CAAC,SAAS,CAAC;YACb,GAAG;YACH,QAAQ;YACR,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACf,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,aAAa;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5C;QACD,aAAa;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK;IACtC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/C,CAAC;AAED,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import TableCompiler from "knex/lib/schema/tablecompiler";
2
+ declare class IBMiTableCompiler extends TableCompiler {
3
+ createQuery(columns: any, ifNot: any, like: any): void;
4
+ dropUnique(columns: any, indexName: any): void;
5
+ unique(columns: any, indexName: any): void;
6
+ addColumns(columns: any, prefix: any): void;
7
+ commit(conn: any): Promise<any>;
8
+ }
9
+ export default IBMiTableCompiler;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const tablecompiler_1 = require("knex/lib/schema/tablecompiler");
5
+ const isObject_1 = require("lodash/isObject");
6
+ class IBMiTableCompiler extends tablecompiler_1.default {
7
+ createQuery(columns, ifNot, like) {
8
+ let createStatement = ifNot
9
+ // @ts-ignore
10
+ ? `if object_id('${this.tableName()}', 'U') is null `
11
+ : "";
12
+ if (like) {
13
+ // This query copy only columns and not all indexes and keys like other databases.
14
+ // @ts-ignore
15
+ createStatement += `SELECT * INTO ${this.tableName()} FROM ${this.tableNameLike()} WHERE 0=1`;
16
+ }
17
+ else {
18
+ createStatement +=
19
+ "CREATE TABLE " +
20
+ // @ts-ignore
21
+ this.tableName() +
22
+ // @ts-ignore
23
+ (this._formatting ? " (\n " : " (") +
24
+ // @ts-ignore
25
+ columns.sql.join(this._formatting ? ",\n " : ", ") +
26
+ // @ts-ignore
27
+ this._addChecks() +
28
+ ")";
29
+ }
30
+ // @ts-ignore
31
+ this.pushQuery(createStatement);
32
+ // @ts-ignore
33
+ if (this.single.comment) {
34
+ // @ts-ignore
35
+ this.comment(this.single.comment);
36
+ }
37
+ if (like) {
38
+ // @ts-ignore
39
+ this.addColumns(columns, this.addColumnsPrefix);
40
+ }
41
+ }
42
+ dropUnique(columns, indexName) {
43
+ indexName = indexName
44
+ // @ts-ignore
45
+ ? this.formatter.wrap(indexName)
46
+ // @ts-ignore
47
+ : this._indexCommand('unique', this.tableNameRaw, columns);
48
+ // @ts-ignore
49
+ this.pushQuery(`drop index ${indexName}`);
50
+ }
51
+ unique(columns, indexName) {
52
+ let deferrable;
53
+ let predicate;
54
+ if ((0, isObject_1.default)(indexName)) {
55
+ ({ indexName, deferrable, predicate } = indexName);
56
+ }
57
+ if (deferrable && deferrable !== 'not deferrable') {
58
+ // @ts-ignore
59
+ this.client.logger.warn(`IBMi: unique index \`${indexName}\` will not be deferrable ${deferrable}.`);
60
+ }
61
+ indexName = indexName
62
+ // @ts-ignore
63
+ ? this.formatter.wrap(indexName)
64
+ // @ts-ignore
65
+ : this._indexCommand('unique', this.tableNameRaw, columns);
66
+ // @ts-ignore
67
+ columns = this.formatter.columnize(columns);
68
+ const predicateQuery = predicate
69
+ // @ts-ignore
70
+ ? ' ' + this.client.queryCompiler(predicate).where()
71
+ : '';
72
+ // @ts-ignore
73
+ this.pushQuery(
74
+ // @ts-ignore
75
+ `create unique index ${indexName} on ${this.tableName()} (${columns})${predicateQuery}`);
76
+ }
77
+ // All of the columns to "add" for the query
78
+ addColumns(columns, prefix) {
79
+ // @ts-ignore
80
+ prefix = prefix || this.addColumnsPrefix;
81
+ if (columns.sql.length > 0) {
82
+ const columnSql = columns.sql.map((column) => {
83
+ return prefix + column;
84
+ });
85
+ // @ts-ignore
86
+ this.pushQuery({
87
+ sql:
88
+ // @ts-ignore
89
+ (this.lowerCase ? 'alter table ' : 'ALTER TABLE ') +
90
+ // @ts-ignore
91
+ this.tableName() +
92
+ ' ' +
93
+ columnSql.join(' '),
94
+ bindings: columns.bindings,
95
+ });
96
+ }
97
+ }
98
+ async commit(conn) {
99
+ return await conn.commit();
100
+ }
101
+ }
102
+ exports.default = IBMiTableCompiler;
103
+ //# sourceMappingURL=ibmi-tablecompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ibmi-tablecompiler.js","sourceRoot":"","sources":["../../src/schema/ibmi-tablecompiler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bdkinc/knex-ibmi",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "Knex dialect for IBMi",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",