Componente middleware (oracle-plsql.js)

by Plurimedia

JavaScript

const oracledb = require('oracledb')
const conf = require('./oracle-config')
const PkgGateway = 'gateway'
const log = require('../lib/log')

oracledb.autoCommit = true
oracledb.fetchAsString = [oracledb.CLOB]

async function initialize () {
  await oracledb.createPool(conf.oracle_cn)
}
async function shutdown () {
  await oracledb.getPool().close()
}

exports.initialize = initialize
exports.shutdown = shutdown

function doRelease (conn) {
  conn.release(function (err) {
    if (err) {
      log.error('release() error', err.message)
    }
  })
}

let extractResult = async function (result) {
  return new Promise(function (resolve, reject) {
    if (result && result.outBinds && result.outBinds.ret) {
      let lob = result.outBinds.ret
      let clobString = ''

      lob.setEncoding('utf8')

      lob.on('data', function (chunk) { clobString += chunk })

      lob.on('close', function (err) {
        if (!err) resolve(JSON.parse(clobString))
        else reject(err)
      })

      lob.on('error', function (err) {
        reject(err)
      })
    } else resolve([])
  })
}

let doConnect = async function (cb) {
  return oracledb.getConnection()
}

let doCreateTempLob = function (conn) {
  return conn.createLob(oracledb.CLOB)
}

let doLoadTempLob = function (conn, data) {
  return new Promise(function (resolve, reject) {
    doCreateTempLob(conn)
      .then((templob) => {
        templob.on(
          'close',
          function () { })

        templob.on(
          'error',
          function (err) {
            reject(err)
          })

        templob.on(
          'finish',
          function () {
            resolve(templob)
          })

        var Readable = require('stream').Readable
        var s = new Readable()
        s.push(JSON.stringify(data))// the string you want
        s.push(null)
        s.pipe(templob)
      },
      (err) => { reject(err) })
  })
}

exports.readAll = async function (pkg, pars, ctx) {
  let sql = 'begin ' + PkgGateway +...