Пример #1
0
        public override List <ConstraintsTable_11> Resolve(DbContextOracle context, Action <ConstraintsTable_11> action)
        {
            List <ConstraintsTable_11> List = new List <ConstraintsTable_11>();

            this.OracleContext = context;
            var db = context.Database;

            if (action == null)
            {
                action =
                    t =>
                {
                    if (!context.Use(t.SchemaName))
                    {
                        return;
                    }

                    if (t.TABLE_NAME.ExcludIfStartwith(t.SchemaName, Models.Configurations.ExcludeKindEnum.Table))
                    {
                        return;
                    }

                    var c = new ConstraintModel()
                    {
                        Name             = t.CONSTRAINT_NAME,
                        Owner            = t.SchemaName,
                        IndexOwner       = t.INDEX_NAME,
                        IndexName        = t.INDEX_NAME,
                        Type             = t.CONSTRAINT_TYPE,
                        DeleteRule       = t.DELETE_RULE,
                        Generated        = t.GENERATED,
                        Deferrable       = t.DEFERRABLE,
                        Deferred         = t.DEFERRED,
                        Rely             = t.RELY,
                        Search_Condition = Utils.Serialize(t.search_condition, false),
                        ViewRelated      = t.VIEW_RELATED,
                        Invalid          = t.INVALID,
                        Status           = t.Status,
                    };

                    c.Reference.Owner      = t.R_OWNER;
                    c.Reference.Name       = t.R_CONSTRAINT_NAME;
                    c.TableReference.Owner = t.SchemaName;
                    c.TableReference.Name  = t.TABLE_NAME;

                    c.Key = c.BuildKey();
                    if (db.Constraints.TryGet(c.Key, out ConstraintModel c2))
                    {
                        db.Constraints.Remove(c2);
                    }
                    db.Constraints.Add(c);
                }
            }
            ;

            ConstraintDescriptor_11 view = new ConstraintDescriptor_11(context.Manager.ConnectionString);

            sql = string.Format(sql, TableQueryWhereCondition());

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

            return(List);
        }
    }
Пример #2
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);
        }
    }
Пример #3
0
        public override List <ConstraintColumnTable_11> Resolve(DbContextOracle context, Action <ConstraintColumnTable_11> action)
        {
            this.OracleContext = context;
            List <ConstraintColumnTable_11> list = new List <ConstraintColumnTable_11>();
            var db = context.Database;

            if (action == null)
            {
                action = t =>
                {
                    if (!context.Use(t.Owner))
                    {
                        return;
                    }

                    if (t.TableName.ExcludIfStartwith(t.Owner, Models.Configurations.ExcludeKindEnum.Table))
                    {
                        return;
                    }

                    string keyTable = t.Owner + "." + t.TableName;

                    TableModel table;

                    if (db.Tables.TryGet(keyTable, out table))
                    {
                        string keyContraint = t.Owner + "." + t.CONSTRAINT_NAME;

                        var ct = db.Constraints[keyContraint];

                        ct.Columns.Add(new ConstraintColumnModel()
                        {
                            ColumnName = t.ColumnName, Position = t.Position
                        });

                        if (ct.Type.Equals("P"))    // Primary Key check
                        {
                            //table.Columns[t.ColumnName].IsPrimaryKey = true;
                            SetPrimaryKeyColumn(table.Columns, t.ColumnName);
                        }
                        else if (ct.Type.Equals("F")) // Foreign Key check
                        {
                            SetForeignKeyColumn(table.Columns, t.ColumnName);
                        }
                        else
                        {
                        }
                    }
                }
            }
            ;


            ConstraintColumnDescriptor_11 view = new ConstraintColumnDescriptor_11(context.Manager.ConnectionString);

            sql = string.Format(sql, TableQueryWhereCondition());

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

            return(list);
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="columns"></param>
        /// <param name="columnName"></param>
        void SetPrimaryKeyColumn(ColumnCollection columns, string columnName)
        {
            foreach (ColumnModel column in columns)
            {
                if (column.Name == columnName)
                {
                    column.IsPrimaryKey = true;
                    break;
                }
            }
        }

        void SetForeignKeyColumn(ColumnCollection columns, string columnName)
        {
            foreach (ColumnModel column in columns)
            {
                if (column.Name == columnName)
                {
                    column.ForeignKey.IsForeignKey = true;
                    break;
                }
            }
        }
    }
Пример #4
0
        public override List <TypeTable_11> Resolve(DbContextOracle context, Action <TypeTable_11> action)
        {
            var db = context.Database;
            List <TypeTable_11> List = new List <TypeTable_11>();

            this.OracleContext = context;

            if (action == null)
            {
                action =
                    t =>
                {
                    if (!string.IsNullOrEmpty(t.OWNER) && t.TYPE_NAME.ExcludIfStartwith(t.OWNER, Models.Configurations.ExcludeKindEnum.Type))
                    {
                        return;
                    }

                    if (!context.Use(t.OWNER))
                    {
                        return;
                    }

                    string   key = t.OWNER + "." + t.TYPE_NAME;
                    TypeItem type;

                    if (!db.Types.TryGet(key, out type))
                    {
                        string superType = string.Empty;
                        if (!string.IsNullOrEmpty(t.SUPERTYPE_OWNER))
                        {
                            superType += t.SUPERTYPE_OWNER + ".";
                        }
                        if (!string.IsNullOrEmpty(t.SUPERTYPE_NAME))
                        {
                            superType += t.SUPERTYPE_NAME;
                        }

                        type = new TypeItem()
                        {
                            Key                  = key,
                            Name                 = t.TYPE_NAME,
                            SuperType            = superType,
                            Owner                = t.OWNER,
                            TypeCode             = t.TYPECODE,
                            CollectionSchemaName = t.COLLECTIONTYPE,
                            CollectionTypeName   = t.COLLECTIONNAME
                        };
                        db.Types.Add(type);
                    }

                    var p = new PropertyModel()
                    {
                        Name      = !string.IsNullOrEmpty(t.ATTR_NAME) ? Regex.Replace(t.ATTR_NAME, "[^\\w\\._]", "") : string.Empty,
                        Inherited = t.INHERITED,
                        IsNotNull = false,
                    };

                    p.Type.Name = t.ATTR_TYPE_NAME;
                    //p.Type.CsType = TypeMatchExtension.Match(t.ATTR_TYPE_NAME, t.Lenght, t.Precision, 0);
                    p.Type.DataLength    = t.Lenght;
                    p.Type.DataPrecision = t.Precision;

                    type.Properties.Add(p);
                }
            }
            ;


            TypeDescriptor_11 view = new TypeDescriptor_11(context.Manager.ConnectionString);

            sql = string.Format(sql, ProcQueryWhereCondition);

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

            return(List);
        }
    }
        public override List <TableDefaultValueTable_11> Resolve(DbContextOracle context, Action <TableDefaultValueTable_11> action)
        {
            List <TableDefaultValueTable_11> List = new List <TableDefaultValueTable_11>();
            var db = context.Database;

            this.OracleContext = context;

            if (action == null)
            {
                action =
                    t =>
                {
                    if (!context.Use(t.SchemaName))
                    {
                        return;
                    }

                    if (t.TableName.ExcludIfStartwith(t.SchemaName, Models.Configurations.ExcludeKindEnum.Table))
                    {
                        return;
                    }

                    string     key = t.SchemaName + "." + t.TableName;
                    TableModel table;
                    if (db.Tables.TryGet(key, out table))
                    {
                        if (t.DefaultLenght > 0)
                        {
                            if (table != null)
                            {
                                var c = table.Columns.OfType <ColumnModel>().FirstOrDefault(d => d.Name == t.ColumnName);
                                if (c != null)
                                {
                                    var d = t.DefaultValue;
                                    if (d != null)
                                    {
                                        c.Type.DataDefault   = d.ToString()?.Trim();
                                        c.Type.defaultLength = c.Type.DataDefault.Length;

                                        //if (c.Type.DataType.ToUpper().Equals("NUMBER"))
                                        //{
                                        //    Regex digitsOnly = new Regex(@"[^\d]");
                                        //    c.Type.DataDefault = digitsOnly.Replace(d.ToString(), "").PadLeft(c.Type.defaultLength, '0');
                                        //}
                                        //else
                                        //{
                                        //    c.Type.DataDefault = defaultvalue;
                                        //}
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ;


            TableDefaultValueDescriptor_11 view = new TableDefaultValueDescriptor_11(context.Manager.ConnectionString);

            sql = string.Format(sql, TableQueryAndCondition());

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

            return(List);
        }
    }
Пример #6
0
        public override List <SynonymTable_11> Resolve(DbContextOracle context, Action <SynonymTable_11> action)
        {
            List <SynonymTable_11> List = new List <SynonymTable_11>();
            var db = context.Database;

            this.OracleContext = context;

            if (action == null)
            {
                action =
                    t =>
                {
                    if (!context.Use(t.SYNONYME_OWNER))
                    {
                        return;
                    }

                    string key = string.Empty;
                    if (!string.IsNullOrEmpty(t.SYNONYME_OWNER))
                    {
                        key = $"{t.SYNONYME_OWNER}.";
                    }
                    else
                    {
                    }
                    key += $"{t.SYNONYME_NAME}:{t.OBJECT_OWNER}.{t.OBJECT_NAME}:{t.DB_LINK ?? string.Empty}";

                    if (!string.IsNullOrEmpty(t.OBJECT_OWNER))
                    {
                        if (!ContextLoader.excluded.Contains(t.OBJECT_OWNER))
                        {
                            var syn = new SynonymModel()
                            {
                                Key = key,
                                //ObjectType = t.OBJECT_TYPE,
                                ObjectTargetName  = t.OBJECT_NAME,
                                Name              = t.SYNONYME_NAME,
                                ObjectTargetOwner = t.OBJECT_OWNER,
                                Owner             = t.SYNONYME_OWNER,
                                IsPublic          = t.SYNONYME_OWNER.ToUpper() == "PUBLIC",
                                DbLink            = t.DB_LINK ?? string.Empty,
                            };
                            db.Synonyms.Add(syn);
                        }
                    }
                }
            }
            ;


            SynonymDescriptor_11 view = new SynonymDescriptor_11(context.Manager.ConnectionString);

            var c = (TableQueryAndCondition("o", "OBJECT_OWNER")
                     + " OR " + GetQueryCondition("t", "OWNER", "")).Trim().Substring(3);

            sql = string.Format(sql, " WHERE " + c);

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

            return(List);
        }
    }
Пример #7
0
        public override List <ModelObject_11> Resolve(DbContextOracle context, Action <ModelObject_11> action)
        {
            List <ModelObject_11> List = new List <ModelObject_11>();
            var db = context.Database;

            this.OracleContext = context;

            if (action == null)
            {
                action =
                    t =>
                {
                    if (!context.Use(t.Owner))
                    {
                        return;
                    }

                    switch (t.Type)
                    {
                    case "INDEX":
                    case "INDEX PARTITION":
                    case "INDEX SUBPARTITION":
                    case "INDEXTYPE":

                    case "TRIGGER":

                    case "CLUSTER":
                    case "CONSUMER GROUP":
                    case "CONTEXT":
                    case "DATABASE LINK":
                    case "DESTINATION":
                    case "DIRECTORY":
                    case "EDITION":
                    case "EVALUATION CONTEXT":
                    case "JAVA CLASS":
                    case "JAVA DATA":
                    case "JAVA RESOURCE":
                    case "JAVA SOURCE":
                    case "JOB":
                    case "JOB CLASS":
                    case "LIBRARY":
                    case "LOB":
                    case "LOB PARTITION":
                    case "OPERATOR":
                    case "PACKAGE":
                    case "PACKAGE BODY":
                    case "PROGRAM":
                    case "QUEUE":
                    case "RESOURCE PLAN":
                    case "RULE":
                    case "RULE SET":
                    case "SCHEDULE":
                    case "SCHEDULER GROUP":
                    case "SYNONYM":
                    case "TABLE PARTITION":
                    case "TABLE SUBPARTITION":
                    case "TYPE":
                    case "TYPE BODY":
                    case "UNDEFINED":
                    case "WINDOW":
                    case "XML SCHEMA":
                        break;

                    case "FUNCTION":
                        break;
                    //case "SEQUENCE":
                    //    db.Add(new SequenceModel() { SequenceName = t.Name, Name = t.Owner + "." + t.Name, Owner = t.Owner, Comment = t.Comment, Generated = t.GENERATED, Status = t.STATUS, Temporary = t.TEMPORARY, Parsed = true });
                    //    break;

                    case "TABLE":
                        if (!t.Name.ExcludIfStartwith(t.Owner, Models.Configurations.ExcludeKindEnum.Table))
                        {
                            db.Tables.Add(new TableModel()
                            {
                                Key = t.Owner + "." + t.Name, Name = t.Name, Owner = t.Owner, Comment = t.Comment, Generated = t.GENERATED, Status = t.STATUS, Temporary = t.TEMPORARY, Parsed = true
                            });
                        }
                        break;

                    //case "MATERIALIZED VIEW":
                    //    db.Add(new TableModel() { Key = t.Owner + "." + t.Name, Name = t.Name, IsView = true, IsMatrializedView = true, SchemaName = t.Owner, Comment = t.Comment, Generated = t.GENERATED, Status = t.STATUS, Temporary = t.TEMPORARY, Parsed = true });
                    //    break;

                    case "VIEW":
                        if (!t.Name.ExcludIfStartwith(t.Owner, Models.Configurations.ExcludeKindEnum.View))
                        {
                            db.Tables.Add(new TableModel()
                            {
                                Key = t.Owner + "." + t.Name, Name = t.Name, IsView = true, Owner = t.Owner, Comment = t.Comment, Generated = t.GENERATED, Status = t.STATUS, Temporary = t.TEMPORARY, Parsed = true
                            });
                        }
                        break;

                    default:
                        break;
                    }
                }
            }
            ;

            ObjectDescriptor_11 objets = new ObjectDescriptor_11(context.Manager.ConnectionString);

            sql = string.Format(sql, QueryBase.In("TABLE", "VIEW", "SEQUENCE"), TableQueryAndCondition("t", "OWNER"));

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

            return(List);
        }
    }