FUNCTION used_functions
(arg : expression) : SET [0:?] OF defined_function;
LOCAL result : SET OF defined_function := []; END_LOCAL;
IF ('ISO13584_EXPRESSIONS_SCHEMA.DEFINED_FUNCTION' IN TYPEOF(arg)) THEN RETURN ( [arg] ) ; END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.UNARY_NUMERIC_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\unary_numeric_expression.operand)); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.BINARY_NUMERIC_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\binary_numeric_expression.operands[1]) + used_functions (arg\binary_numeric_expression.operands[2])); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_NUMERIC_EXPRESSION' IN TYPEOF (arg) THEN REPEAT i := 1 TO SIZEOF ( arg\multiple_arity_numeric_expression.operands); result := result + used_functions ( arg\multiple_arity_numeric_expression.operands[i]); END_REPEAT; RETURN (result); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.UNARY_GENERIC_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\unary_generic_expression.operand)); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.BINARY_BOOLEAN_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\binary_generic_expression.operands[1]) + used_functions ( arg\binary_generic_expression.operands[2])); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_BOOLEAN_EXPRESSION' IN TYPEOF (arg) THEN REPEAT i := 1 TO SIZEOF (arg\multiple_arity_Boolean_expression.operands); result := result + used_functions( arg\multiple_arity_Boolean_expression.operands[i]); END_REPEAT; RETURN (result); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\comparison_expression.operands[1]) + used_functions (arg\comparison_expression.operands[2])); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.INTERVAL_EXPRESSION' IN TYPEOF(arg) THEN RETURN (used_functions(arg\interval_expression.interval_low) + used_functions(arg\interval_expression.interval_high) + used_functions(arg\interval_expression.interval_item)); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.INDEX_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\index_expression.operand) + used_functions (arg\index_expression.index)); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.SUBSTRING_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\substring_expression.operand) + used_functions (arg\substring_expression.index1) + used_functions (arg\substring_expression.index2)); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.CONCAT_EXPRESSION' IN TYPEOF (arg) THEN REPEAT i := 1 TO SIZEOF (arg\concat_expression.operands); result := result + used_functions ( arg\concat_expression.operands[i]); END_REPEAT; RETURN (result); END_IF; IF 'ISO13584_EXPRESSIONS_SCHEMA.FORMAT_FUNCTION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\format_function.value_to_format) + used_functions (arg\format_function.format_string)); END_IF; (* IF 'ISO13584_EXPRESSIONS_SCHEMA.LIKE_EXPRESSION' IN TYPEOF (arg) THEN RETURN (used_functions (arg\comparison_expression.operands[1]) + used_functions (arg\comparison_expression.operands[2])); END_IF; *) RETURN ([ ]); END_FUNCTION; -- used_functions
|