diff --git a/packages/server/src/api/controllers/row/alias.ts b/packages/server/src/api/controllers/row/alias.ts index 05a261af42..747166a7ba 100644 --- a/packages/server/src/api/controllers/row/alias.ts +++ b/packages/server/src/api/controllers/row/alias.ts @@ -32,7 +32,7 @@ export default class AliasTables { char.substring(0, char.length - 1) + String.fromCharCode(char.charCodeAt(char.length - 1) + 1) // reached end of characters, extend number of characters used - if (this.character === "z") { + if (this.character.charAt(this.character.length - 1) === "z") { this.character = new Array(this.character.length + 1).fill("a").join("") } return char diff --git a/packages/server/src/integrations/tests/sqlAlias.spec.ts b/packages/server/src/integrations/tests/sqlAlias.spec.ts index da88127b16..c35c2b45b6 100644 --- a/packages/server/src/integrations/tests/sqlAlias.spec.ts +++ b/packages/server/src/integrations/tests/sqlAlias.spec.ts @@ -2,6 +2,8 @@ import { QueryJson } from "@budibase/types" import { join } from "path" import Sql from "../base/sql" import { SqlClient } from "../utils" +import AliasTables from "../../api/controllers/row/alias" +import { generator } from "@budibase/backend-core/tests" function multiline(sql: string) { return sql.replace(/\n/g, "").replace(/ +/g, " ") @@ -157,4 +159,19 @@ describe("Captures of real examples", () => { }) }) }) + + describe("check max character aliasing", () => { + it("should handle over 'z' max character alias", () => { + const tableNames = [] + for (let i = 0; i < 100; i++) { + tableNames.push(generator.word()) + } + const aliasing = new AliasTables(tableNames) + let alias: string = "" + for (let table of tableNames) { + alias = aliasing.getAlias(table) + } + expect(alias).toEqual("aaay") + }) + }) })