aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Synchronization
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Synchronization')
-rw-r--r--Software/Visual_Studio/Tango.Synchronization/Local/ExtensionMethods.cs2
-rw-r--r--Software/Visual_Studio/Tango.Synchronization/Local/LocalDBComparer.cs27
-rw-r--r--Software/Visual_Studio/Tango.Synchronization/Local/SqliteDataBase.cs8
-rw-r--r--Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs24
4 files changed, 48 insertions, 13 deletions
diff --git a/Software/Visual_Studio/Tango.Synchronization/Local/ExtensionMethods.cs b/Software/Visual_Studio/Tango.Synchronization/Local/ExtensionMethods.cs
index 8746f9146..89b3969e4 100644
--- a/Software/Visual_Studio/Tango.Synchronization/Local/ExtensionMethods.cs
+++ b/Software/Visual_Studio/Tango.Synchronization/Local/ExtensionMethods.cs
@@ -57,7 +57,7 @@ namespace Tango.Synchronization.Local
}
else
{
- if (def.Contains("randomblob") || def.Contains("localtime"))
+ if (def.ToLower().Contains("randomblob") || def.ToLower().Contains("datetime ('now')"))
{
def = def.Insert(0, "(");
def = def.Insert(def.Length - 1, ")");
diff --git a/Software/Visual_Studio/Tango.Synchronization/Local/LocalDBComparer.cs b/Software/Visual_Studio/Tango.Synchronization/Local/LocalDBComparer.cs
index 7883f9cc8..79d3857ad 100644
--- a/Software/Visual_Studio/Tango.Synchronization/Local/LocalDBComparer.cs
+++ b/Software/Visual_Studio/Tango.Synchronization/Local/LocalDBComparer.cs
@@ -72,6 +72,33 @@ namespace Tango.Synchronization.Local
foreach (var masterTable in overwrite_tables)
{
LogManager.Log("Generating table overwrite difference for table " + masterTable.TableName);
+
+ var slaveTable = SlaveSQL.Tables.SingleOrDefault(x => x.TableName == masterTable.TableName); //Get matching slave table on slave db.
+
+ if (slaveTable == null) //Table not found on slave.
+ {
+ LogManager.Log("Table not found on slave, adding difference.");
+ //Clone table from slave db to master db including records!
+ diffs.Add(new Diff(DiffAction.AddTableToSlave, String.Format("Add table {0} to slave", masterTable.TableName), () => SlaveSQL.CloneTableFrom(MasterSQL, masterTable), SlaveSQL.GetCloneTableFromCommand(MasterSQL, masterTable)));
+ continue;
+ }
+
+ foreach (DataColumn masterColumn in masterTable.Columns)
+ {
+ LogManager.Log("Searching for column " + masterColumn.ColumnName + " on slave...");
+
+ var slaveColumn = slaveTable.Columns[masterColumn.ColumnName]; //Get matching slave column on slave table.
+
+ if (slaveColumn == null) //Slave column not found.
+ {
+ LogManager.Log("Column not found on slave, adding difference.");
+ //Add column to slave table.
+ diffs.Add(new Diff(DiffAction.AddColumnToSlave, String.Format("Add column {0} to slave table", masterColumn.ColumnName), () => SlaveSQL.AddColumn(masterTable, masterColumn), SlaveSQL.GetAddColumnCommand(masterTable, masterColumn)));
+ }
+
+ LogManager.Log("Column found.");
+ }
+
diffs.Add(new Diff(DiffAction.ReplaceTableDataInSlave, "Replace all rows on slave table " + masterTable.TableName, () =>
{
diff --git a/Software/Visual_Studio/Tango.Synchronization/Local/SqliteDataBase.cs b/Software/Visual_Studio/Tango.Synchronization/Local/SqliteDataBase.cs
index 6068d5b6c..2596853c6 100644
--- a/Software/Visual_Studio/Tango.Synchronization/Local/SqliteDataBase.cs
+++ b/Software/Visual_Studio/Tango.Synchronization/Local/SqliteDataBase.cs
@@ -247,13 +247,13 @@ namespace Tango.Synchronization.Local
public DataColumn AddColumn(DataTable table, DataColumn column)
{
var insertCommand = _connection.CreateCommand();
- insertCommand.CommandText = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} {3} {4} {5} {6}",
+ insertCommand.CommandText = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} {3} {4} {5}",
table.TableName,
column.ColumnName,
column.GetSQLType(),
table.PrimaryKey.Contains(column) ? "PRIMARY KEY" : null,
column.Unique ? "UNIQUE" : null,
- column.IsNotNull() ? "NOT NULL" : null,
+ //column.IsNotNull() ? "NOT NULL" : null,
column.HasDefaultValue() ? ("DEFAULT " + column.GetDefaultValue()) : null);
@@ -272,13 +272,13 @@ namespace Tango.Synchronization.Local
/// <returns></returns>
public String GetAddColumnCommand(DataTable table, DataColumn column)
{
- String cmd = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} {3} {4} {5} {6}",
+ String cmd = String.Format("ALTER TABLE {0} ADD COLUMN {1} {2} {3} {4} {5}",
table.TableName,
column.ColumnName,
column.GetSQLType(),
table.PrimaryKey.Contains(column) ? "PRIMARY KEY" : null,
column.Unique ? "UNIQUE" : null,
- column.IsNotNull() ? "NOT NULL" : null,
+ //column.IsNotNull() ? "NOT NULL" : null,
column.HasDefaultValue() ? ("DEFAULT " + column.GetDefaultValue()) : null);
return cmd;
diff --git a/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs b/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs
index 514948d57..84103af39 100644
--- a/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs
+++ b/Software/Visual_Studio/Tango.Synchronization/Remote/RemoteDBComparer.cs
@@ -40,7 +40,7 @@ namespace Tango.Synchronization.Remote
LogManager.Log("Querying all local configurations...");
var local_configurations = _localDB.CONFIGURATIONS.ToList();
LogManager.Log("Querying all local configuration dispensers...");
- var local_configurations_dispensers = _localDB.IDS_PACKS.ToList();
+ var local_ids_packs = _localDB.IDS_PACKS.ToList();
LogManager.Log("Querying all local contacts...");
var local_contacts = _localDB.CONTACTS.ToList();
LogManager.Log("Querying all local dispensers...");
@@ -57,6 +57,8 @@ namespace Tango.Synchronization.Remote
var local_users = _localDB.USERS.ToList();
LogManager.Log("Querying all local users roles...");
var local_users_roles = _localDB.USERS_ROLES.ToList();
+ LogManager.Log("Querying all CATS...");
+ var local_cats = _localDB.CATS.ToList();
LogManager.Log("Loading SQL Server database to memory...");
@@ -102,16 +104,20 @@ namespace Tango.Synchronization.Remote
LogManager.Log("Querying all remote configurations dispensers...");
guids = remote_configurations.Select(x => x.GUID).ToList();
- var remote_configurations_dispensers = _remoteDB.IDS_PACKS.Where(x => guids.Contains(x.CONFIGURATION_GUID)).ToList();
+ var remote_ids_packs = _remoteDB.IDS_PACKS.Where(x => guids.Contains(x.CONFIGURATION_GUID)).ToList();
LogManager.Log("Querying all remote dispensers...");
- guids = remote_configurations_dispensers.Select(x => x.DISPENSER_GUID).ToList();
+ guids = remote_ids_packs.Select(x => x.DISPENSER_GUID).ToList();
var remote_dispensers = _remoteDB.DISPENSERS.Where(x => guids.Contains(x.GUID)).ToList();
LogManager.Log("Querying all remote cartridges...");
- guids = remote_configurations_dispensers.Select(x => x.CARTRIDGE_GUID).ToList();
+ guids = remote_ids_packs.Select(x => x.CARTRIDGE_GUID).ToList();
var remote_cartridges = _remoteDB.CARTRIDGES.Where(x => guids.Contains(x.GUID)).ToList();
+ LogManager.Log("Querying all remote CATS...");
+ guids = remote_machines.Select(x => x.GUID).ToList();
+ var remote_cats = _remoteDB.CATS.Where(x => guids.Contains(x.MACHINE_GUID)).ToList();
+
foreach (var config in _remoteDB.SYNC_CONFIGURATIONS.Where(x => (SyncConfiguration)x.SYNC_TYPE == SyncConfiguration.OverwriteLocal))
{
@@ -129,7 +135,7 @@ namespace Tango.Synchronization.Remote
CompareCollections(remote_configurations, local_configurations, _remoteDB.CONFIGURATIONS, _localDB.CONFIGURATIONS);
LogManager.Log("Comparing configurations dispensers");
- CompareCollections(remote_configurations_dispensers, local_configurations_dispensers, _remoteDB.IDS_PACKS, _localDB.IDS_PACKS);
+ CompareCollections(remote_ids_packs, local_ids_packs, _remoteDB.IDS_PACKS, _localDB.IDS_PACKS);
LogManager.Log("Comparing contacts");
CompareCollections(remote_contacts, local_contacts, _remoteDB.CONTACTS, _localDB.CONTACTS);
@@ -155,6 +161,9 @@ namespace Tango.Synchronization.Remote
LogManager.Log("Comparing users roles");
CompareCollections(remote_users_roles, local_users_roles, _remoteDB.USERS_ROLES, _localDB.USERS_ROLES);
+ LogManager.Log("Comparing cats");
+ CompareCollections(remote_cats, local_cats, _remoteDB.CATS, _localDB.CATS);
+
LogManager.Log("Comparison done!");
return _diffs;
@@ -168,12 +177,11 @@ namespace Tango.Synchronization.Remote
private void CopyEntity(Object source, Object destination)
{
- foreach (var prop in source.GetType().GetProperties().Where(x => x.PropertyType.IsPrimitive || x.PropertyType == typeof(String) || x.PropertyType == typeof(DateTime)))
+ foreach (var prop in source.GetType().GetProperties().Where(x => x.PropertyType.IsPrimitive || x.PropertyType == typeof(String) || x.PropertyType == typeof(DateTime) || x.PropertyType == typeof(byte[])))
{
if (destination.GetType().GetProperty(prop.Name) == null)
{
- LogManager.Log(String.Format("Warning: property {0} not found on destination entity {1}!", prop.Name, destination.GetType().Name));
- continue;
+ throw LogManager.Log(new InvalidOperationException(String.Format("Property '{0}' not found on destination table '{1}'.", prop.Name, destination.GetType().Name)));
}
if (prop.PropertyType == typeof(Int64))