Sindbad~EG File Manager

Current Path : /home/infinitibizsol/.trash/node_modules.5/sequelize/lib/dialects/sqlite/
Upload File :
Current File : /home/infinitibizsol/.trash/node_modules.5/sequelize/lib/dialects/sqlite/query.js.map

{
  "version": 3,
  "sources": ["../../../src/dialects/sqlite/query.js"],
  "sourcesContent": ["'use strict';\n\nconst _ = require('lodash');\nconst Utils = require('../../utils');\nconst AbstractQuery = require('../abstract/query');\nconst QueryTypes = require('../../query-types');\nconst sequelizeErrors = require('../../errors');\nconst parserStore = require('../parserStore')('sqlite');\nconst { logger } = require('../../utils/logger');\n\nconst debug = logger.debugContext('sql:sqlite');\n\n// sqlite3 currently ignores bigint values, so we have to translate to string for now\n// There's a WIP here: https://github.com/TryGhost/node-sqlite3/pull/1501\nfunction stringifyIfBigint(value) {\n  if (typeof value === 'bigint') {\n    return value.toString();\n  }\n\n  return value;\n}\n\nclass Query extends AbstractQuery {\n  getInsertIdField() {\n    return 'lastID';\n  }\n\n  /**\n   * rewrite query with parameters.\n   *\n   * @param {string} sql\n   * @param {Array|object} values\n   * @param {string} dialect\n   * @private\n   */\n  static formatBindParameters(sql, values, dialect) {\n    let bindParam;\n    if (Array.isArray(values)) {\n      bindParam = {};\n      values.forEach((v, i) => {\n        bindParam[`$${i + 1}`] = v;\n      });\n      sql = AbstractQuery.formatBindParameters(sql, values, dialect, { skipValueReplace: true })[0];\n    } else {\n      bindParam = {};\n      if (typeof values === 'object') {\n        for (const k of Object.keys(values)) {\n          bindParam[`$${k}`] = values[k];\n        }\n      }\n      sql = AbstractQuery.formatBindParameters(sql, values, dialect, { skipValueReplace: true })[0];\n    }\n    return [sql, bindParam];\n  }\n\n  _collectModels(include, prefix) {\n    const ret = {};\n\n    if (include) {\n      for (const _include of include) {\n        let key;\n        if (!prefix) {\n          key = _include.as;\n        } else {\n          key = `${prefix}.${_include.as}`;\n        }\n        ret[key] = _include.model;\n\n        if (_include.include) {\n          _.merge(ret, this._collectModels(_include.include, key));\n        }\n      }\n    }\n\n    return ret;\n  }\n\n  _handleQueryResponse(metaData, columnTypes, err, results, errStack) {\n    if (err) {\n      err.sql = this.sql;\n      throw this.formatError(err, errStack);\n    }\n    let result = this.instance;\n\n    // add the inserted row id to the instance\n    if (this.isInsertQuery(results, metaData) || this.isUpsertQuery()) {\n      this.handleInsertQuery(results, metaData);\n      if (!this.instance) {\n        // handle bulkCreate AI primary key\n        if (\n          metaData.constructor.name === 'Statement'\n          && this.model\n          && this.model.autoIncrementAttribute\n          && this.model.autoIncrementAttribute === this.model.primaryKeyAttribute\n          && this.model.rawAttributes[this.model.primaryKeyAttribute]\n        ) {\n          const startId = metaData[this.getInsertIdField()] - metaData.changes + 1;\n          result = [];\n          for (let i = startId; i < startId + metaData.changes; i++) {\n            result.push({ [this.model.rawAttributes[this.model.primaryKeyAttribute].field]: i });\n          }\n        } else {\n          result = metaData[this.getInsertIdField()];\n        }\n      }\n    }\n\n    if (this.isShowTablesQuery()) {\n      return results.map(row => row.name);\n    }\n    if (this.isShowConstraintsQuery()) {\n      result = results;\n      if (results && results[0] && results[0].sql) {\n        result = this.parseConstraintsFromSql(results[0].sql);\n      }\n      return result;\n    }\n    if (this.isSelectQuery()) {\n      if (this.options.raw) {\n        return this.handleSelectQuery(results);\n      }\n      // This is a map of prefix strings to models, e.g. user.projects -> Project model\n      const prefixes = this._collectModels(this.options.include);\n\n      results = results.map(result => {\n        return _.mapValues(result, (value, name) => {\n          let model;\n          if (name.includes('.')) {\n            const lastind = name.lastIndexOf('.');\n\n            model = prefixes[name.substr(0, lastind)];\n\n            name = name.substr(lastind + 1);\n          } else {\n            model = this.options.model;\n          }\n\n          const tableName = model.getTableName().toString().replace(/`/g, '');\n          const tableTypes = columnTypes[tableName] || {};\n\n          if (tableTypes && !(name in tableTypes)) {\n            // The column is aliased\n            _.forOwn(model.rawAttributes, (attribute, key) => {\n              if (name === key && attribute.field) {\n                name = attribute.field;\n                return false;\n              }\n            });\n          }\n\n          return Object.prototype.hasOwnProperty.call(tableTypes, name)\n            ? this.applyParsers(tableTypes[name], value)\n            : value;\n        });\n      });\n\n      return this.handleSelectQuery(results);\n    }\n    if (this.isShowOrDescribeQuery()) {\n      return results;\n    }\n    if (this.sql.includes('PRAGMA INDEX_LIST')) {\n      return this.handleShowIndexesQuery(results);\n    }\n    if (this.sql.includes('PRAGMA INDEX_INFO')) {\n      return results;\n    }\n    if (this.sql.includes('PRAGMA TABLE_INFO')) {\n      // this is the sqlite way of getting the metadata of a table\n      result = {};\n\n      let defaultValue;\n      for (const _result of results) {\n        if (_result.dflt_value === null) {\n          // Column schema omits any \"DEFAULT ...\"\n          defaultValue = undefined;\n        } else if (_result.dflt_value === 'NULL') {\n          // Column schema is a \"DEFAULT NULL\"\n          defaultValue = null;\n        } else {\n          defaultValue = _result.dflt_value;\n        }\n\n        result[_result.name] = {\n          type: _result.type,\n          allowNull: _result.notnull === 0,\n          defaultValue,\n          primaryKey: _result.pk !== 0\n        };\n\n        if (result[_result.name].type === 'TINYINT(1)') {\n          result[_result.name].defaultValue = { '0': false, '1': true }[result[_result.name].defaultValue];\n        }\n\n        if (typeof result[_result.name].defaultValue === 'string') {\n          result[_result.name].defaultValue = result[_result.name].defaultValue.replace(/'/g, '');\n        }\n      }\n      return result;\n    }\n    if (this.sql.includes('PRAGMA foreign_keys;')) {\n      return results[0];\n    }\n    if (this.sql.includes('PRAGMA foreign_keys')) {\n      return results;\n    }\n    if (this.sql.includes('PRAGMA foreign_key_list')) {\n      return results;\n    }\n    if ([QueryTypes.BULKUPDATE, QueryTypes.BULKDELETE].includes(this.options.type)) {\n      return metaData.changes;\n    }\n    if (this.options.type === QueryTypes.VERSION) {\n      return results[0].version;\n    }\n    if (this.options.type === QueryTypes.RAW) {\n      return [results, metaData];\n    }\n    if (this.isUpsertQuery()) {\n      return [result, null];\n    }\n    if (this.isUpdateQuery() || this.isInsertQuery()) {\n      return [result, metaData.changes];\n    }\n    return result;\n  }\n\n  async run(sql, parameters) {\n    const conn = this.connection;\n    this.sql = sql;\n    const method = this.getDatabaseMethod();\n    const complete = this._logQuery(sql, debug, parameters);\n\n    return new Promise((resolve, reject) => conn.serialize(async () => {\n      const columnTypes = {};\n      const errForStack = new Error();\n      const executeSql = () => {\n        if (sql.startsWith('-- ')) {\n          return resolve();\n        }\n        const query = this;\n        // cannot use arrow function here because the function is bound to the statement\n        function afterExecute(executionError, results) {\n          try {\n            complete();\n            // `this` is passed from sqlite, we have no control over this.\n            // eslint-disable-next-line no-invalid-this\n            resolve(query._handleQueryResponse(this, columnTypes, executionError, results, errForStack.stack));\n            return;\n          } catch (error) {\n            reject(error);\n          }\n        }\n\n        if (!parameters) parameters = [];\n\n        if (_.isPlainObject(parameters)) {\n          const newParameters = Object.create(null);\n          for (const key of Object.keys(parameters)) {\n            newParameters[`${key}`] = stringifyIfBigint(parameters[key]);\n          }\n          parameters = newParameters;\n        } else {\n          parameters = parameters.map(stringifyIfBigint);\n        }\n\n        conn[method](sql, parameters, afterExecute);\n\n        return null;\n      };\n\n      if (this.getDatabaseMethod() === 'all') {\n        let tableNames = [];\n        if (this.options && this.options.tableNames) {\n          tableNames = this.options.tableNames;\n        } else if (/FROM `(.*?)`/i.exec(this.sql)) {\n          tableNames.push(/FROM `(.*?)`/i.exec(this.sql)[1]);\n        }\n\n        // If we already have the metadata for the table, there's no need to ask for it again\n        tableNames = tableNames.filter(tableName => !(tableName in columnTypes) && tableName !== 'sqlite_master');\n\n        if (!tableNames.length) {\n          return executeSql();\n        }\n        await Promise.all(tableNames.map(tableName =>\n          new Promise(resolve => {\n            tableName = tableName.replace(/`/g, '');\n            columnTypes[tableName] = {};\n\n            conn.all(`PRAGMA table_info(\\`${tableName}\\`)`, (err, results) => {\n              if (!err) {\n                for (const result of results) {\n                  columnTypes[tableName][result.name] = result.type;\n                }\n              }\n              resolve();\n            });\n          })));\n      }\n      return executeSql();\n    }));\n  }\n\n  parseConstraintsFromSql(sql) {\n    let constraints = sql.split('CONSTRAINT ');\n    let referenceTableName, referenceTableKeys, updateAction, deleteAction;\n    constraints.splice(0, 1);\n    constraints = constraints.map(constraintSql => {\n      //Parse foreign key snippets\n      if (constraintSql.includes('REFERENCES')) {\n        //Parse out the constraint condition form sql string\n        updateAction = constraintSql.match(/ON UPDATE (CASCADE|SET NULL|RESTRICT|NO ACTION|SET DEFAULT){1}/);\n        deleteAction = constraintSql.match(/ON DELETE (CASCADE|SET NULL|RESTRICT|NO ACTION|SET DEFAULT){1}/);\n\n        if (updateAction) {\n          updateAction = updateAction[1];\n        }\n\n        if (deleteAction) {\n          deleteAction = deleteAction[1];\n        }\n\n        const referencesRegex = /REFERENCES.+\\((?:[^)(]+|\\((?:[^)(]+|\\([^)(]*\\))*\\))*\\)/;\n        const referenceConditions = constraintSql.match(referencesRegex)[0].split(' ');\n        referenceTableName = Utils.removeTicks(referenceConditions[1]);\n        let columnNames = referenceConditions[2];\n        columnNames = columnNames.replace(/\\(|\\)/g, '').split(', ');\n        referenceTableKeys = columnNames.map(column => Utils.removeTicks(column));\n      }\n\n      const constraintCondition = constraintSql.match(/\\((?:[^)(]+|\\((?:[^)(]+|\\([^)(]*\\))*\\))*\\)/)[0];\n      constraintSql = constraintSql.replace(/\\(.+\\)/, '');\n      const constraint = constraintSql.split(' ');\n\n      if (['PRIMARY', 'FOREIGN'].includes(constraint[1])) {\n        constraint[1] += ' KEY';\n      }\n\n      return {\n        constraintName: Utils.removeTicks(constraint[0]),\n        constraintType: constraint[1],\n        updateAction,\n        deleteAction,\n        sql: sql.replace(/\"/g, '`'), //Sqlite returns double quotes for table name\n        constraintCondition,\n        referenceTableName,\n        referenceTableKeys\n      };\n    });\n\n    return constraints;\n  }\n\n  applyParsers(type, value) {\n    if (type.includes('(')) {\n      // Remove the length part\n      type = type.substr(0, type.indexOf('('));\n    }\n    type = type.replace('UNSIGNED', '').replace('ZEROFILL', '');\n    type = type.trim().toUpperCase();\n    const parse = parserStore.get(type);\n\n    if (value !== null && parse) {\n      return parse(value, { timezone: this.sequelize.options.timezone });\n    }\n    return value;\n  }\n\n  formatError(err, errStack) {\n\n    switch (err.code) {\n      case 'SQLITE_CONSTRAINT_UNIQUE':\n      case 'SQLITE_CONSTRAINT_PRIMARYKEY':\n      case 'SQLITE_CONSTRAINT_TRIGGER':\n      case 'SQLITE_CONSTRAINT_FOREIGNKEY':\n      case 'SQLITE_CONSTRAINT': {\n        if (err.message.includes('FOREIGN KEY constraint failed')) {\n          return new sequelizeErrors.ForeignKeyConstraintError({\n            parent: err,\n            stack: errStack\n          });\n        }\n\n        let fields = [];\n\n        // Sqlite pre 2.2 behavior - Error: SQLITE_CONSTRAINT: columns x, y are not unique\n        let match = err.message.match(/columns (.*?) are/);\n        if (match !== null && match.length >= 2) {\n          fields = match[1].split(', ');\n        } else {\n\n          // Sqlite post 2.2 behavior - Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: table.x, table.y\n          match = err.message.match(/UNIQUE constraint failed: (.*)/);\n          if (match !== null && match.length >= 2) {\n            fields = match[1].split(', ').map(columnWithTable => columnWithTable.split('.')[1]);\n          }\n        }\n\n        const errors = [];\n        let message = 'Validation error';\n\n        for (const field of fields) {\n          errors.push(new sequelizeErrors.ValidationErrorItem(\n            this.getUniqueConstraintErrorMessage(field),\n            'unique violation', // sequelizeErrors.ValidationErrorItem.Origins.DB,\n            field,\n            this.instance && this.instance[field],\n            this.instance,\n            'not_unique'\n          ));\n        }\n\n        if (this.model) {\n          _.forOwn(this.model.uniqueKeys, constraint => {\n            if (_.isEqual(constraint.fields, fields) && !!constraint.msg) {\n              message = constraint.msg;\n              return false;\n            }\n          });\n        }\n\n        return new sequelizeErrors.UniqueConstraintError({ message, errors, parent: err, fields, stack: errStack });\n      }\n      case 'SQLITE_BUSY':\n        return new sequelizeErrors.TimeoutError(err, { stack: errStack });\n\n      default:\n        return new sequelizeErrors.DatabaseError(err, { stack: errStack });\n    }\n  }\n\n  async handleShowIndexesQuery(data) {\n    // Sqlite returns indexes so the one that was defined last is returned first. Lets reverse that!\n    return Promise.all(data.reverse().map(async item => {\n      item.fields = [];\n      item.primary = false;\n      item.unique = !!item.unique;\n      item.constraintName = item.name;\n      const columns = await this.run(`PRAGMA INDEX_INFO(\\`${item.name}\\`)`);\n      for (const column of columns) {\n        item.fields[column.seqno] = {\n          attribute: column.name,\n          length: undefined,\n          order: undefined\n        };\n      }\n\n      return item;\n    }));\n  }\n\n  getDatabaseMethod() {\n    if (this.isInsertQuery() || this.isUpdateQuery() || this.isUpsertQuery() || this.isBulkUpdateQuery() || this.sql.toLowerCase().includes('CREATE TEMPORARY TABLE'.toLowerCase()) || this.options.type === QueryTypes.BULKDELETE) {\n      return 'run';\n    }\n    return 'all';\n  }\n}\n\nmodule.exports = Query;\nmodule.exports.Query = Query;\nmodule.exports.default = Query;\n"],
  "mappings": "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",
  "names": []
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists