#20340: adding checks to infoset migration so it doesn't fail at least with a default installation

Work Item: 20340
This commit is contained in:
Zoltán Lehóczky
2014-01-28 18:02:59 +01:00
parent 3fef4f0275
commit 2bb8f9f7b5
3 changed files with 190 additions and 111 deletions

View File

@@ -36,7 +36,7 @@ namespace Upgrade.Controllers {
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index() {
return View();
}
@@ -49,166 +49,207 @@ namespace Upgrade.Controllers {
var site = _orchardServices.WorkContext.CurrentSite.As<SiteSettingsPart>();
#region SiteSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Settings_SiteSettingsPartRecord"),
(reader, connection) => {
site.HomePage = (string)reader["HomePage"];
site.PageSize = (int)reader["PageSize"];
site.PageTitleSeparator = (string)reader["PageTitleSeparator"];
site.ResourceDebugMode = (ResourceDebugMode)reader["ResourceDebugMode"];
site.SiteCulture = (string)reader["SiteCulture"];
site.SiteName = (string)reader["SiteName"];
site.SiteSalt = (string)reader["SiteSalt"];
site.SiteTimeZone = (string)reader["SiteTimeZone"];
site.SuperUser = (string)reader["SuperUser"];
});
var siteTable = _upgradeService.GetPrefixedTableName("Settings_SiteSettingsPartRecord");
if (_upgradeService.TableExists(siteTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + siteTable,
(reader, connection) => {
site.HomePage = reader["HomePage"] as string;
site.PageSize = (int)reader["PageSize"];
site.PageTitleSeparator = (string)reader["PageTitleSeparator"];
site.ResourceDebugMode = (ResourceDebugMode)Enum.Parse(typeof(ResourceDebugMode), (string)reader["ResourceDebugMode"]);
site.SiteCulture = (string)reader["SiteCulture"];
site.SiteName = (string)reader["SiteName"];
site.SiteSalt = (string)reader["SiteSalt"];
site.SiteTimeZone = (string)reader["SiteTimeZone"];
site.SuperUser = (string)reader["SuperUser"];
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Settings_SiteSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + siteTable, null);
}
#endregion
#region SiteSettings2PartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Settings_SiteSettings2PartRecord"),
(reader, connection) => {
site.BaseUrl = (string)reader["BaseUrl"];
});
var site2Table = _upgradeService.GetPrefixedTableName("Settings_SiteSettings2PartRecord");
if (_upgradeService.TableExists(site2Table)) {
_upgradeService.ExecuteReader("SELECT * FROM " + site2Table,
(reader, connection) => {
site.BaseUrl = (string)reader["BaseUrl"];
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Settings_SiteSettings2PartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + site2Table, null);
}
#endregion
#region ThemeSiteSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Themes_ThemeSiteSettingsPartRecord"),
(reader, connection) => site.As<InfosetPart>().Store("ThemeSiteSettingsPart", "CurrentThemeName", (string)reader["CurrentThemeName"]));
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Themes_ThemeSiteSettingsPartRecord"), null);
var themesTable = _upgradeService.GetPrefixedTableName("Orchard_Themes_ThemeSiteSettingsPartRecord");
if (_upgradeService.TableExists(themesTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + themesTable,
(reader, connection) => site.As<InfosetPart>().Store("ThemeSiteSettingsPart", "CurrentThemeName", (string)reader["CurrentThemeName"]));
_upgradeService.ExecuteReader("DROP TABLE " + themesTable, null);
}
#endregion
#region AkismetSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_AkismetSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("AkismetSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
site.As<InfosetPart>().Store("AkismetSettingsPart", "ApiKey", reader["ApiKey"].ToString());
});
var akismetTable = _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_AkismetSettingsPartRecord");
if (_upgradeService.TableExists(akismetTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + akismetTable,
(reader, connection) => {
site.As<InfosetPart>().Store("AkismetSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
site.As<InfosetPart>().Store("AkismetSettingsPart", "ApiKey", reader["ApiKey"].ToString());
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_AkismetSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + akismetTable, null);
}
#endregion
#region ReCaptchaSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_ReCaptchaSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PublicKey", reader["PublicKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PrivateKey", reader["PrivateKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
var reCaptchaTable = _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_ReCaptchaSettingsPartRecord");
if (_upgradeService.TableExists(reCaptchaTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + reCaptchaTable,
(reader, connection) => {
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PublicKey", reader["PublicKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "PrivateKey", reader["PrivateKey"].ToString());
site.As<InfosetPart>().Store("ReCaptchaSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_ReCaptchaSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + reCaptchaTable, null);
}
#endregion
#region TypePadSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_TypePadSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("TypePadSettingsPart", "ApiKey", reader["ApiKey"].ToString());
site.As<InfosetPart>().Store("TypePadSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
var typePadTable = _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_TypePadSettingsPartRecord");
if (_upgradeService.TableExists(typePadTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + typePadTable,
(reader, connection) => {
site.As<InfosetPart>().Store("TypePadSettingsPart", "ApiKey", reader["ApiKey"].ToString());
site.As<InfosetPart>().Store("TypePadSettingsPart", "TrustAuthenticatedUsers", (bool)reader["TrustAuthenticatedUsers"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_AntiSpam_TypePadSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + typePadTable, null);
}
#endregion
#region CacheSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_OutputCache_CacheSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("CacheSettingsPart", "DefaultCacheDuration", (int)reader["DefaultCacheDuration"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "DefaultMaxAge", (int)reader["DefaultMaxAge"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "VaryQueryStringParameters", (string)reader["VaryQueryStringParameters"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "VaryRequestHeaders", (string)reader["VaryRequestHeaders"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "IgnoredUrls", (string)reader["IgnoredUrls"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "ApplyCulture", (bool)reader["ApplyCulture"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "DebugMode", (bool)reader["DebugMode"]);
});
var cacheTable = _upgradeService.GetPrefixedTableName("Orchard_OutputCache_CacheSettingsPartRecord");
if (_upgradeService.TableExists(cacheTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + cacheTable,
(reader, connection) => {
site.As<InfosetPart>().Store("CacheSettingsPart", "DefaultCacheDuration", (int)reader["DefaultCacheDuration"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "DefaultMaxAge", (int)reader["DefaultMaxAge"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "VaryQueryStringParameters", reader["VaryQueryStringParameters"] as string);
site.As<InfosetPart>().Store("CacheSettingsPart", "VaryRequestHeaders", reader["VaryRequestHeaders"] as string);
site.As<InfosetPart>().Store("CacheSettingsPart", "IgnoredUrls", reader["IgnoredUrls"] as string);
site.As<InfosetPart>().Store("CacheSettingsPart", "ApplyCulture", (bool)reader["ApplyCulture"]);
site.As<InfosetPart>().Store("CacheSettingsPart", "DebugMode", (bool)reader["DebugMode"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + cacheTable, null);
}
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_OutputCache_CacheSettingsPartRecord"), null);
#endregion
#region CommentSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Comments_CommentSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("CommentSettingsPart", "ModerateComments", (bool)reader["ModerateComments"]);
});
var commentsTable = _upgradeService.GetPrefixedTableName("Orchard_Comments_CommentSettingsPartRecord");
if (_upgradeService.TableExists(commentsTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + commentsTable,
(reader, connection) => {
site.As<InfosetPart>().Store("CommentSettingsPart", "ModerateComments", (bool)reader["ModerateComments"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + commentsTable, null);
}
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Comments_CommentSettingsPartRecord"), null);
#endregion
#region MessageSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Messaging_MessageSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("MessageSettingsPart", "DefaultChannelService", (bool)reader["DefaultChannelService"]);
});
var messagesTable = _upgradeService.GetPrefixedTableName("Orchard_Messaging_MessageSettingsPartRecord");
if (_upgradeService.TableExists(messagesTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + messagesTable,
(reader, connection) => {
site.As<InfosetPart>().Store("MessageSettingsPart", "DefaultChannelService", reader["DefaultChannelService"] as string);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Messaging_MessageSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + messagesTable, null);
}
#endregion
#region SearchSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Search_SearchSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("SearchSettingsPart", "SearchedFields", (string)reader["SearchedFields"]);
site.As<InfosetPart>().Store("SearchSettingsPart", "FilterCulture", (bool)reader["FilterCulture"]);
site.As<InfosetPart>().Store("SearchSettingsPart", "SearchIndex", (string)reader["SearchIndex"]);
});
var searchTable = _upgradeService.GetPrefixedTableName("Orchard_Search_SearchSettingsPartRecord");
if (_upgradeService.TableExists(searchTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + searchTable,
(reader, connection) => {
site.As<InfosetPart>().Store("SearchSettingsPart", "SearchedFields", reader["SearchedFields"] as string);
site.As<InfosetPart>().Store("SearchSettingsPart", "FilterCulture", (bool)reader["FilterCulture"]);
site.As<InfosetPart>().Store("SearchSettingsPart", "SearchIndex", reader["SearchIndex"] as string);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Search_SearchSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + searchTable, null);
}
#endregion
#region RegistrationSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Users_RegistrationSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersCanRegister", (bool)reader["UsersCanRegister"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersMustValidateEmail", (bool)reader["UsersMustValidateEmail"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersCanRegister", (bool)reader["UsersCanRegister"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "ValidateEmailRegisteredWebsite", (bool)reader["ValidateEmailRegisteredWebsite"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "ValidateEmailContactEMail", (bool)reader["ValidateEmailContactEMail"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersAreModerated", (bool)reader["UsersAreModerated"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "NotifyModeration", (bool)reader["NotifyModeration"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "NotificationsRecipients", (bool)reader["NotificationsRecipients"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "EnableLostPassword", (bool)reader["EnableLostPassword"]);
});
var registrationTable = _upgradeService.GetPrefixedTableName("Orchard_Users_RegistrationSettingsPartRecord");
if (_upgradeService.TableExists(registrationTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + registrationTable,
(reader, connection) => {
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersCanRegister", (bool)reader["UsersCanRegister"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersMustValidateEmail", (bool)reader["UsersMustValidateEmail"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersCanRegister", (bool)reader["UsersCanRegister"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "ValidateEmailRegisteredWebsite", SafelyConvertFieldToBool(reader["ValidateEmailRegisteredWebsite"]));
site.As<InfosetPart>().Store("RegistrationSettingsPart", "ValidateEmailContactEMail", SafelyConvertFieldToBool(reader["ValidateEmailContactEMail"]));
site.As<InfosetPart>().Store("RegistrationSettingsPart", "UsersAreModerated", (bool)reader["UsersAreModerated"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "NotifyModeration", (bool)reader["NotifyModeration"]);
site.As<InfosetPart>().Store("RegistrationSettingsPart", "NotificationsRecipients", SafelyConvertFieldToBool(reader["NotificationsRecipients"]));
site.As<InfosetPart>().Store("RegistrationSettingsPart", "EnableLostPassword", (bool)reader["EnableLostPassword"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Users_RegistrationSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + registrationTable, null);
}
#endregion
#region SmtpSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Email_SmtpSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("SmtpSettingsPart", "Address", (string)reader["Address"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Host", (string)reader["Host"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Port", (int)reader["Port"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "EnableSsl", (bool)reader["EnableSsl"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "RequireCredentials", (bool)reader["RequireCredentials"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "UserName", (string)reader["UserName"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Password", (string)reader["Password"]);
});
var emailTable = _upgradeService.GetPrefixedTableName("Orchard_Email_SmtpSettingsPartRecord");
if (_upgradeService.TableExists(emailTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + emailTable,
(reader, connection) => {
site.As<InfosetPart>().Store("SmtpSettingsPart", "Address", reader["Address"] as string);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Host", reader["Host"] as string);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Port", (int)reader["Port"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "EnableSsl", (bool)reader["EnableSsl"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "RequireCredentials", (bool)reader["RequireCredentials"]);
site.As<InfosetPart>().Store("SmtpSettingsPart", "UserName", reader["UserName"] as string);
site.As<InfosetPart>().Store("SmtpSettingsPart", "Password", reader["Password"] as string);
});
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Email_SmtpSettingsPartRecord"), null);
_upgradeService.ExecuteReader("DROP TABLE " + emailTable, null);
}
#endregion
#region WarmupSettingsPartRecord
_upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Warmup_WarmupSettingsPartRecord"),
(reader, connection) => {
site.As<InfosetPart>().Store("WarmupSettingsPart", "Urls", (string)reader["Urls"]);
site.As<InfosetPart>().Store("WarmupSettingsPart", "Scheduled", (bool)reader["Scheduled"]);
site.As<InfosetPart>().Store("WarmupSettingsPart", "Delay", (int)reader["Delay"]);
site.As<InfosetPart>().Store("WarmupSettingsPart", "OnPublish", (bool)reader["OnPublish"]);
});
var warmupTable = _upgradeService.GetPrefixedTableName("Orchard_Warmup_WarmupSettingsPartRecord");
if (_upgradeService.TableExists(warmupTable)) {
_upgradeService.ExecuteReader("SELECT * FROM " + warmupTable,
(reader, connection) => {
site.As<InfosetPart>().Store("WarmupSettingsPart", "Urls", reader["Urls"] as string);
site.As<InfosetPart>().Store("WarmupSettingsPart", "Scheduled", (bool)reader["Scheduled"]);
site.As<InfosetPart>().Store("WarmupSettingsPart", "Delay", (int)reader["Delay"]);
site.As<InfosetPart>().Store("WarmupSettingsPart", "OnPublish", (bool)reader["OnPublish"]);
});
_upgradeService.ExecuteReader("DROP TABLE " + warmupTable, null);
}
_upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Warmup_WarmupSettingsPartRecord"), null);
#endregion
// todo: user records
@@ -263,17 +304,17 @@ namespace Upgrade.Controllers {
return new JsonResult { Data = lastContentItemId };
}
[HttpPost]
public JsonResult MigrateContentPermissionsPart(int id) {
if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner))
throw new AuthenticationException("");
var lastContentItemId = id;
_upgradeService.ExecuteReader("SELECT TOP " + BATCH + " * FROM " + _upgradeService.GetPrefixedTableName("Orchard_ContentPermissions_ContentPermissionsPartRecord") + " WHERE Id > " + id,
(reader, connection) => {
lastContentItemId = (int) reader["Id"];
lastContentItemId = (int)reader["Id"];
var contentPermissionPart = _orchardServices.ContentManager.Get(lastContentItemId);
contentPermissionPart.As<InfosetPart>().Store("ContentPermissionsPart", "Enabled", reader["Enabled"].ToString());
@@ -301,7 +342,7 @@ namespace Upgrade.Controllers {
throw new AuthenticationException("");
var lastContentItemId = id;
_upgradeService.ExecuteReader("SELECT TOP " + BATCH + " * FROM " + _upgradeService.GetPrefixedTableName("Orchard_ContentPicker_ContentMenuItemPartRecord") + " WHERE Id > " + id,
(reader, connection) => {
lastContentItemId = (int)reader["Id"];
@@ -319,7 +360,7 @@ namespace Upgrade.Controllers {
throw new AuthenticationException("");
var lastContentItemId = id;
_upgradeService.ExecuteReader("SELECT TOP " + BATCH + " * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Tags_TagsPartRecord") + " WHERE Id > " + id,
(reader, connection) => {
lastContentItemId = (int)reader["Id"];
@@ -330,7 +371,7 @@ namespace Upgrade.Controllers {
+ _upgradeService.GetPrefixedTableName("Orchard_Tags_ContentTagRecord") + " as CTR "
+ " INNER JOIN " + _upgradeService.GetPrefixedTableName("Orchard_Tags_TagRecord") + " as TR "
+ " ON CTR.TagRecord_Id = TR.Id"
+ " WHERE TagsPartRecord_id = " + lastContentItemId, (r, c) => tagNames.Add((string) r["TagName"]));
+ " WHERE TagsPartRecord_id = " + lastContentItemId, (r, c) => tagNames.Add((string)r["TagName"]));
contentPermissionPart.As<InfosetPart>().Store("TagsPart", "CurrentTags", String.Join(",", tagNames));
@@ -455,5 +496,24 @@ namespace Upgrade.Controllers {
return new JsonResult { Data = lastContentItemId };
}
private static bool SafelyConvertFieldToBool(object field) {
if (field == null) {
return false;
}
var stringRepresentation = field.ToString();
if (String.IsNullOrEmpty(stringRepresentation)) {
return false;
}
bool result;
if (bool.TryParse(stringRepresentation, out result)) {
return result;
}
return false;
}
}
}

View File

@@ -7,5 +7,6 @@ namespace Upgrade.Services {
void CopyTable(string fromTableName, string toTableName, string[] ignoreColumns);
void ExecuteReader(string sqlStatement, Action<IDataReader, IDbConnection> action);
string GetPrefixedTableName(string tableName);
bool TableExists(string tableName);
}
}

View File

@@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using NHibernate.Dialect;
using NHibernate.Tool.hbm2ddl;
using Orchard.Data;
using Orchard.Environment.Configuration;
using Orchard.Logging;
@@ -32,7 +35,7 @@ namespace Upgrade.Services {
for (int i = 0; i < reader.FieldCount; i++) {
parameters.Add(reader.GetName(i), reader.GetValue(i));
}
values.Add(parameters);
});
@@ -79,7 +82,7 @@ namespace Upgrade.Services {
command.CommandText = statement;
command.ExecuteNonQuery();
command.ExecuteNonQuery();
}
}
@@ -89,7 +92,7 @@ namespace Upgrade.Services {
var command = session.Connection.CreateCommand();
command.CommandText = string.Format(sqlStatement);
var reader = command.ExecuteReader();
while (reader != null && reader.Read()) {
@@ -115,5 +118,20 @@ namespace Upgrade.Services {
return _shellSettings.DataTablePrefix + "_" + tableName;
}
public bool TableExists(string tableName) {
// While not particularly nice (or fast with many tables) this seems to be a database-agnostic way of checking the existence
// of a table.
var sessionFactory = _sessionFactoryHolder.GetSessionFactory();
var session = sessionFactory.OpenSession();
var connection = session.Connection as DbConnection;
if (connection == null) {
throw new InvalidOperationException("The database connection object should derive from DbConnection to check if a table exists.");
}
return connection.GetSchema("Tables").Rows.Cast<DataRow>().Any(row => row["TABLE_NAME"].ToString() == tableName);
}
}
}