Skip to content

Commit

Permalink
Changing MySql Driver from Official MySql.Data to MySqlConnector, whi…
Browse files Browse the repository at this point in the history
…ch is actually .Net Standard compatible !

Changing BLOB type to LONGBLOB to be able to store big blobs :)
  • Loading branch information
Mimetis committed Nov 23, 2017
1 parent 2117d8a commit f2d7487
Show file tree
Hide file tree
Showing 5 changed files with 623 additions and 62 deletions.
14 changes: 8 additions & 6 deletions Projects/Dotmim.Sync.MySql/Builders/MySqlDbMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public override object GetOwnerDbTypeFromDbType(DbType dbType)
case DbType.AnsiStringFixedLength:
return MySqlDbType.LongText;
case DbType.Binary:
return MySqlDbType.Blob;
return MySqlDbType.LongBlob;
case DbType.Boolean:
return MySqlDbType.Bit;
case DbType.Byte:
Expand All @@ -94,7 +94,7 @@ public override object GetOwnerDbTypeFromDbType(DbType dbType)
case DbType.Int64:
return MySqlDbType.Int64;
case DbType.Object:
return MySqlDbType.Blob;
return MySqlDbType.LongBlob;
case DbType.SByte:
return MySqlDbType.Byte;
case DbType.Single:
Expand Down Expand Up @@ -236,7 +236,7 @@ public override string GetStringFromDbType(DbType dbType)
switch (dbType)
{
case DbType.Binary:
mySqlType = "BLOB";
mySqlType = "LONGBLOB";
break;
case DbType.Boolean:
case DbType.Byte:
Expand Down Expand Up @@ -284,7 +284,7 @@ public override string GetStringFromDbType(DbType dbType)
mySqlType = "VARCHAR";
break;
case DbType.Object:
mySqlType = "BLOB";
mySqlType = "LONGBLOB";
break;
}

Expand Down Expand Up @@ -362,9 +362,9 @@ public override string GetStringFromOwnerDbType(object ownerType)
case MySqlDbType.Blob:
return "BLOB";
case MySqlDbType.VarBinary:
return "BLOB";
return "LONGBLOB";
case MySqlDbType.Binary:
return "BLOB";
return "LONGBLOB";
case MySqlDbType.Geometry:
return "GEOMETRY";
}
Expand Down Expand Up @@ -460,6 +460,7 @@ public override bool IsValid(DmColumn columnDefinition)
case "nvarchar":
case "enum":
case "set":
case "blob":
case "longblob":
case "tinyblob":
case "mediumblob":
Expand Down Expand Up @@ -544,6 +545,7 @@ public override DbType ValidateDbType(string typeName, bool isUnsigned, bool isU
case "datetime":
case "newdate":
return DbType.DateTime;
case "blob":
case "longblob":
case "tinyblob":
case "mediumblob":
Expand Down
113 changes: 60 additions & 53 deletions Projects/Dotmim.Sync.MySql/Builders/MySqlScopeInfoBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public long GetLocalTimestamp()
if (!alreadyOpened)
connection.Open();

long result = Convert.ToInt64(command.ExecuteScalar()) ;
long result = Convert.ToInt64(command.ExecuteScalar());

return result;
}
Expand All @@ -159,70 +159,80 @@ public long GetLocalTimestamp()

public ScopeInfo InsertOrUpdateScopeInfo(ScopeInfo scopeInfo)
{
var command = connection.CreateCommand();
if (transaction != null)
command.Transaction = transaction;
bool alreadyOpened = connection.State == ConnectionState.Open;

bool exist;
try
{
if (!alreadyOpened)
connection.Open();

command.CommandText = @"Select count(*) from scope_info where sync_scope_id = @sync_scope_id";

var p = command.CreateParameter();
p.ParameterName = "@sync_scope_id";
p.Value = scopeInfo.Id.ToString();
p.DbType = DbType.String;
command.Parameters.Add(p);
using (var command = connection.CreateCommand())
{
if (transaction != null)
command.Transaction = transaction;

var exist = (long)command.ExecuteScalar() > 0;

string stmtText = exist
? $"Update scope_info set sync_scope_name=@sync_scope_name, scope_timestamp={MySqlObjectNames.TimestampValue}, scope_is_local=@scope_is_local, scope_last_sync=@scope_last_sync where sync_scope_id=@sync_scope_id"
: $"Insert into scope_info (sync_scope_name, scope_timestamp, scope_is_local, scope_last_sync, sync_scope_id) values (@sync_scope_name, {MySqlObjectNames.TimestampValue}, @scope_is_local, @scope_last_sync, @sync_scope_id)";
if (!alreadyOpened)
connection.Open();

command = connection.CreateCommand();
command.CommandText = stmtText;
command.CommandText = @"Select count(*) from scope_info where sync_scope_id = @sync_scope_id";

p = command.CreateParameter();
p.ParameterName = "@sync_scope_name";
p.Value = scopeInfo.Name;
p.DbType = DbType.String;
command.Parameters.Add(p);
var p = command.CreateParameter();
p.ParameterName = "@sync_scope_id";
p.Value = scopeInfo.Id.ToString();
p.DbType = DbType.String;
command.Parameters.Add(p);

p = command.CreateParameter();
p.ParameterName = "@scope_is_local";
p.Value = scopeInfo.IsLocal;
p.DbType = DbType.Boolean;
command.Parameters.Add(p);
exist = (long)command.ExecuteScalar() > 0;

p = command.CreateParameter();
p.ParameterName = "@scope_last_sync";
p.Value = scopeInfo.LastSync.HasValue ? (object)scopeInfo.LastSync.Value : DBNull.Value;
p.DbType = DbType.DateTime;
command.Parameters.Add(p);
}

p = command.CreateParameter();
p.ParameterName = "@sync_scope_id";
p.Value = scopeInfo.Id.ToString();
p.DbType = DbType.String;
command.Parameters.Add(p);
string stmtText = exist
? $"Update scope_info set sync_scope_name=@sync_scope_name, scope_timestamp={MySqlObjectNames.TimestampValue}, scope_is_local=@scope_is_local, scope_last_sync=@scope_last_sync where sync_scope_id=@sync_scope_id"
: $"Insert into scope_info (sync_scope_name, scope_timestamp, scope_is_local, scope_last_sync, sync_scope_id) values (@sync_scope_name, {MySqlObjectNames.TimestampValue}, @scope_is_local, @scope_last_sync, @sync_scope_id)";

using (DbDataReader reader = command.ExecuteReader())
using (var command = connection.CreateCommand())
{
while (reader.Read())
if (transaction != null)
command.Transaction = transaction;

command.CommandText = stmtText;

var p = command.CreateParameter();
p.ParameterName = "@sync_scope_name";
p.Value = scopeInfo.Name;
p.DbType = DbType.String;
command.Parameters.Add(p);

p = command.CreateParameter();
p.ParameterName = "@scope_is_local";
p.Value = scopeInfo.IsLocal;
p.DbType = DbType.Boolean;
command.Parameters.Add(p);

p = command.CreateParameter();
p.ParameterName = "@scope_last_sync";
p.Value = scopeInfo.LastSync.HasValue ? (object)scopeInfo.LastSync.Value : DBNull.Value;
p.DbType = DbType.DateTime;
command.Parameters.Add(p);

p = command.CreateParameter();
p.ParameterName = "@sync_scope_id";
p.Value = scopeInfo.Id.ToString();
p.DbType = DbType.String;
command.Parameters.Add(p);

using (DbDataReader reader = command.ExecuteReader())
{
scopeInfo.Name = reader["sync_scope_name"] as String;
scopeInfo.Id = new Guid((string)reader["sync_scope_id"]);
scopeInfo.LastTimestamp = MySqlManager.ParseTimestamp(reader["scope_timestamp"]);
scopeInfo.IsLocal = (bool)reader["scope_is_local"];
scopeInfo.LastSync = reader["scope_last_sync"] != DBNull.Value ? (DateTime?)reader["scope_last_sync"] : null;
while (reader.Read())
{
scopeInfo.Name = reader["sync_scope_name"] as String;
scopeInfo.Id = new Guid((string)reader["sync_scope_id"]);
scopeInfo.LastTimestamp = MySqlManager.ParseTimestamp(reader["scope_timestamp"]);
scopeInfo.IsLocal = (bool)reader["scope_is_local"];
scopeInfo.LastSync = reader["scope_last_sync"] != DBNull.Value ? (DateTime?)reader["scope_last_sync"] : null;
}
}
}

return scopeInfo;
return scopeInfo;
}
}
catch (Exception ex)
{
Expand All @@ -233,9 +243,6 @@ public ScopeInfo InsertOrUpdateScopeInfo(ScopeInfo scopeInfo)
{
if (!alreadyOpened && connection.State != ConnectionState.Closed)
connection.Close();

if (command != null)
command.Dispose();
}
}

Expand Down
4 changes: 3 additions & 1 deletion Projects/Dotmim.Sync.MySql/Dotmim.Sync.MySql.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ So you must use it on classic .NET Framework ( &gt; 4.5)</Description>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="MySql.Data" Version="6.9.9" />
<PackageReference Include="MySqlConnector">
<Version>0.31.3</Version>
</PackageReference>
</ItemGroup>

<ItemGroup>
Expand Down
Loading

0 comments on commit f2d7487

Please sign in to comment.