{"version":3,"sources":["jsdelivr-header.js","/npm/@cubejs-backend/oracle-driver@1.5.14/driver/OracleDriver.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACAA,MAAM,OACJ,OAAM,iBACN,kBACE,QAAQ,2BACN,WAAE,WAAU,YAAE,aAAgB,QAAQ,+BACtC,SAAW,QAAQ,aACnB,OAAE,QAAW,QAAQ,SAErB,WAAc,IAClB,MAAM,EAAU,CAAC,EAMjB,OAJA,OAAO,KAAK,GAAW,OAAO,SAAS,IACrC,EAAQ,GAAO,EAAU,EAAI,IAGxB,CAAO,EAGV,SAAW,CAAC,EAAQ,KACxB,IAAI,EAAU,EAAO,EAAE,eAAiB,CAAC,EACrC,EAAU,EAAO,EAAE,aAAe,GAClC,EAAa,IAAI,MAerB,MAbmB,MAAf,EAAE,UAAmC,MAAf,EAAE,UAC1B,EAAW,KAAK,CAAC,eAGnB,EAAO,KAAK,CACV,KAAM,EAAE,YACR,KAAM,EAAE,UACR,eAGF,EAAO,EAAE,YAAc,EAAO,OAC9B,EAAO,EAAE,cAAgB,WAAW,GAE7B,WAAW,EAAO,EAM3B,MAAM,qBAAqB,WAIzB,4BAAO,GACL,OAAO,CACT,CAKA,WAAA,CAAY,EAAS,CAAC,GACpB,MAAM,CACJ,sBAAuB,EAAO,wBAGhC,MAAM,EACJ,EAAO,YACP,iBAAiB,WAEnB,KAAK,GAAK,SACV,KAAK,GAAG,UAAY,KAAK,GAAG,OAC5B,KAAK,GAAG,SAAW,IACnB,KAAK,GAAG,QAAU,IAClB,KAAK,GAAG,aAAe,IACvB,KAAK,OAAS,CACZ,KAAM,OAAO,SAAU,CAAE,eACzB,SAAU,OAAO,SAAU,CAAE,eAC7B,GAAI,OAAO,SAAU,CAAE,eACvB,KAAM,OAAO,SAAU,CAAE,eACzB,KAAM,OAAO,SAAU,CAAE,gBAAiB,KAC1C,QAAS,EACT,QACE,EAAO,aACP,OAAO,gBAAiB,CAAE,gBAC1B,MACC,GAEL,KAAK,OAAO,iBAAmB,KAAK,OAAO,kBAAoB,GAAG,KAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,IACxH,CAEA,kBAAM,GACJ,MAAM,QAAa,KAAK,MAAM,ooBAkB9B,OAAO,OAAO,SAAU,CAAC,EAAG,EAC9B,CAEA,2BAAM,GAKJ,OAJK,KAAK,OACR,KAAK,WAAa,KAAK,GAAG,WAAW,KAAK,SAGrC,KAAK,KAAK,eACnB,CAEA,oBAAM,SACE,KAAK,MAAM,qBAAsB,CAAC,EAC1C,CAEA,iBAAM,CAAY,EAAiB,GACjC,GAAI,EAAgB,OAAS,IAC3B,MAAM,IAAI,MACR,qIAAuE,MAE3E,OAAO,MAAM,YAAY,EAAiB,EAC5C,CAEA,WAAM,CAAM,EAAO,GACjB,MAAM,QAAa,KAAK,wBAExB,IACE,MAAM,QAAY,EAAK,QAAQ,EAAO,GAAU,CAAC,GACjD,OAAO,GAAO,EAAI,IACpB,CAAE,MAAO,GACP,MAAM,CACR,CAAE,QACA,UACQ,EAAK,OACb,CAAE,MAAO,GACP,MAAM,CACR,CACF,CACF,CAEA,OAAA,GACE,OAAO,KAAK,MAAQ,KAAK,KAAK,OAChC,CAEA,QAAA,GACE,OAAO,CACT,CAEA,kBAAA,CAAmB,GACjB,EAAM,MAAQ,kBAAkB,EAAM,+BAA+B,EAAM,OAC7E,EAGF,OAAO,QAAU","file":"/npm/@cubejs-backend/oracle-driver@1.5.14/driver/OracleDriver.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@cubejs-backend/oracle-driver@1.5.14/driver/OracleDriver.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * @copyright Cube Dev, Inc.\n * @license Apache-2.0\n * @fileoverview The `OracleDriver` and related types declaration.\n */\n\nconst {\n  getEnv,\n  assertDataSource,\n} = require('@cubejs-backend/shared');\nconst { BaseDriver, TableColumn } = require('@cubejs-backend/base-driver');\nconst oracledb = require('oracledb');\nconst { reduce } = require('ramda');\n\nconst sortByKeys = (unordered) => {\n  const ordered = {};\n\n  Object.keys(unordered).sort().forEach((key) => {\n    ordered[key] = unordered[key];\n  });\n\n  return ordered;\n};\n\nconst reduceCb = (result, i) => {\n  let schema = (result[i.table_schema] || {});\n  let tables = (schema[i.table_name] || []);\n  let attributes = new Array();\n\n  if (i.key_type === \"P\" || i.key_type === \"U\") {\n    attributes.push([\"primaryKey\"]);\n  }\n\n  tables.push({\n    name: i.column_name,\n    type: i.data_type,\n    attributes\n  });\n\n  schema[i.table_name] = tables.sort();\n  result[i.table_schema] = sortByKeys(schema);\n\n  return sortByKeys(result);\n};\n\n/**\n * Oracle driver class.\n */\nclass OracleDriver extends BaseDriver {\n  /**\n   * Returns default concurrency value.\n   */\n  static getDefaultConcurrency() {\n    return 2;\n  }\n\n  /**\n   * Class constructor.\n   */\n  constructor(config = {}) {\n    super({\n      testConnectionTimeout: config.testConnectionTimeout,\n    });\n\n    const dataSource =\n      config.dataSource ||\n      assertDataSource('default');\n\n    this.db = oracledb;\n    this.db.outFormat = this.db.OBJECT;\n    this.db.partRows = 100000;\n    this.db.maxRows = 100000;\n    this.db.prefetchRows = 500;\n    this.config = {\n      user: getEnv('dbUser', { dataSource }),\n      password: getEnv('dbPass', { dataSource }),\n      db: getEnv('dbName', { dataSource }),\n      host: getEnv('dbHost', { dataSource }),\n      port: getEnv('dbPort', { dataSource }) || 1521,\n      poolMin: 0,\n      poolMax:\n        config.maxPoolSize ||\n        getEnv('dbMaxPoolSize', { dataSource }) ||\n        50,\n      ...config\n    };\n    this.config.connectionString = this.config.connectionString || `${this.config.host}:${this.config.port}/${this.config.db}`;\n  }\n\n  async tablesSchema() {\n    const data = await this.query(`\n      select tc.owner         \"table_schema\"\n          , tc.table_name     \"table_name\"\n          , tc.column_name    \"column_name\"\n          , tc.data_type      \"data_type\"\n          , c.constraint_type \"key_type\"\n      from all_tab_columns tc\n      left join all_cons_columns cc\n        on (tc.owner, tc.table_name, tc.column_name)\n        in ((cc.owner, cc.table_name, cc.column_name))\n      left join all_constraints c\n        on (tc.owner, tc.table_name, cc.constraint_name)\n        in ((c.owner, c.table_name, c.constraint_name))\n        and c.constraint_type\n        in ('P','U')\n      where tc.owner = user\n    `);\n\n    return reduce(reduceCb, {}, data);\n  }\n\n  async getConnectionFromPool() {\n    if (!this.pool) {\n      this.pool = await this.db.createPool(this.config);\n    }\n\n    return this.pool.getConnection()\n  }\n\n  async testConnection() {\n    await this.query('SELECT 1 FROM DUAL', {});\n  }\n\n  async createTable(quotedTableName, columns) {\n    if (quotedTableName.length > 128) {\n      throw new Error('Oracle can not work with table names longer than 128 symbols. ' +\n        `Consider using the 'sqlAlias' attribute in your cube definition for ${quotedTableName}.`);\n    }\n    return super.createTable(quotedTableName, columns);\n  }\n\n  async query(query, values) {\n    const conn = await this.getConnectionFromPool();\n\n    try {\n      const res = await conn.execute(query, values || {});\n      return res && res.rows;\n    } catch (e) {\n      throw (e);\n    } finally {\n      try {\n        await conn.close();\n      } catch (e) {\n        throw e;\n      }\n    }\n  }\n\n  release() {\n    return this.pool && this.pool.close();\n  }\n\n  readOnly() {\n    return true;\n  }\n\n  wrapQueryWithLimit(query) {\n    query.query = `SELECT * FROM (${query.query}) AS t WHERE ROWNUM <= ${query.limit}`;\n  }\n}\n\nmodule.exports = OracleDriver;\n"]}