| Application module: Numeric expression | ISO/TS 10303-1526:2018-11(E)  © ISO  | 
         
         (*
ISO/TC 184/SC 4/WG 12 N9889 - ISO/TS 10303-1526 Numeric expression - EXPRESS ARM
Supersedes 
         ISO/TC 184/SC 4/WG 12 N7867
*)
         
SCHEMA Numeric_expression_arm;
         USE FROM
         Expression_arm;
            -- ISO/TS 10303-1342
         USE FROM
         Generic_expression_arm;
            -- ISO/TS 10303-1341
         USE FROM
         Numeric_function_arm;
            -- ISO/TS 10303-1346
ENTITY And_expression
           SUBTYPE OF (Multiple_arity_boolean_expression);
         
         END_ENTITY;
ENTITY Binary_boolean_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Xor_expression,
                                Equals_expression))
           SUBTYPE OF (Boolean_expression, Binary_generic_expression);
         
         END_ENTITY;
ENTITY Binary_numeric_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Minus_expression,
                                Div_expression,
                                Mod_expression,
                                Slash_expression,
                                Power_expression))
           SUBTYPE OF (Numeric_expression, Binary_generic_expression);
           SELF\Binary_generic_expression.operands : LIST[2:2] OF Numeric_expression;
         
         END_ENTITY;
ENTITY Boolean_defined_function
           ABSTRACT SUPERTYPE
         
           SUBTYPE OF (Defined_function, Boolean_expression);
         
         END_ENTITY;
ENTITY Boolean_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Simple_boolean_expression,
                                Unary_boolean_expression,
                                Binary_boolean_expression,
                                Multiple_arity_boolean_expression,
                                Comparison_expression,
                                Boolean_defined_function,
                                Interval_expression))
           SUBTYPE OF (Expression);
         
         END_ENTITY;
ENTITY Boolean_literal
           SUBTYPE OF (Simple_boolean_expression, Generic_literal);
           the_value : BOOLEAN;
         
         END_ENTITY;
ENTITY Boolean_variable
           SUBTYPE OF (Simple_boolean_expression, Variable);
         
         END_ENTITY;
ENTITY Comparison_equal
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Comparison_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Comparison_equal,
                                Comparison_greater,
                                Comparison_greater_equal,
                                Comparison_less,
                                Comparison_less_equal,
                                Comparison_not_equal))
           SUBTYPE OF (Boolean_expression, Binary_generic_expression);
           SELF\Binary_generic_expression.operands : LIST[2:2] OF Expression;
WHERE
           WR1: (
            	('NUMERIC_EXPRESSION_ARM.NUMERIC_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[1]))
            	AND
            	('NUMERIC_EXPRESSION_ARM.NUMERIC_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[2])))
            	OR
            	(('NUMERIC_EXPRESSION_ARM.BOOLEAN_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[1]))
            	AND
            	('NUMERIC_EXPRESSION_ARM.BOOLEAN_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[2])))
            	OR
            	(('EXPRESSION_ARM.STRING_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[1]))
            	AND
            	('EXPRESSION_ARM.STRING_EXPRESSION'
            	IN TYPEOF(SELF\Binary_generic_expression.operands[2])));
         
         END_ENTITY;
ENTITY Comparison_greater
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Comparison_greater_equal
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Comparison_less
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Comparison_less_equal
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Comparison_not_equal
           SUBTYPE OF (Comparison_expression);
         
         END_ENTITY;
ENTITY Defined_function
           ABSTRACT SUPERTYPE
         ;
         
         END_ENTITY;
ENTITY Div_expression
           SUBTYPE OF (Binary_numeric_expression);
         
         END_ENTITY;
ENTITY Equals_expression
           SUBTYPE OF (Binary_boolean_expression);
         
         END_ENTITY;
ENTITY Expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Numeric_expression,
                                Boolean_expression))
           SUBTYPE OF (Generic_expression);
         
         END_ENTITY;
ENTITY Int_literal
           SUBTYPE OF (Literal_number);
           SELF\Literal_number.the_value : INTEGER;
         
         END_ENTITY;
ENTITY Int_numeric_variable
           SUBTYPE OF (Numeric_variable);
         
         END_ENTITY;
ENTITY Interval_expression
           SUBTYPE OF (Boolean_expression, Multiple_arity_generic_expression);
DERIVE
           interval_low : Generic_expression := SELF\Multiple_arity_generic_expression.operands[1];
           interval_item : Generic_expression := SELF\Multiple_arity_generic_expression.operands[2];
           interval_high : Generic_expression := SELF\Multiple_arity_generic_expression.operands[3];
WHERE
           WR1: ('NUMERIC_EXPRESSION_ARM.EXPRESSION'
            	        IN TYPEOF(interval_low))
            	     AND ('NUMERIC_EXPRESSION_ARM.EXPRESSION'
            	        IN TYPEOF(interval_item) )
            	     AND ('NUMERIC_EXPRESSION_ARM.EXPRESSION'
            	        IN TYPEOF(interval_high));
           WR2: (('EXPRESSION_ARM.STRING_EXPRESSION'
            	       IN TYPEOF (SELF.Interval_low))
            	     AND ('EXPRESSION_ARM.STRING_EXPRESSION'
            	       IN TYPEOF (SELF.Interval_high))
            	     AND ('EXPRESSION_ARM.STRING_EXPRESSION'
            	       IN TYPEOF (SELF.Interval_item)))
            	 OR
            	    (('NUMERIC_EXPRESSION_ARM.NUMERIC_EXPRESSION'
            	       IN TYPEOF(SELF.Interval_low))
            	    AND ('NUMERIC_EXPRESSION_ARM.NUMERIC_EXPRESSION'
            	       IN TYPEOF(SELF.Interval_item))
            	    AND ('NUMERIC_EXPRESSION_ARM.NUMERIC_EXPRESSION'
            	      IN TYPEOF(SELF.Interval_high)));
         
         END_ENTITY;
ENTITY Literal_number
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Int_literal,
                                Real_literal))
           SUBTYPE OF (Simple_numeric_expression, Generic_literal);
           the_value : NUMBER;
         
         END_ENTITY;
ENTITY Minus_expression
           SUBTYPE OF (Binary_numeric_expression);
         
         END_ENTITY;
ENTITY Mod_expression
           SUBTYPE OF (Binary_numeric_expression);
         
         END_ENTITY;
ENTITY Mult_expression
           SUBTYPE OF (Multiple_arity_numeric_expression);
         
         END_ENTITY;
ENTITY Multiple_arity_boolean_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (And_expression,
                                Or_expression))
           SUBTYPE OF (Boolean_expression, Multiple_arity_generic_expression);
           SELF\Multiple_arity_generic_expression.operands : LIST[2:?] OF Boolean_expression;
         
         END_ENTITY;
ENTITY Multiple_arity_function_call
           ABSTRACT SUPERTYPE
         
           SUBTYPE OF (Multiple_arity_numeric_expression);
         
         END_ENTITY;
ENTITY Multiple_arity_numeric_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Plus_expression,
                                Mult_expression,
                                Multiple_arity_function_call))
           SUBTYPE OF (Numeric_expression, Multiple_arity_generic_expression);
           SELF\Multiple_arity_generic_expression.operands : LIST[2:?] OF Numeric_expression;
         
         END_ENTITY;
ENTITY Not_expression
           SUBTYPE OF (Unary_boolean_expression);
           SELF\Unary_generic_expression.operand : Boolean_expression;
         
         END_ENTITY;
ENTITY Numeric_expression
           ABSTRACT SUPERTYPE
         
           SUBTYPE OF (Expression);
DERIVE
           is_int : BOOLEAN := Is_int_expr (SELF);
           sql_mappable : BOOLEAN := Is_sql_mappable (SELF);
         
         END_ENTITY;
ENTITY Numeric_variable
           SUPERTYPE OF 
         (ONEOF (Int_numeric_variable,
                       Real_numeric_variable))
           SUBTYPE OF (Simple_numeric_expression, Variable);
WHERE
           WR1: ('EXPRESSION_ARM.INT_NUMERIC_VARIABLE' IN TYPEOF(SELF) ) OR
            	('EXPRESSION_ARM.REAL_NUMERIC_VARIABLE' IN TYPEOF(SELF) );
         
         END_ENTITY;
ENTITY Or_expression
           SUBTYPE OF (Multiple_arity_boolean_expression);
         
         END_ENTITY;
ENTITY Plus_expression
           SUBTYPE OF (Multiple_arity_numeric_expression);
         
         END_ENTITY;
ENTITY Power_expression
           SUBTYPE OF (Binary_numeric_expression);
         
         END_ENTITY;
ENTITY Real_literal
           SUBTYPE OF (Literal_number);
           SELF\Literal_number.the_value : REAL;
         
         END_ENTITY;
ENTITY Real_numeric_variable
           SUBTYPE OF (Numeric_variable);
         
         END_ENTITY;
ENTITY Simple_boolean_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Boolean_literal,
                                Boolean_variable))
           SUBTYPE OF (Boolean_expression, Simple_generic_expression);
         
         END_ENTITY;
ENTITY Simple_numeric_expression
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Literal_number,
                                Numeric_variable))
           SUBTYPE OF (Numeric_expression, Simple_generic_expression);
         
         END_ENTITY;
ENTITY Slash_expression
           SUBTYPE OF (Binary_numeric_expression);
         
         END_ENTITY;
ENTITY Unary_boolean_expression
           ABSTRACT SUPERTYPE
         
           SUBTYPE OF (Boolean_expression, Unary_generic_expression);
         
         END_ENTITY;
ENTITY Unary_numeric_expression
           ABSTRACT SUPERTYPE
         
           SUBTYPE OF (Numeric_expression, Unary_generic_expression);
           SELF\Unary_generic_expression.operand : Numeric_expression;
         
         END_ENTITY;
ENTITY Xor_expression
           SUBTYPE OF (Binary_boolean_expression);
           SELF\Binary_generic_expression.operands : LIST[2:2] OF Boolean_expression;
         
         END_ENTITY;
FUNCTION Is_int_expr
 (arg : Numeric_expression) : BOOLEAN;
         LOCAL
	i: INTEGER;
END_LOCAL;
IF 'NUMERIC_EXPRESSION_ARM.INT_LITERAL' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.REAL_LITERAL' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.INT_NUMERIC_VARIABLE' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.REAL_NUMERIC_VARIABLE' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 
END_IF;
IF 'ELEMENTARY_FUNCTION_ARM.ABS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (Is_int_expr(arg\Unary_numeric_expression.operand));
END_IF;
IF 'ELEMENTARY_FUNCTION_ARM.MINUS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (Is_int_expr(arg\Unary_numeric_expression.operand)); 
END_IF;
IF ('ELEMENTARY_FUNCTION_ARM.SIN_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.COS_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.TAN_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.ASIN_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.ACOS_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.ATAN_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.EXP_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.LOG_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.LOG2_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.LOG10_FUNCTION' IN TYPEOF(arg))
	OR ('ELEMENTARY_FUNCTION_ARM.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg))
THEN 
	RETURN (FALSE);
END_IF;
IF 	('NUMERIC_EXPRESSION_ARM.PLUS_EXPRESSION' IN TYPEOF(arg))
		OR ('NUMERIC_EXPRESSION_ARM.MULT_EXPRESSION' IN TYPEOF(arg))
		OR ('ELEMENTARY_FUNCTION_ARM.MAXIMUM_FUNCTION' IN TYPEOF(arg))
		OR ('ELEMENTARY_FUNCTION_ARM.MINIMUM_FUNCTION' IN TYPEOF(arg)) 
THEN 
	REPEAT i :=1 TO SIZEOF (
			arg\Multiple_arity_numeric_expression.operands);
	IF NOT 
		Is_int_expr(arg\Multiple_arity_numeric_expression.operands[i]) 
	THEN 
		RETURN (FALSE);
	END_IF;
	END_REPEAT;
	RETURN (TRUE);
END_IF;
IF 	('NUMERIC_EXPRESSION_ARM.MINUS_EXPRESSION' IN TYPEOF(arg))
		OR ('NUMERIC_EXPRESSION_ARM.POWER_EXPRESSION' 
								IN TYPEOF(arg))
THEN 
	RETURN (Is_int_expr(arg\Binary_numeric_expression.operands[1])
		AND Is_int_expr(arg\Binary_numeric_expression.operands[2]));
END_IF;
IF	('NUMERIC_EXPRESSION_ARM.DIV_EXPRESSION' IN TYPEOF(arg))
		OR ('NUMERIC_EXPRESSION_ARM.MOD_EXPRESSION' IN TYPEOF(arg))
THEN 
	RETURN(TRUE);	
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.SLASH_EXPRESSION' IN TYPEOF(arg) 
THEN 
	RETURN (FALSE); 	
END_IF;
IF 'NUMERIC_FUNCTION_ARM.LENGTH_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (TRUE); 
END_IF;
IF 'NUMERIC_FUNCTION_ARM.FUNCTION_PARAMETER_VALUE' IN TYPEOF(arg) 
THEN 
	IF 'NUMERIC_FUNCTION_ARM.INT_VALUE_FUNCTION' IN TYPEOF(arg) 
	THEN 
		RETURN (TRUE); 
	ELSE 
		RETURN (FALSE); 
	END_IF;
END_IF;
IF 'ELEMENTARY_FUNCTION_ARM.INTEGER_DEFINED_FUNCTION' IN TYPEOF(arg)
THEN 
	RETURN(TRUE) ;
END_IF;
IF'ELEMENTARY_FUNCTION_ARM.REAL_DEFINED_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN(FALSE) ;
END_IF ;
IF 'NUMERIC_EXPRESSION_ARM.BOOLEAN_DEFINED_FUNCTION' IN TYPEOF(arg)
THEN 
	RETURN(FALSE) ;
END_IF ;
IF 'EXPRESSION_ARM.STRING_DEFINED_FUNCTION' IN TYPEOF(arg)
THEN 
	RETURN (FALSE) ;
END_IF ;
RETURN (FALSE);
         END_FUNCTION;
         
FUNCTION Is_sql_mappable
 (arg : Expression) : BOOLEAN;
         LOCAL
	i: INTEGER;
END_LOCAL;
IF 'EXPRESSION_ARM.SIMPLE_NUMERIC_EXPRESSION' IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'EXPRESSION_ARM.SQL_MAPPABLE_DEFINED_FUNCTION' IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'EXPRESSION_ARM.MINUS_FUNCTION' IN TYPEOF(arg) 
THEN 
	RETURN (Is_sql_mappable(arg\Unary_numeric_expression.operand)); 
END_IF;
IF ('ELEMENTARY_FUNCTION_ARM.ABS_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.SIN_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.COS_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.TAN_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.ASIN_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.ACOS_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.ATAN_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.EXP_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.LOG_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.LOG2_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.LOG10_FUNCTION' IN TYPEOF(arg)) 
	OR ('ELEMENTARY_FUNCTION_ARM.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) 
	OR ('NUMERIC_FUNCTION_ARM.FUNCTION_PARAMETER_VALUE' IN TYPEOF(arg)) 
	OR ('NUMERIC_FUNCTION_ARM.LENGTH_FUNCTION' IN TYPEOF(arg))
THEN 
	RETURN (FALSE);
END_IF;
IF ('NUMERIC_EXPRESSION_ARM.PLUS_EXPRESSION' IN TYPEOF(arg)) 
	OR('NUMERIC_EXPRESSION_ARM.MULT_EXPRESSION' IN TYPEOF(arg)) 
	OR('NUMERIC_EXPRESSION_ARM.MAXIMUM_FUNCTION' IN TYPEOF(arg)) 
	OR('NUMERIC_EXPRESSION_ARM.MAXIMUM_FUNCTION' IN TYPEOF(arg)) 
THEN 
	REPEAT i :=1 TO SIZEOF (arg\Multiple_arity_numeric_expression.operands);
		IF NOT Is_sql_mappable(
			arg\Multiple_arity_numeric_expression.operands[i])
		THEN 
			RETURN (FALSE);
		END_IF;
	END_REPEAT;
RETURN (TRUE);
END_IF;
IF ('EXPRESSION_ARM.MINUS_EXPRESSION' IN TYPEOF(arg)) 
	OR ('EXPRESSION_ARM.SLASH_EXPRESSION' IN TYPEOF(arg))
THEN
	RETURN (Is_sql_mappable(arg\Binary_numeric_expression.operands[1])
		AND Is_sql_mappable(arg\Binary_numeric_expression.operands[2]));
END_IF;
IF ('NUMERIC_EXPRESSION_ARM.DIV_EXPRESSION' IN TYPEOF(arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.MOD_EXPRESSION' IN TYPEOF(arg)) 
	OR('NUMERIC_EXPRESSION_ARM.POWER_EXPRESSION' IN TYPEOF(arg))
THEN 
	RETURN (FALSE); 	
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.SIMPLE_BOOLEAN_EXPRESSION' IN TYPEOF (arg) 
THEN 
	RETURN (TRUE);
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.NOT_EXPRESSION' IN TYPEOF (arg) 
THEN 
	RETURN (Is_sql_mappable (arg\UNARY_GENERIC_EXPRESSION.OPERAND));
END_IF;
IF ('NUMERIC_FUNCTION_ARM.ODD_FUNCTION'IN TYPEOF (arg)) 
		OR ('NUMERIC_EXPRESSION_ARM.XOR_EXPRESSION' IN TYPEOF (arg)) 
THEN	
	RETURN (FALSE);
END_IF;
IF ('NUMERIC_EXPRESSION_ARM.AND_EXPRESSION' IN TYPEOF (arg)) 
		OR ('NUMERIC_EXPRESSION_ARM.OR_EXPRESSION' IN TYPEOF (arg)) 
THEN
	REPEAT i:=1 TO SIZEOF (
			arg\MULTIPLE_ARITY_BOOLEAN_EXPRESSION.OPERANDS);
		IF NOT Is_sql_mappable (
			arg\MULTIPLE_ARITY_BOOLEAN_EXPRESSION.OPERANDS[i]) 
		THEN 
			RETURN (FALSE);
		END_IF;
	END_REPEAT;
	RETURN (TRUE);
END_IF;
IF 'NUMERIC_EXPRESSION_ARM.EQUALS_EXPRESSION' IN TYPEOF (arg) 
THEN
	RETURN(Is_sql_mappable (
			arg\Binary_generic_expression.OPERANDS [1])
		AND Is_sql_mappable(
			arg\Binary_generic_expression.OPERANDS [2]));
END_IF;
IF	('NUMERIC_EXPRESSION_ARM.COMPARISON_EQUAL' IN TYPEOF (arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.COMPARISON_GREATER' IN TYPEOF (arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.COMPARISON_GREATER_EQUAL' 	IN TYPEOF (arg))
	OR ('NUMERIC_EXPRESSION_ARM.COMPARISON_LESS' IN TYPEOF (arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.COMPARISON_LESS_EQUAL' IN TYPEOF (arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.COMPARISON_NOT_EQUAL' IN TYPEOF (arg)) 
	OR ('EXPRESSION_ARM.LIKE_EXPRESSION'  IN TYPEOF (arg)) 
THEN
	RETURN (Is_sql_mappable (arg\COMPARISON_EXPRESSION.OPERANDS[1])
		AND Is_sql_mappable (arg\COMPARISON_EXPRESSION.OPERANDS[2]));
END_IF;
IF 'EXPRESSION_ARM.INTERVAL_EXPRESSION' IN TYPEOF(arg) 
THEN 
	RETURN (Is_sql_mappable(arg\Interval_expression.interval_low) 
		AND Is_sql_mappable(arg\Interval_expression.interval_high)
		AND Is_sql_mappable(arg\Interval_expression.interval_item));
END_IF;
IF ('NUMERIC_FUNCTION_ARM.NUMERIC_DEFINED_FUNCTION' IN TYPEOF(arg)) 
	OR ('NUMERIC_EXPRESSION_ARM.BOOLEAN_DEFINED_FUNCTION' 	IN TYPEOF(arg))
	OR ('EXPRESSION_ARM.STRING_DEFINED_FUNCTION' IN TYPEOF(arg))  
THEN 
		RETURN (FALSE) ;
END_IF;
IF 'EXPRESSION_ARM.SIMPLE_STRING_EXPRESSION' IN TYPEOF(ARG) 
THEN 
	RETURN (TRUE);
END_IF;
IF 	('EXPRESSION_ARM.INDEX_EXPRESSION' IN TYPEOF(arg)) 
	OR ('EXPRESSION_ARM.SUBSTRING_EXPRESSION' IN TYPEOF(arg)) 
	OR ('EXPRESSION_ARM.CONCAT_EXPRESSION' 	IN TYPEOF(arg)) 
	OR ('EXPRESSION_ARM.FORMAT_FUNCTION' IN TYPEOF(arg)) 
THEN 
	RETURN (FALSE);
END_IF;
	RETURN (FALSE);
         END_FUNCTION;
         
         END_SCHEMA;  -- Numeric_expression_arm
© ISO 2018 — All rights reserved