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 ('EXPRESSION_ARM.ABS_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.SIN_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.COS_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.TAN_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.ASIN_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.ACOS_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.ATAN_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.EXP_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.LOG_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.LOG2_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.LOG10_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.SQUARE_ROOT_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.VALUE_FUNCTION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.LENGTH_FUNCTION' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF ('EXPRESSION_ARM.PLUS_EXPRESSION' IN TYPEOF(arg)) OR('EXPRESSION_ARM.MULT_EXPRESSION' IN TYPEOF(arg)) OR('EXPRESSION_ARM.MAXIMUM_FUNCTION' IN TYPEOF(arg)) OR('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 ('EXPRESSION_ARM.DIV_EXPRESSION' IN TYPEOF(arg)) OR ('EXPRESSION_ARM.MOD_EXPRESSION' IN TYPEOF(arg)) OR('EXPRESSION_ARM.POWER_EXPRESSION' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF 'EXPRESSION_ARM.SIMPLE_BOOLEAN_EXPRESSION' IN TYPEOF (arg) THEN RETURN (TRUE); END_IF; IF 'EXPRESSION_ARM.NOT_EXPRESSION' IN TYPEOF (arg) THEN RETURN (Is_sql_mappable (arg\UNARY_GENERIC_EXPRESSION.OPERAND)); END_IF; IF ('EXPRESSION_ARM.ODD_FUNCTION'IN TYPEOF (arg)) OR ('EXPRESSION_ARM.XOR_EXPRESSION' IN TYPEOF (arg)) THEN RETURN (FALSE); END_IF; IF ('EXPRESSION_ARM.AND_EXPRESSION' IN TYPEOF (arg)) OR ('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 '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 ('EXPRESSION_ARM.COMPARISON_EQUAL' IN TYPEOF (arg)) OR ('EXPRESSION_ARM.COMPARISON_GREATER' IN TYPEOF (arg)) OR ('EXPRESSION_ARM.COMPARISON_GREATER_EQUAL' IN TYPEOF (arg)) OR ('EXPRESSION_ARM.COMPARISON_LESS' IN TYPEOF (arg)) OR ('EXPRESSION_ARM.COMPARISON_LESS_EQUAL' IN TYPEOF (arg)) OR ('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 ('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; -- Is_sql_mappable
|