2016-03-02 17:07:05 +01:00
|
|
|
// Oracle Client
|
|
|
|
// -------
|
2020-10-05 23:59:12 +03:00
|
|
|
const { inherits } = require('util');
|
2019-06-04 00:37:17 +02:00
|
|
|
const Client = require('../../client');
|
|
|
|
|
|
|
|
const SchemaCompiler = require('./schema/compiler');
|
|
|
|
const ColumnBuilder = require('./schema/columnbuilder');
|
|
|
|
const ColumnCompiler = require('./schema/columncompiler');
|
|
|
|
const TableCompiler = require('./schema/tablecompiler');
|
2020-03-02 18:18:45 -05:00
|
|
|
const { isConnectionError } = require('./utils');
|
2016-03-02 17:07:05 +01:00
|
|
|
|
|
|
|
// Always initialize with the "QueryBuilder" and "QueryCompiler"
|
|
|
|
// objects, which extend the base 'lib/query/builder' and
|
|
|
|
// 'lib/query/compiler', respectively.
|
2019-06-04 00:37:17 +02:00
|
|
|
function Client_Oracle(config) {
|
2018-07-09 08:10:34 -04:00
|
|
|
Client.call(this, config);
|
2016-03-02 17:07:05 +01:00
|
|
|
}
|
2019-06-04 00:37:17 +02:00
|
|
|
|
2018-07-09 08:10:34 -04:00
|
|
|
inherits(Client_Oracle, Client);
|
2016-03-02 17:07:05 +01:00
|
|
|
|
2019-07-10 22:38:20 +02:00
|
|
|
Object.assign(Client_Oracle.prototype, {
|
2016-03-02 17:07:05 +01:00
|
|
|
dialect: 'oracle',
|
|
|
|
|
|
|
|
driverName: 'oracle',
|
|
|
|
|
2016-09-13 08:15:58 -04:00
|
|
|
schemaCompiler() {
|
2018-07-09 08:10:34 -04:00
|
|
|
return new SchemaCompiler(this, ...arguments);
|
2016-09-13 08:15:58 -04:00
|
|
|
},
|
2016-03-02 17:07:05 +01:00
|
|
|
|
2016-09-13 08:15:58 -04:00
|
|
|
columnBuilder() {
|
2018-07-09 08:10:34 -04:00
|
|
|
return new ColumnBuilder(this, ...arguments);
|
2016-09-13 08:15:58 -04:00
|
|
|
},
|
2016-03-02 17:07:05 +01:00
|
|
|
|
2016-09-13 08:15:58 -04:00
|
|
|
columnCompiler() {
|
2018-07-09 08:10:34 -04:00
|
|
|
return new ColumnCompiler(this, ...arguments);
|
2016-09-13 08:15:58 -04:00
|
|
|
},
|
2016-03-02 17:07:05 +01:00
|
|
|
|
2016-09-13 08:15:58 -04:00
|
|
|
tableCompiler() {
|
2018-07-09 08:10:34 -04:00
|
|
|
return new TableCompiler(this, ...arguments);
|
2016-09-13 08:15:58 -04:00
|
|
|
},
|
2016-03-02 17:07:05 +01:00
|
|
|
|
|
|
|
// Return the database for the Oracle client.
|
2016-05-17 01:01:34 +10:00
|
|
|
database() {
|
2018-07-09 08:10:34 -04:00
|
|
|
return this.connectionSettings.database;
|
2016-03-02 17:07:05 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// Position the bindings for the query.
|
2016-05-17 01:01:34 +10:00
|
|
|
positionBindings(sql) {
|
2018-07-09 08:10:34 -04:00
|
|
|
let questionCount = 0;
|
2020-04-19 00:40:23 +02:00
|
|
|
return sql.replace(/\?/g, function () {
|
2018-07-09 08:10:34 -04:00
|
|
|
questionCount += 1;
|
|
|
|
return `:${questionCount}`;
|
|
|
|
});
|
2016-03-02 17:07:05 +01:00
|
|
|
},
|
|
|
|
|
2016-05-17 01:01:34 +10:00
|
|
|
_stream(connection, obj, stream, options) {
|
2020-04-19 00:40:23 +02:00
|
|
|
return new Promise(function (resolver, rejecter) {
|
2016-09-13 18:12:23 -04:00
|
|
|
stream.on('error', (err) => {
|
|
|
|
if (isConnectionError(err)) {
|
2018-07-09 08:10:34 -04:00
|
|
|
connection.__knex__disposed = err;
|
2016-09-13 18:12:23 -04:00
|
|
|
}
|
2018-07-09 08:10:34 -04:00
|
|
|
rejecter(err);
|
|
|
|
});
|
2016-03-02 17:07:05 +01:00
|
|
|
stream.on('end', resolver);
|
2018-07-09 08:10:34 -04:00
|
|
|
const queryStream = connection.queryStream(
|
|
|
|
obj.sql,
|
|
|
|
obj.bindings,
|
|
|
|
options
|
|
|
|
);
|
2016-10-14 17:00:39 +02:00
|
|
|
queryStream.pipe(stream);
|
2020-04-19 00:40:23 +02:00
|
|
|
queryStream.on('error', function (error) {
|
2018-06-27 16:42:50 -03:00
|
|
|
rejecter(error);
|
|
|
|
stream.emit('error', error);
|
|
|
|
});
|
2018-07-09 08:10:34 -04:00
|
|
|
});
|
2016-03-02 17:07:05 +01:00
|
|
|
},
|
2018-07-09 08:10:34 -04:00
|
|
|
});
|
2016-09-13 18:12:23 -04:00
|
|
|
|
2019-06-04 00:37:17 +02:00
|
|
|
module.exports = Client_Oracle;
|