Skip to content
Snippets Groups Projects
Unverified Commit a060becd authored by Tom Robinson's avatar Tom Robinson Committed by GitHub
Browse files

Merge pull request #8769 from metabase/query-normalization-fe-fixes

Query normalization frontend fixes
parents 5b69c175 2ca80c32
No related branches found
No related tags found
No related merge requests found
......@@ -350,6 +350,7 @@ const Query = {
return this.cleanQuery(removeExpressionReferences(query));
},
// DEPRECATED
isRegularField(field) {
return typeof field === "number";
},
......@@ -394,8 +395,8 @@ const Query = {
Query.isRegularField(field) ||
Query.isLocalField(field) ||
(Query.isForeignKeyField(field) &&
Query.isRegularField(field[1]) &&
Query.isRegularField(field[2])) ||
(Query.isLocalField(field[1]) || Query.isRegularField(field[1])) &&
(Query.isLocalField(field[2]) || Query.isRegularField(field[2]))) ||
// datetime field can be either 4-item (deprecated): ["datetime-field", <field>, "as", <unit>]
// or 3 item (preferred style): ["datetime-field", <field>, <unit>]
(Query.isDatetimeField(field) &&
......@@ -442,8 +443,9 @@ const Query = {
} else if (Query.isLocalField(field)) {
return Query.getFieldTarget(field[1], tableDef, path);
} else if (Query.isForeignKeyField(field)) {
let fkFieldDef = Table.getField(tableDef, field[1]);
let targetTableDef = fkFieldDef && fkFieldDef.target.table;
const fkFieldId = Query.getFieldTargetId(field[1]);
const fkFieldDef = Table.getField(tableDef, fkFieldId);
const targetTableDef = fkFieldDef && fkFieldDef.target.table;
return Query.getFieldTarget(
field[2],
targetTableDef,
......
......@@ -279,7 +279,7 @@ describe("Legacy Query library", () => {
expect(target.unit).toEqual("day");
});
it("should return field object and table for fk field", () => {
it("should return field object and table for old-style fk field", () => {
let target = Query.getFieldTarget(["fk->", 1, 2], table1);
expect(target.table).toEqual(table2);
expect(target.field).toEqual(field2);
......@@ -287,6 +287,17 @@ describe("Legacy Query library", () => {
expect(target.unit).toEqual(undefined);
});
it("should return field object and table for new-style fk field", () => {
let target = Query.getFieldTarget(
["fk->", ["field-id", 1], ["field-id", 2]],
table1,
);
expect(target.table).toEqual(table2);
expect(target.field).toEqual(field2);
expect(target.path).toEqual([field1]);
expect(target.unit).toEqual(undefined);
});
it("should return field object and table and unit for fk + datetime field", () => {
let target = Query.getFieldTarget(
["datetime-field", ["fk->", 1, 2], "day"],
......@@ -308,6 +319,17 @@ describe("Legacy Query library", () => {
});
});
describe("isValidField", () => {
it("should return true for old-style fk", () => {
expect(Query.isValidField(["fk->", 1, 2])).toBe(true);
});
it("should return true for new-style fk", () => {
expect(Query.isValidField(["fk->", ["field-id", 1], ["field-id", 2]])).toBe(
true,
);
});
});
describe("generateQueryDescription", () => {
it("should work with multiple aggregations", () => {
expect(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment