Renamed priv_Userinternal into priv_userinternal, and added a check for table names (lowercase is the rule!)

SVN:trunk[2435]
This commit is contained in:
Romain Quetiez
2012-11-21 09:41:53 +00:00
parent 4d85ff60ab
commit bedbc387eb
3 changed files with 24 additions and 1 deletions

View File

@@ -3175,6 +3175,14 @@ abstract class MetaModel
$aSugFix = array();
foreach (self::GetClasses() as $sClass)
{
$sTable = self::DBGetTable($sClass);
$sTableLowercase = strtolower($sTable);
if ($sTableLowercase != $sTable)
{
$aErrors[$sClass][] = "Table name '".$sTable."' has upper case characters. You might encounter issues when moving your installation between Linux and Windows.";
$aSugFix[$sClass][] = "Use '$sTableLowercase' instead. Step 1: If already installed, then rename manually in the DB: RENAME TABLE `$sTable` TO `{$sTableLowercase}_tempname`, `{$sTableLowercase}_tempname` TO `$sTableLowercase`; Step 2: Rename the table in the datamodel and compile the application. Note: the MySQL statement provided in step 1 has been designed to be compatible with Windows or Linux.";
}
$aNameSpec = self::GetNameSpec($sClass);
foreach($aNameSpec[1] as $i => $sAttCode)
{

View File

@@ -282,7 +282,7 @@ abstract class UserInternal extends User
"name_attcode" => "login",
"state_attcode" => "",
"reconc_keys" => array('login'),
"db_table" => "priv_internalUser",
"db_table" => "priv_internaluser",
"db_key_field" => "id",
"db_finalclass_field" => "",
);

View File

@@ -532,6 +532,21 @@ class ApplicationInstaller
$oProductionEnv = new RunTimeEnvironment($sTargetEnvironment);
$oProductionEnv->InitDataModel($oConfig, true); // load data model only
// Migrate application data format
//
// priv_internalUser caused troubles because MySQL transforms table names to lower case under Windows
// This becomes an issue when moving your installation data to/from Windows
// Starting 2.0, all table names must be lowercase
if ($sMode != 'install')
{
SetupPage::log_info("Renaming 'priv_internalUser' into 'priv_internaluser' (lowercase)");
// This command will have no effect under Windows...
// and it has been written in two steps so as to make it work under windows!
$sRepair = "RENAME TABLE `priv_internalUser` TO `priv_internaluser_other`, `priv_internaluser_other` TO `priv_internaluser`";
CMDBSource::SelectDB($sDBName);
CMDBSource::Query($sRepair);
}
// Module specific actions (migrate the data)
//
$aAvailableModules = $oProductionEnv->AnalyzeInstallation(MetaModel::GetConfig(), APPROOT.$sModulesDir);