// Oracle Client // ------- const { inherits } = require('util'); const Client = require('../../client'); const SchemaCompiler = require('./schema/oracle-compiler'); const ColumnBuilder = require('./schema/oracle-columnbuilder'); const ColumnCompiler = require('./schema/oracle-columncompiler'); const TableCompiler = require('./schema/oracle-tablecompiler'); const { isConnectionError } = require('./utils'); // Always initialize with the "QueryBuilder" and "QueryCompiler" // objects, which extend the base 'lib/query/builder' and // 'lib/query/compiler', respectively. function Client_Oracle(config) { Client.call(this, config); } inherits(Client_Oracle, Client); Object.assign(Client_Oracle.prototype, { dialect: 'oracle', driverName: 'oracle', schemaCompiler() { return new SchemaCompiler(this, ...arguments); }, columnBuilder() { return new ColumnBuilder(this, ...arguments); }, columnCompiler() { return new ColumnCompiler(this, ...arguments); }, tableCompiler() { return new TableCompiler(this, ...arguments); }, // Return the database for the Oracle client. database() { return this.connectionSettings.database; }, // Position the bindings for the query. positionBindings(sql) { let questionCount = 0; return sql.replace(/\?/g, function () { questionCount += 1; return `:${questionCount}`; }); }, _stream(connection, obj, stream, options) { return new Promise(function (resolver, rejecter) { stream.on('error', (err) => { if (isConnectionError(err)) { connection.__knex__disposed = err; } rejecter(err); }); stream.on('end', resolver); const queryStream = connection.queryStream( obj.sql, obj.bindings, options ); queryStream.pipe(stream); queryStream.on('error', function (error) { rejecter(error); stream.emit('error', error); }); }); }, }); module.exports = Client_Oracle;