/// <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); }
/// <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); }
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); } }
public void VisitTypeReference(OTypeReference oTypeReference) { throw new NotImplementedException(); }
public void VisitTypeReference(OTypeReference oTypeReference) { }