cube-js/cube

Using FILTER_PARAMS causes filters to be duplicated in WHERE clauses

Open

#3477 aperta il 22 set 2021

Vedi su GitHub
 (18 commenti) (0 reazioni) (0 assegnatari)Rust (1965 fork)batch import
help wanted

Metriche repository

Star
 (19.563 star)
Metriche merge PR
 (Merge medio 5g 16h) (138 PR mergiate in 30 g)

Descrizione

Describe the bug When using FILTER_PARAMS to filter a cube, the attribute that is being filtered gets added to the SQL twice.

To Reproduce

// cube.js
module.exports = {
  queryRewrite: (query, { ... }) => {
    query.filters.push({
      member: 'Order.closed',
      operator: 'equals',
      values: ['true'],
    });
    return query;
  }
};

// schema/Order.js
cube('Order, {
  sql: `SELECT * FROM order WHERE ${FILTER_PARAMS.Order.closed.filter('closed')}`,
  measures: {
    amount: {
      sql: 'amount',
      type: `sum`,
    },
  dimensions: {
    closed: {
      type: `boolean`,
      sql: `closed`,
   },
};

// query
{
  measures: 'Order.amount',
}

Generates the following sql:

SELECT sum(order.amount)
FROM
  (
    SELECT *
    FROM order
    WHERE order.closed = $1
  )
WHERE
  order.closed = $2

Expected behavior

SELECT sum(order.amount
    FROM order
    WHERE order.closed = $1

OR (at least)

SELECT sum(order.amount)
FROM
  (
    SELECT *
    FROM order
    WHERE order.closed = $1
  )

Version: "@cubejs-backend/postgres-driver": "^0.28.19", "@cubejs-backend/server": "^0.28.18", "@cubejs-backend/server-core": "^0.28.18"

Guida contributor