浏览代码

HUE-9459 [editor] Make sure return types are unique when UDFs are merged

Johan Ahlen 5 年之前
父节点
当前提交
4ab093738b

+ 36 - 0
desktop/core/src/desktop/js/sql/reference/apiUtils.test.ts

@@ -125,6 +125,42 @@ describe('apiUtils.js', () => {
     expect(result[1].returnTypes[0]).toEqual('T');
   });
 
+  it('should merge return types when equal', () => {
+    const apiFunctions = [
+      {
+        name: 'cos',
+        return_type: 'INT'
+      },
+      {
+        name: 'sin',
+        return_type: 'INT'
+      },
+      {
+        name: 'cos',
+        return_type: 'DOUBLE'
+      },
+      {
+        name: 'cos',
+        return_type: 'DOUBLE'
+      },
+      {
+        name: 'sin',
+        return_type: 'INT'
+      }
+    ];
+
+    const result = adaptApiFunctions(apiFunctions);
+
+    expect(result.length).toEqual(2);
+    expect(result[0].name).toEqual('cos');
+    expect(result[0].returnTypes.length).toEqual(2);
+    expect(result[0].returnTypes).toContain('INT');
+    expect(result[0].returnTypes).toContain('DOUBLE');
+    expect(result[1].name).toEqual('sin');
+    expect(result[1].returnTypes.length).toEqual(1);
+    expect(result[0].returnTypes).toContain('INT');
+  });
+
   it('should merge same udf with multiple argument types', () => {
     const apiFunctions: ApiUdf[] = [
       {

+ 3 - 0
desktop/core/src/desktop/js/sql/reference/apiUtils.ts

@@ -115,6 +115,9 @@ export const adaptApiFunctions = (functions: ApiUdf[]): UdfDetails[] => {
           adaptedUdf.returnTypes = additionalReturnTypes;
         }
       }
+
+      // Make sure the return types are unique
+      adaptedUdf.returnTypes = [...new Set(adaptedUdf.returnTypes)];
     } else {
       adapted[apiUdf.name] = adaptApiUdf(apiUdf);
       udfs.push(adapted[apiUdf.name]);