/// <summary>
        /// : parameter_name(IN | OUT | INOUT | NOCOPY) * type_spec? default_value_part ?
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitParameter([NotNull] PlSqlParser.ParameterContext context)
        {
            bool _in  = context.IN() != null;
            bool _out = context.OUT() != null;

            if (context.INOUT() != null)
            {
                _in = _out = true;
            }
            bool _nocopy = context.NOCOPY() != null;

            OTypeReference type      = null;
            var            type_spec = context.type_spec();

            if (type_spec != null)
            {
                type = (OTypeReference)VisitType_spec(type_spec);
            }

            var arg = new ArgumentModel()
            {
                //Key = method.Arguments.Count().ToString(),
                Name        = context.parameter_name().GetCleanedName(),
                In          = _in,
                Out         = _out,
                Description = string.Empty,
            };

            if (type != null)
            {
                arg.Type = type;
            }

            return(arg);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// type_spec
        /// : datatype
        /// | REF? type_name(PERCENT_ROWTYPE | PERCENT_TYPE)?
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitType_spec([NotNull] PlSqlParser.Type_specContext context)
        {
            OTypeReference result   = null;
            var            typename = context.type_name();

            if (typename != null)
            {
                var type_names = typename.GetCleanedTexts();
                result = new OTypeReference()
                {
                    KindTypeReference = PercentTypeEnum.PercentType
                };
                if (type_names.Count == 1)
                {
                    result.DataType.Name = type_names[0];
                }
                else if (type_names.Count >= 2)
                {
                    result.DataType.Owner = type_names[0];
                    result.DataType.Name  = type_names[1];
                    if (type_names.Count == 3)
                    {
                        result.DataType.Name = type_names[2];
                    }
                }
            }
            else
            {
                var dataType = context.datatype();
                var _result  = (OracleType)this.VisitDatatype(dataType);
                result = new OTypeReference()
                {
                    DataType = _result
                };

                result.DataType.Owner = _result.Owner;
                result.DataType.Name  = _result.Name;
            }

            var percent_type    = context.PERCENT_TYPE() != null;
            var percent_rowtype = context.PERCENT_ROWTYPE() != null;

            if (percent_type)
            {
                result.KindTypeReference = PercentTypeEnum.PercentType;
            }

            else if (percent_rowtype)
            {
                result.KindTypeReference = PercentTypeEnum.PercentRowType;
            }

            return(result);
        }
Ejemplo n.º 3
0
        public override List <ModelProcWithArgument_11> Resolve(DbContextOracle context, Action <ModelProcWithArgument_11> action)
        {
            this.OracleContext = context;
            List <ModelProcWithArgument_11> List = new List <ModelProcWithArgument_11>();
            string colName = string.Empty;
            var    db      = context.Database;

            HashSet <object> _h = new HashSet <object>();

            if (action == null)
            {
                action =
                    t =>
                {
                    ProcedureModel proc = null;

                    if (!context.Use(t.PackageName) && !string.IsNullOrEmpty(t.Owner))
                    {
                        return;
                    }

                    if (t.ObjectName.ExcludIfStartwith(t.Owner, Models.Configurations.ExcludeKindEnum.Procedure))
                    {
                        return;
                    }

                    if (t.PackageName == t.ObjectName)
                    {
                        return;
                    }

                    string key = t.ObjectId.ToString() + ":" + t.PackageName + "::" + t.Owner + "." + t.ObjectName;

                    if (!db.Procedures.TryGet(key, out proc))
                    {
                        proc = new ProcedureModel()
                        {
                            Owner        = t.Owner,
                            SubProgramId = t.subprogram_id,
                            PackageName  = t.PackageName,
                            Name         = t.ObjectName,
                            Key          = key,
                            IsFunction   = false,
                        };

                        proc.ResultType.Type.DataType.Owner = t.TypeOwner;
                        proc.ResultType.Type.DataType.Name  = t.TypeName;

                        db.Procedures.Add(proc);
                    }

                    int index = proc.Arguments.Count;
                    colName = (!string.IsNullOrEmpty(t.ArgumentName) ? t.ArgumentName : "arg" + index.ToString());
                    OTypeReference _type = new OTypeReference();

                    if (colName != "arg0")
                    {
                        var arg = new ArgumentModel()
                        {
                            Key      = (proc.Arguments.Count + 1).ToString(),
                            Name     = colName,
                            In       = t.In,
                            Out      = t.Out,
                            Position = t.Position,
                            Sequence = t.Sequence,
                            IsValid  = true,     // !string.IsNullOrEmpty(t.ArgumentName)
                        };
                        _type = arg.Type;
                        proc.Arguments.Add(arg);
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(t.DataType))
                        {
                            var c = new ColumnModel()
                            {
                                Key      = (proc.ResultType.Columns.Count + 1).ToString(),
                                Name     = colName,
                                ColumnId = t.Position,
                            };
                            _type.DataType = c.Type;
                            proc.ResultType.Columns.Add(c);
                        }
                    }

                    if (_type != null)
                    {
                        _type.DataType.DataDefault = t.DataDefault != null?t.DataDefault.ToString()?.Trim() : string.Empty;

                        _type.DataType.DataLength    = t.DataLength;
                        _type.DataType.DataPrecision = t.DataPrecision;
                        _type.DataType.Name          = t.DataType;
                        _type.DataType.defaultLength = t.DefaultLength;
                        _type.DataType.DataLevel     = t.Data_Level;
                        _type.DataType.Owner         = t.TypeOwner;
                        _type.DataType.Name          = t.TypeName;

                        if (_type.DataType.Name != null)
                        {
                            _type.DataType.DbType = TypeMatchExtension.ConvertToDbType(t.DataType).ToString();

                            if (t.DataType.StartsWith("PL/SQL"))
                            {
                                _type.DataType.IsRecord = t.DataType == "PL/SQL RECORD";
                            }

                            else if (_type.DataType.Name == "TABLE")
                            {
                                _type.DataType.IsRecord = true;
                            }


                            //TODO : Recopier le nom du type dans le path
                        }
                    }

                    proc.IsFunction = proc.ResultType.Columns.Count > 0 && (proc.ResultType.Columns.OfType <ColumnModel>().Count(col => col.Name == "arg0") == proc.ResultType.Columns.Count);
                }
            }
            ;

            string _sql = string.Format(sql, ProcQueryWhereCondition);
            ProcDescriptorWithArgument_11 view = new ProcDescriptorWithArgument_11(context.Manager.ConnectionString);

            using (var reader = context.Manager.ExecuteReader(CommandType.Text, _sql, QueryBase.DbParams.ToArray()))
            {
                List = view.ReadAll(reader, action).ToList();
            }

            return(List);
        }
    }
Ejemplo n.º 4
0
 public void VisitTypeReference(OTypeReference oTypeReference)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 5
0
 public void VisitTypeReference(OTypeReference oTypeReference)
 {
 }