public bool NeedToCreateForeignKeyConstraints(SyncRelation relation) { string tableName = relation.GetTable().TableName; var relationName = NormalizeRelationName(relation.RelationName); bool alreadyOpened = this.connection.State == ConnectionState.Open; try { if (!alreadyOpened) { this.connection.Open(); } var relations = MySqlManagementUtils.RelationsForTable(this.connection, this.transaction, tableName); var foreignKeyExist = relations.Rows.Any(r => string.Equals(r["ForeignKey"].ToString(), relationName, SyncGlobalization.DataSourceStringComparison)); return(!foreignKeyExist); } catch (Exception ex) { Debug.WriteLine($"Error during checking foreign keys: {ex}"); throw; } finally { if (!alreadyOpened && this.connection.State != ConnectionState.Closed) { this.connection.Close(); } } }
public bool NeedToCreateForeignKeyConstraints(DmRelation foreignKey) { string parentTable = foreignKey.ParentTable.TableName; string parentSchema = foreignKey.ParentTable.Schema; string parentFullName = String.IsNullOrEmpty(parentSchema) ? parentTable : $"{parentSchema}.{parentTable}"; bool alreadyOpened = connection.State == ConnectionState.Open; try { if (!alreadyOpened) { connection.Open(); } var dmTable = MySqlManagementUtils.RelationsForTable(connection, transaction, parentFullName); var foreignKeyExist = dmTable.Rows.Any(r => dmTable.IsEqual(r["ForeignKey"].ToString(), foreignKey.RelationName)); return(!foreignKeyExist); } catch (Exception ex) { Debug.WriteLine($"Error during checking foreign keys: {ex}"); throw; } finally { if (!alreadyOpened && connection.State != ConnectionState.Closed) { connection.Close(); } } }
public bool NeedToCreateForeignKeyConstraints(DmRelation foreignKey) { string parentTable = foreignKey.ParentTable.TableName; string parentSchema = foreignKey.ParentTable.Schema; string parentFullName = string.IsNullOrEmpty(parentSchema) ? parentTable : $"{parentSchema}.{parentTable}"; var relationName = NormalizeRelationName(foreignKey.RelationName); bool alreadyOpened = this.connection.State == ConnectionState.Open; // Don't want foreign key on same table since it could be a problem on first // sync. We are not sure that parent row will be inserted in first position if (string.Equals(parentTable, foreignKey.ChildTable.TableName, StringComparison.CurrentCultureIgnoreCase)) { return(false); } try { if (!alreadyOpened) { this.connection.Open(); } var dmTable = MySqlManagementUtils.RelationsForTable(this.connection, this.transaction, parentFullName); var foreignKeyExist = dmTable.Rows.Any(r => dmTable.IsEqual(r["ForeignKey"].ToString(), relationName)); return(!foreignKeyExist); } catch (Exception ex) { Debug.WriteLine($"Error during checking foreign keys: {ex}"); throw; } finally { if (!alreadyOpened && this.connection.State != ConnectionState.Closed) { this.connection.Close(); } } }