Beispiel #1
0
        public DataRow FillRow(int parentID, DataRow dr)
        {
            dr["id"]                    = dr.Table.Rows.Count;
            dr["parent_id"]             = parentID;
            dr["table_name"]            = TableName.ToLower();
            dr["constraint_name"]       = ConstraintName.ToLower();
            dr["references_table_name"] = ReferencesTableName.ToLower();
            dr["on_delete_action"]      = OnDeleteAction;
            dr["on_update_action"]      = OnUpdateAction;

            return(dr);
        }
Beispiel #2
0
        protected override void fillFromDataSet(DataSet ds, DataRow dr, List <TableInfo> tables)
        {
            TableName           = dr["table_name"].ToString().ToLower();
            ConstraintName      = dr["constraint_name"].ToString().ToLower();
            ReferencesTableName = dr["references_table_name"].ToString().ToLower();
            _tableList          = tables;
            _dsToFillFrom       = ds;
            _drToFillFrom       = dr;

            if (!mapSourceFields(ds, dr))
            {
                // source fields not found yet. means the parent of this constraint is not mapped yet.
                Debug.Write("Constraint " + ConstraintName + " from " + TableName + " to " + ReferencesTableName + " has no source fields as " + ReferencesTableName + " has not been resolved yet.");
                Debug.WriteLine("");
            }

            // make sure the reference table is mapped
            TableInfo target = null;

            if (ReferencesTableName.ToUpper().Trim() == this.TableName.ToUpper().Trim())
            {
                // self-referential
                target = this.Table;
            }
            else
            {
                foreach (TableInfo ti in tables)
                {
                    if (ti.TableName.ToUpper().Trim() == ReferencesTableName.ToUpper().Trim())
                    {
                        // table has already been inspected
                        target = ti;
                        break;
                    }
                }
            }

            if (!tables.Contains(this.Table))
            {
                tables.Add(this.Table);
            }

            this.SchemaName = this.Table.SchemaName;

            if (target == null)
            {
                // the table we are referencing hasn't been inspected yet.
                // do that now.
                DataRow[] drT = ds.Tables["TableInfo"].Select("table_name = '" + ReferencesTableName.ToLower() + "'");
                if (drT == null || drT.Length == 0)
                {
                    throw new InvalidOperationException(getDisplayMember("fillFromDataSet", "Could not find row in TableInfo table for table name={0}", ReferencesTableName.ToLower()));
                }
                else
                {
                    target = TableInfo.GetInstance(this.DataConnectionSpec);
                    target.FillFromDataSet(ds, drT[0], tables);

                    if (!tables.Exists(te => {
                        return(target.TableName.ToUpper().Trim() == te.TableName.ToUpper().Trim());
                    }))
                    {
                        tables.Add(target);
                    }
                }
            }

            ReferencesTable = target;


            DataRow[] drRefFields = ds.Tables["ConstraintReferencesFieldInfo"].Select("parent_id = " + dr["id"]);
            foreach (DataRow drRef in drRefFields)
            {
                DataRow[] drReferenceTableField = ds.Tables["TableFieldInfo"].Select("table_name = '" + ReferencesTableName.ToLower() + "' and field_name = '" + drRef["field_name"].ToString().ToLower() + "'");
                if (drReferenceTableField == null || drReferenceTableField.Length == 0)
                {
                    throw new InvalidOperationException(getDisplayMember("fillFromDataSet{reffield}", "Could not find field '{0}' in table '{1}' that constraint '{2}' in table '{3}' references.", drRef["field_name"].ToString().ToLower(), drRef["table_name"].ToString().ToLower(), this.ConstraintName.ToLower(), this.TableName.ToLower()));
                }
                FieldInfo fi = target.Fields.Find(f => {
                    return(f.Name.ToUpper().Trim() == drRef["field_name"].ToString().ToUpper().Trim());
                });
                if (fi == null)
                {
                    throw new InvalidOperationException(getDisplayMember("fillFromDataSet{reffieldmissing}", "Could not find field named {0} in table {1}", drRef["field_name"].ToString().ToLower(), target.TableName.ToLower()));
                }
                else
                {
                    SourceFields[ReferencesFields.Count].IsForeignKey        = true;
                    SourceFields[ReferencesFields.Count].ForeignKeyTable     = fi.Table;
                    SourceFields[ReferencesFields.Count].ForeignKeyTableName = fi.TableName.ToLower();
                    SourceFields[ReferencesFields.Count].ForeignKeyFieldName = fi.Name.ToLower();
                    ReferencesFields.Add(fi);
                    ReferencesFieldNames.Add(fi.Name.ToLower());
                }
            }
        }