Kaynağa Gözat

HUE-9463 [assist] Fix js exception in the reference repository for non-defined dialects

Johan Ahlen 5 yıl önce
ebeveyn
işleme
dc6e28041f

+ 28 - 1
desktop/core/src/desktop/js/sql/reference/sqlReferenceRepository.test.ts

@@ -16,7 +16,7 @@
 
 import { UdfArgument } from 'sql/reference/types';
 import { Connector } from 'types/config';
-import { getArgumentDetailsForUdf } from './sqlReferenceRepository';
+import { getArgumentDetailsForUdf, isReserved } from './sqlReferenceRepository';
 import * as apiUtils from 'sql/reference/apiUtils';
 
 describe('sqlReferenceRepository.js', () => {
@@ -188,4 +188,31 @@ describe('sqlReferenceRepository.js', () => {
       'T'
     ]);
   });
+
+  it("Should return generic keywords if the dialect isn't defined", async () => {
+    jest.mock('sql/reference/generic/reservedKeywords', () => ({
+      RESERVED_WORDS: new Set<string>(['GENERICRESERVED'])
+    }));
+
+    const reserved = await isReserved({ dialect: 'foo' } as Connector, 'GENERICRESERVED');
+    expect(reserved).toBeTruthy();
+
+    const notReserved = await isReserved({ dialect: 'foo' } as Connector, 'not_reserved');
+    expect(notReserved).toBeFalsy();
+  });
+
+  it('Should use custom keywords if defined for dialect', async () => {
+    jest.mock('sql/reference/calcite/reservedKeywords', () => ({
+      RESERVED_WORDS: new Set<string>(['CUSTOM'])
+    }));
+    jest.mock('sql/reference/generic/reservedKeywords', () => ({
+      RESERVED_WORDS: new Set<string>(['OTHER'])
+    }));
+
+    const reserved = await isReserved({ dialect: 'calcite' } as Connector, 'CUSTOM');
+    expect(reserved).toBeTruthy();
+
+    const notReserved = await isReserved({ dialect: 'calcite' } as Connector, 'OTHER');
+    expect(notReserved).toBeFalsy();
+  });
 });

+ 2 - 1
desktop/core/src/desktop/js/sql/reference/sqlReferenceRepository.ts

@@ -248,7 +248,8 @@ export const getSetOptions = async (connector: Connector): Promise<SetOptions> =
 };
 
 export const isReserved = async (connector: Connector, word: string): Promise<boolean> => {
-  const module = await KEYWORD_REFS[connector.dialect || GENERIC]();
+  const refImport = (connector.dialect && KEYWORD_REFS[connector.dialect]) || KEYWORD_REFS[GENERIC];
+  const module = await refImport();
   if (module.RESERVED_WORDS) {
     return module.RESERVED_WORDS.has(word.toUpperCase());
   }