mirror of
https://github.com/knex/knex.git
synced 2025-06-26 22:00:25 +00:00
93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
// Oracle Client
|
|
// -------
|
|
const { ReturningHelper } = require('./utils');
|
|
const { isConnectionError } = require('./utils');
|
|
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');
|
|
|
|
// Always initialize with the "QueryBuilder" and "QueryCompiler"
|
|
// objects, which extend the base 'lib/query/builder' and
|
|
// 'lib/query/compiler', respectively.
|
|
class Client_Oracle extends Client {
|
|
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) {
|
|
if (!obj.sql) throw new Error('The query is empty');
|
|
|
|
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);
|
|
});
|
|
});
|
|
}
|
|
|
|
// Formatter part
|
|
|
|
alias(first, second) {
|
|
return first + ' ' + second;
|
|
}
|
|
|
|
parameter(value, builder, formatter) {
|
|
// Returning helper uses always ROWID as string
|
|
if (value instanceof ReturningHelper && this.driver) {
|
|
value = new this.driver.OutParam(this.driver.OCCISTRING);
|
|
} else if (typeof value === 'boolean') {
|
|
value = value ? 1 : 0;
|
|
}
|
|
return super.parameter(value, builder, formatter);
|
|
}
|
|
}
|
|
|
|
Object.assign(Client_Oracle.prototype, {
|
|
dialect: 'oracle',
|
|
|
|
driverName: 'oracle',
|
|
});
|
|
|
|
module.exports = Client_Oracle;
|