firebase / extensions

Source code for official Firebase extensions
https://firebase.google.com/products/extensions
Apache License 2.0
893 stars 383 forks source link

πŸ› [firestore-bigquery-export] tableRequiresUpdate always returning true #2194

Open timdrew opened 1 month ago

timdrew commented 1 month ago

Describe your configuration

Describe the problem

The tableRequiresUpdate function appears to be bugged in a couple different ways depending on your config. This results in the update check always returning true and the table config being repeatedly updated unnecessarily.

Issue 1

If clustering config is null then the table will always require updates due to this faulty check:

const configCluster = JSON.stringify(config.clustering); // Evaluates to 'null'
const tableCluster = JSON.stringify(metadata.clustering?.fields || []); // Evaluates to '[]'
if (configCluster !== tableCluster) return true; // Always true

Issue 2

Within initializeRawChangeLogTable the pathParamsColExists is allowed to be undefined

const pathParamsColExists = fields.find(
        (column) => column.name === "path_params"
      ); // Evaluates to undefined if not present, rather than boolean

This is then passed into tableRequiresUpdate, and will always fail the strict equality check:

if (!!config.wildcardIds !== pathParamsColExists) return true; // Evaluates to boolean !== undefined -> always true

Steps to reproduce:

What happened? How can we make the problem occur? Supply either clustering:nullor don't have path_params column.

Expected result

The table shouldn't need updating.

Actual result

The table always updates on every run.