Julian Hyde created CALCITE-6425: ------------------------------------ Summary: Attributes Key: CALCITE-6425 URL: https://issues.apache.org/jira/browse/CALCITE-6425 Project: Calcite Issue Type: Improvement Reporter: Julian Hyde
Add operators and metadata so that columns can have attributes. For example, we wish to associate a FORMATTED_VALUE attribute to the SALARY column. The following example defines an attribute in a CTE and then uses it in a query. {code:java} CREATE VIEW EnhancedEmp AS SELECT deptno, ename, DEFINE_ATTRIBUTE( DEFINE_ATTRIBUTE(revenue, 'FORMATTED_VALUE', CAST(revenue AS TO_CHAR(revenue, 'L99D99')), 'SORT_KEY', revenue) FROM Emp); SELECT ename, sal, GET_ATTRIBUTE(sal, 'FORMATTED_VALUE') AS formatted_sal, DESCRIBE_ATTRIBUTES(sal) AS attributes FROM EnhancedEmp WHERE ename = 'SCOTT'; ENAME SAL FORMATTED_SAL ATTRIBUTES ===== ==== ============= ========================================== SCOTT 1200 $1200.00. FORMATTED_VALUE: VARCHAR, SORT_KEY: NUMBER SELECT deptno, SUM(sal) AS sum_sal, GET_ATTRIBUTE(SUM(sal), 'FORMATTED_VALUE') AS formatted_sum_sal FROM EnhancedEmp WHERE ename = 'SCOTT'; DEPTNO SUM_SAL FORMATTED_SUM_SAL ====== ======= ================= 10 5000 $5,000.00 20 3750 $3,750.00{code} Here are the functions: * {{DEFINE_ATTRIBUTE(targetExpression, attributeName, expression)}} defines an attribute on targetExpression; the return value is the same but has an extra attribute * {{GET_ATTRIBUTE(targetExpression, attributeName)}} evaluates an attribute of an expression * {{DESCRIBE_ATTRIBUTES(targetExpression)}} returns a string describing the names and types of available attributes What is the goal of this facility? To be able to attach "semantic" metadata, such as format string, formatted value, sort key, to values in a way that can easily be transmitted over JDBC. An alternative approach would have been to convert values into records. But the consuming expression and JDBC would have to deal with those records. In the proposed approach, you can find what attributes are available as part of an 'extended type' using {{DESCRIBE_ATTRIBUTES}}. Also required is a set of rules for how particular attributes propagate through queries and expressions. For example, the {{FORMATTED_VALUE}} attribute propagates through subquery ({{SELECT}}), filter ({{WHERE}}), aggregate ({{GROUP BY}}), and through the {{SUM}} aggregate function. -- This message was sent by Atlassian Jira (v8.20.10#820010)