using SyncEngine.Metadata; namespace SyncEngine.Logging { public sealed class SyncStatistics { public int TablesExcluded { get; set; } public int TablesDiscovered { get; set; } public int TablesCreated { get; set; } public int TablesUnchanged { get; set; } public int TablesSchemaUpdated { get; set; } public int TablesIdentityRebuilt { get; set; } public int ColumnsAdded { get; set; } public int ForeignKeysCreated { get; set; } public int ForeignKeysSkipped { get; set; } public int PrimaryKeysCreated { get; set; } public int PrimaryKeysUnchanged { get; set; } public int PrimaryKeysSkipped { get; set; } public int IndexesCreated { get; set; } public int IndexesUnchanged { get; set; } public int IndexesSkipped { get; set; } public int DefaultsCreated { get; set; } public int DefaultsUnchanged { get; set; } public int DefaultsSkipped { get; set; } public int NullabilityTightened { get; set; } public int NullabilitySkipped { get; set; } public int CheckConstraintsCreated { get; set; } public int CheckConstraintsSkipped { get; set; } public int ViewsCreated { get; set; } public int ViewsUpdated { get; set; } public int ViewsSkipped { get; set; } public int TablesProcessed { get; set; } public int TablesSkipped { get; set; } public int RowsInserted { get; set; } public int RowsUpdated { get; set; } public int RowsSoftDeleted { get; set; } public int ProductsUpserted { get; set; } public int ProductsWithdrawn { get; set; } /// Active source rows with a non-blank code that were upsert-checked. public int ProductsProcessed { get; set; } /// Existing MySQL rows with no synced field changes (no write). public int ProductsUnchanged { get; set; } /// Source rows skipped due to blank strCode. public int ProductsSkippedBlankCode { get; set; } public string FormatMySqlLegSummary() { return string.Format( "processed={0} upserted={1} unchanged={2} skipped_blank={3} withdrawn={4}", ProductsProcessed, ProductsUpserted, ProductsUnchanged, ProductsSkippedBlankCode, ProductsWithdrawn); } public SyncRunStats ToRunStats() { return new SyncRunStats { TablesProcessed = TablesProcessed, TablesSkipped = TablesSkipped, RowsInserted = RowsInserted, RowsUpdated = RowsUpdated, RowsSoftDeleted = RowsSoftDeleted }; } public string FormatAccessSqlSummary(bool schemaOnly) { var schema = string.Format( "Schema: discovered={0} created={1} unchanged={2} schemaUpdated={3} identityRebuilt={4} columnsAdded={5} " + "pksCreated={6} pksUnchanged={7} pksSkipped={8} indexesCreated={9} indexesUnchanged={10} indexesSkipped={11} " + "defaultsCreated={12} defaultsUnchanged={13} defaultsSkipped={14} nullTightened={15} nullSkipped={16} " + "checksCreated={17} checksSkipped={18} fksCreated={19} fksSkipped={20} " + "viewsCreated={21} viewsUpdated={22} viewsSkipped={23}", TablesDiscovered, TablesCreated, TablesUnchanged, TablesSchemaUpdated, TablesIdentityRebuilt, ColumnsAdded, PrimaryKeysCreated, PrimaryKeysUnchanged, PrimaryKeysSkipped, IndexesCreated, IndexesUnchanged, IndexesSkipped, DefaultsCreated, DefaultsUnchanged, DefaultsSkipped, NullabilityTightened, NullabilitySkipped, CheckConstraintsCreated, CheckConstraintsSkipped, ForeignKeysCreated, ForeignKeysSkipped, ViewsCreated, ViewsUpdated, ViewsSkipped); if (schemaOnly) { return schema; } return schema + string.Format( " | Data: tablesSynced={0} rowsInserted={1} rowsUpdated={2} rowsSoftDeleted={3}", TablesProcessed, RowsInserted, RowsUpdated, RowsSoftDeleted); } } }