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); }
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()); } } }