lib_shim_specs_query.js

/*
 * Copyright 2024 New Relic Corporation. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

'use strict'

const OperationSpec = require('./operation')

/**
 * Retrieves the query argument from an array of arguments.
 *
 * @typedef {function} QueryFunction
 * @param {Shim} shim The shim this function was passed to.
 * @param {Function} func The function being recorded.
 * @param {string} name The name of the function.
 * @param {Array.<*>} args The arguments being passed into the function.
 * @returns {string} The query string from the arguments list.
 */

/* eslint-disable jsdoc/require-property-description */
/**
 * @typedef {object} QuerySpecParams
 * @mixes OperationSpecParams
 * @property {number|string|QueryFunction} [query]
 */

/**
 * Spec that describes a database query operation.
 */
class QuerySpec extends OperationSpec {
  /**
   * When set to a number it represents the position in the function's
   * arguments that is the query string. If a string, it is the query to be
   * executed. Otherwise, if it is a function, it will be passed the
   * arguments and must return the query string.
   *
   * @type {number|string|QueryFunction}
   */
  query

  /* eslint-disable jsdoc/require-param-description */
  /**
   * @param {QuerySpecParams} params
   */
  constructor(params) {
    super(params)

    this.query = params.query ?? null
  }
}

module.exports = QuerySpec