Ejemplo n.º 1
0
        public override object VisitTo_date([NotNull] PlSqlParser.To_dateContext context)
        {
            var result = new OCallMethodReference(new MethodName("TO_DATE")
                                                  , new OMethodArgument()
            {
                Value = (OCodeObject)VisitExpression(context.expression())
            }
                                                  , new OMethodArgument()
            {
                Value = [email protected]()
            }
                                                  );

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// string_function :
        ///       SUBSTR LEFT_PAREN expression COMMA expression(COMMA expression)? RIGHT_PAREN
        ///     | TO_CHAR LEFT_PAREN(table_element | standard_function | expression) (COMMA string1=string)? (COMMA string2=string)? RIGHT_PAREN
        ///     | DECODE LEFT_PAREN expressions RIGHT_PAREN
        ///     | CHR LEFT_PAREN concatenation USING NCHAR_CS RIGHT_PAREN
        ///     | NVL LEFT_PAREN expression COMMA expression RIGHT_PAREN
        ///     | TRIM LEFT_PAREN((LEADING | TRAILING | BOTH)?  string1=string? FROM)? concatenation RIGHT_PAREN
        ///     | TO_DATE LEFT_PAREN expression(COMMA string1 = string)? RIGHT_PAREN
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitString_function([NotNull] PlSqlParser.String_functionContext context)
        {
            OCallMethodReference result = null;

            if (context.SUBSTR().Exist())
            {
                Stop();
                result = new OCallMethodReference(new MethodName("SUBSTR")
                                                  , context.expression().Select(c => new OMethodArgument()
                {
                    Value = (OCodeObject)VisitExpression(c)
                }).ToArray()
                                                  );
            }
            else if (context.TO_CHAR().Exist())
            {
                Stop();
                OCodeObject value         = null;
                var         table_element = context.table_element();
                if (table_element != null)
                {
                    value = (OCodeObject)VisitTable_element(table_element);
                }

                else
                {
                    var standard_function = context.standard_function();
                    if (standard_function != null)
                    {
                        value = (OCodeObject)VisitStandard_function(standard_function);
                    }

                    else
                    {
                        var expression = context.expression();
                        value = (OCodeObject)VisitExpression(expression[0]);
                    }
                }

                List <OMethodArgument> args = new List <OMethodArgument>()
                {
                    new OMethodArgument()
                    {
                        Value = value
                    }
                };
                if (context.@string1 != null)
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = [email protected]()
                    });
                }
                if (context.@string2 != null)
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = [email protected]()
                    });
                }

                result = new OCallMethodReference(new MethodName("TO_CHAR")

                                                  );
            }
            else if (context.DECODE().Exist())
            {
                Stop();
                var e = context.expressions();
                result = new OCallMethodReference(new MethodName("DECODE")
                                                  , e.expression().Select(c => new OMethodArgument()
                {
                    Value = (OCodeObject)VisitExpression(c)
                }).First()
                                                  );
            }
            else if (context.CHR().Exist())
            {
                Stop();

                var concatenation = context.concatenation();
                var value         = (OCodeObject)VisitConcatenation(concatenation);
                if (context.NCHAR_CS().Exist())
                {
                    Stop();
                }

                result = new OCallMethodReference(new MethodName("CHR")
                                                  , new OMethodArgument()
                {
                    Value = value
                }
                                                  );
            }
            else if (context.TRIM().Exist())
            {
                Stop();
                List <OMethodArgument> args = new List <OMethodArgument>();
                if (context.LEADING().Exist())
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = new OKeyWordConstant()
                        {
                            Value = "LEADING"
                        }
                    });
                }

                else if (context.TRAILING().Exist())
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = new OKeyWordConstant()
                        {
                            Value = "TRAILING"
                        }
                    });
                }

                if (context.BOTH().Exist())
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = new OKeyWordConstant()
                        {
                            Value = "BOTH"
                        }
                    });
                }

                if (context.string1 != null)
                {
                    args.Add(new OMethodArgument()
                    {
                        Value = context.string1.ToConstant()
                    });
                }

                var concatenation = context.concatenation();
                var value         = (OCodeObject)VisitConcatenation(concatenation);
                //args.Add(new OMethodArgument() { Value = value });

                result = new OCallMethodReference(new MethodName("TRIM"), args.ToArray());
            }
            else
            {
                Stop();
            }

            return(result);
        }
Ejemplo n.º 3
0
 public void VisitCallMethodReference(OCallMethodReference oCallMethodReference)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 4
0
        /// <summary>
        /// other_function :
        ///         over_clause_keyword function_argument_analytic over_clause?
        ///     | /*TODO stantard_function_enabling_using*/ regular_id function_argument_modeling using_clause?
        ///     | NVL LEFT_PAREN expression COMMA expression RIGHT_PAREN
        ///     | to_date
        ///     | COUNT LEFT_PAREN(ASTERISK | (DISTINCT | UNIQUE | ALL)? concatenation) RIGHT_PAREN over_clause?
        ///     | (CAST | XMLCAST) LEFT_PAREN(MULTISET LEFT_PAREN subquery RIGHT_PAREN | concatenation) AS type_spec RIGHT_PAREN
        ///     | COALESCE LEFT_PAREN table_element(COMMA (numeric | string))? RIGHT_PAREN
        ///     | COLLECT LEFT_PAREN(DISTINCT | UNIQUE)? concatenation collect_order_by_part? RIGHT_PAREN
        ///     | within_or_over_clause_keyword(function_arguments keep_clause?) within_or_over_part+
        ///     | cursor_name(PERCENT_ISOPEN | PERCENT_FOUND | PERCENT_NOTFOUND | PERCENT_ROWCOUNT )
        ///     | DECOMPOSE LEFT_PAREN concatenation(CANONICAL | COMPATIBILITY)? RIGHT_PAREN
        ///     | EXTRACT LEFT_PAREN regular_id FROM concatenation RIGHT_PAREN
        ///     | (FIRST_VALUE | LAST_VALUE) function_argument_analytic respect_or_ignore_nulls? over_clause
        ///     | standard_prediction_function_keyword LEFT_PAREN expressions cost_matrix_clause? using_clause? RIGHT_PAREN
        ///     | TRANSLATE LEFT_PAREN expression(USING (CHAR_CS | NCHAR_CS))? (COMMA expression) * RIGHT_PAREN
        ///     | TRANSLATE LEFT_PAREN expression COMMA string COMMA string RIGHT_PAREN
        ///     | TREAT LEFT_PAREN expression AS REF? type_spec RIGHT_PAREN
        ///     | XMLAGG LEFT_PAREN expression order_by_clause? RIGHT_PAREN('.' general_element_part)?
        ///     | (XMLCOLATTVAL | XMLFOREST) LEFT_PAREN(COMMA? xml_multiuse_expression_element)+ RIGHT_PAREN('.' general_element_part)?
        ///     | XMLELEMENT LEFT_PAREN(ENTITYESCAPING | NOENTITYESCAPING)? (NAME | EVALNAME)? expression
        ///       (/*TODO{input.LT(2).getText().equalsIgnoreCase("xmlattributes")}?*/ COMMA xml_attributes_clause)?
        ///        (COMMA expression column_alias?)* RIGHT_PAREN('.' general_element_part)?
        ///     | XMLEXISTS LEFT_PAREN expression xml_passing_clause? RIGHT_PAREN
        ///     | XMLPARSE LEFT_PAREN(DOCUMENT | CONTENT) concatenation WELLFORMED? RIGHT_PAREN('.' general_element_part)?
        ///     | XMLPI
        ///       LEFT_PAREN(NAME identifier | EVALNAME concatenation) (COMMA concatenation)? RIGHT_PAREN('.' general_element_part)?
        ///     | XMLQUERY LEFT_PAREN concatenation xml_passing_clause? RETURNING CONTENT(NULL ON EMPTY)? RIGHT_PAREN('.' general_element_part)?
        ///     | XMLROOT LEFT_PAREN concatenation(COMMA xmlroot_param_version_part)? (COMMA xmlroot_param_standalone_part)? RIGHT_PAREN('.' general_element_part)?
        ///     | XMLSERIALIZE LEFT_PAREN(DOCUMENT | CONTENT) concatenation(AS type_spec)?
        ///         xmlserialize_param_enconding_part? xmlserialize_param_version_part? xmlserialize_param_ident_part? ((HIDE | SHOW) DEFAULTS)? RIGHT_PAREN
        ///         ('.' general_element_part)?
        ///     | XMLTABLE LEFT_PAREN xml_namespaces_clause? concatenation xml_passing_clause? (COLUMNS xml_table_column (COMMA xml_table_column))? RIGHT_PAREN('.' general_element_part)?
        ///     | TRUNC LEFT_PAREN to_date(COMMA string)? RIGHT_PAREN
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitOther_function([NotNull] PlSqlParser.Other_functionContext context)
        {
            OCallMethodReference result = null;

            if (context.NVL().Exist())  // NVL LEFT_PAREN expression COMMA expression RIGHT_PAREN
            {
                Stop();
                result = new OCallMethodReference(new MethodName("NVL")
                                                  , context.expression().Select(c => new OMethodArgument()
                {
                    Value = (OCodeObject)VisitExpression(c)
                }).First()
                                                  );
            }
            else if (context.COUNT().Exist())   // COUNT LEFT_PAREN (ASTERISK | (DISTINCT | UNIQUE | ALL)? concatenation) RIGHT_PAREN over_clause?
            {
                Stop();
            }
            else if (context.COALESCE().Exist())    // COALESCE LEFT_PAREN table_element (COMMA (numeric | string))? RIGHT_PAREN
            {
                Stop();
            }
            else if (context.COLLECT().Exist())    // COLLECT LEFT_PAREN (DISTINCT | UNIQUE)? concatenation collect_order_by_part? RIGHT_PAREN
            {
                Stop();
            }
            else if (context.DECOMPOSE().Exist())    // DECOMPOSE LEFT_PAREN concatenation (CANONICAL | COMPATIBILITY)? RIGHT_PAREN
            {
                Stop();
            }
            else if (context.EXTRACT().Exist())    // EXTRACT LEFT_PAREN regular_id FROM concatenation RIGHT_PAREN
            {
                Stop();
            }
            else if (context.TRANSLATE().Exist())
            {
                // TRANSLATE LEFT_PAREN expression (USING (CHAR_CS | NCHAR_CS))? (COMMA expression)* RIGHT_PAREN
                // TRANSLATE LEFT_PAREN expression COMMA string COMMA string RIGHT_PAREN
                Stop();
            }
            else if (context.TREAT().Exist())    // TREAT LEFT_PAREN expression AS REF? type_spec RIGHT_PAREN
            {
                Stop();
            }
            else if (context.XMLAGG().Exist())    // XMLAGG LEFT_PAREN expression order_by_clause? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLELEMENT().Exist())    // XMLELEMENT LEFT_PAREN (ENTITYESCAPING | NOENTITYESCAPING)? (NAME | EVALNAME)? expression
            {
                Stop();
            }
            else if (context.XMLEXISTS().Exist())    // XMLEXISTS LEFT_PAREN expression xml_passing_clause? RIGHT_PAREN
            {
                Stop();
            }
            else if (context.XMLPI().Exist())    // XMLPI LEFT_PAREN (NAME identifier | EVALNAME concatenation) (COMMA concatenation)? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLPARSE().Exist())    // XMLPARSE LEFT_PAREN (DOCUMENT | CONTENT) concatenation WELLFORMED? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLQUERY().Exist())    // XMLQUERY LEFT_PAREN concatenation xml_passing_clause? RETURNING CONTENT (NULL ON EMPTY)? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLROOT().Exist())    // XMLROOT LEFT_PAREN concatenation (COMMA xmlroot_param_version_part)? (COMMA xmlroot_param_standalone_part)? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLSERIALIZE().Exist())    // XMLSERIALIZE LEFT_PAREN (DOCUMENT | CONTENT) concatenation (AS type_spec)?
            //       xmlserialize_param_enconding_part? xmlserialize_param_version_part? xmlserialize_param_ident_part? ((HIDE | SHOW) DEFAULTS)? RIGHT_PAREN
            //       ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.XMLTABLE().Exist())    // XMLTABLE LEFT_PAREN xml_namespaces_clause? concatenation xml_passing_clause? (COLUMNS xml_table_column (COMMA xml_table_column))? RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.TRUNC().Exist())    // TRUNC LEFT_PAREN to_date (COMMA string)? RIGHT_PAREN
            {
                Stop();
            }
            else if (context.CAST().Exist() || context.XMLCAST().Exist())    // (CAST | XMLCAST) LEFT_PAREN (MULTISET LEFT_PAREN subquery RIGHT_PAREN | concatenation) AS type_spec RIGHT_PAREN
            {
                Stop();
            }
            else if (context.XMLCOLATTVAL().Exist() || context.XMLFOREST().Exist())    // (XMLCOLATTVAL | XMLFOREST) LEFT_PAREN (COMMA? xml_multiuse_expression_element)+ RIGHT_PAREN ('.' general_element_part)?
            //      (/*TODO{input.LT(2).getText().equalsIgnoreCase("xmlattributes")}?*/ COMMA xml_attributes_clause)?
            //      (COMMA expression column_alias?)* RIGHT_PAREN ('.' general_element_part)?
            {
                Stop();
            }
            else if (context.FIRST_VALUE().Exist() || context.LAST_VALUE().Exist())    // (FIRST_VALUE | LAST_VALUE) function_argument_analytic respect_or_ignore_nulls? over_clause
            {
                Stop();
            }
            else
            {
                var to_date = context.to_date();
                if (to_date != null)
                {
                    result = (OCallMethodReference)VisitTo_date(to_date);
                }

                else
                {
                    Stop();
                }
                //over_clause_keyword function_argument_analytic over_clause?
                //   | /*TODO stantard_function_enabling_using*/ regular_id function_argument_modeling using_clause?
                //   | within_or_over_clause_keyword (function_arguments keep_clause?) within_or_over_part+
                //   | cursor_name ( PERCENT_ISOPEN | PERCENT_FOUND | PERCENT_NOTFOUND | PERCENT_ROWCOUNT )
                //   | standard_prediction_function_keyword LEFT_PAREN expressions cost_matrix_clause? using_clause? RIGHT_PAREN
            }

            Debug.Assert(result != null);
            return(result);
        }
Ejemplo n.º 5
0
 public void VisitCallMethodReference(OCallMethodReference oCallMethodReference)
 {
 }