コード例 #1
0
        public void DeserializeMultiDbConfigurationTest_WithQueryRowDataItems()
        {
            string fileName = Path.GetTempFileName();

            try
            {
                string fileContents = Properties.Resources.MultiDb_WithQueryRowData;
                File.WriteAllText(fileName, fileContents);
                MultiDbData actual;
                actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName);
                actual.IsTransactional = false;

                Assert.AreEqual(@"Server1\Instance_1", actual[0].ServerName);

                Assert.AreEqual(@"Server2\Instance_1", actual[1].ServerName);
                DbOverrideSequence seq = actual[1].OverrideSequence;
                Assert.AreEqual("Default", seq["1"][0].DefaultDbTarget);
                Assert.AreEqual("Db_0002", seq["1"][0].OverrideDbTarget);

                List <QueryRowItem> queryItems = seq["1"][0].QueryRowData;
                Assert.AreEqual("MyCompany2", queryItems[0].Value);
                Assert.AreEqual("CompanyName", queryItems[0].ColumnName);
                Assert.AreEqual("CompanyID", queryItems[1].ColumnName);
                Assert.AreEqual("000002", queryItems[1].Value);

                Assert.IsFalse(actual.IsTransactional);
            }
            finally
            {
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
            }
        }
コード例 #2
0
        public void DeserializeMultiDbConfigurationTest_EmptyFileName()
        {
            string      fileName = string.Empty;
            MultiDbData expected = null;
            MultiDbData actual;

            actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName);
            Assert.AreEqual(expected, actual);
        }
コード例 #3
0
        public void DeserializeMultiDbConfigurationTest_ReadFile()
        {
            string fileName = Path.GetTempFileName();

            try
            {
                string fileContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                fileContents += "<ArrayOfServerData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
                fileContents += @"
  <ServerData>
    <ServerName>(local)</ServerName>
    <OverrideSequence>
      <item>
        <key>
          <string>1</string>
        </key>
        <value>
          <ArrayOfDatabaseOverride>
            <DatabaseOverride>
              <DefaultDbTarget>SqlBuildTest</DefaultDbTarget>
              <OverrideDbTarget>master</OverrideDbTarget>
            </DatabaseOverride>
          </ArrayOfDatabaseOverride>
        </value>
      </item>
    </OverrideSequence>
  </ServerData>
</ArrayOfServerData>";
                File.WriteAllText(fileName, fileContents);
                MultiDbData actual;
                actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName);
                actual.IsTransactional = false;

                Assert.AreEqual(actual[0].ServerName, "(local)");
                DbOverrideSequence seq = actual[0].OverrideSequence;
                Assert.AreEqual(seq["1"][0].DefaultDbTarget, "SqlBuildTest");
                Assert.AreEqual(seq["1"][0].OverrideDbTarget, "master");
                Assert.IsFalse(actual.IsTransactional);
            }
            finally
            {
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Accepts a Multi-Database configuration file, processes it and outputs a populated MultiDbData object
        /// </summary>
        /// <param name="multiDbOverrideSettingFileName">Valid Multi-database file (.multiDb, .multiDbQ, .cfg)</param>
        /// <param name="multiData">Out parameter of populated MultiDbData object</param>
        /// <param name="errorMessages">Out parameter or error messages (if any)</param>
        /// <returns>Zero (0) if no errors, otherwise an error code</returns>
        public static int ValidateAndLoadMultiDbData(string multiDbOverrideSettingFileName, CommandLineArgs cmdLine, out MultiDbData multiData, out string[] errorMessages)
        {
            log.LogInformation("Validating target database settings");
            string message = string.Empty;
            string error;

            errorMessages = new string[0];
            multiData     = null;
            string extension = Path.GetExtension(multiDbOverrideSettingFileName).ToLowerInvariant();

            switch (extension)
            {
            case ".multidb":
                multiData = MultiDbHelper.DeserializeMultiDbConfiguration(multiDbOverrideSettingFileName);
                break;

            case ".multidbq":
                multiData = MultiDbHelper.CreateMultiDbConfigFromQueryFile(multiDbOverrideSettingFileName, out message);
                break;

            case ".sql":
                if (cmdLine != null)
                {
                    ConnectionData connData = new ConnectionData()
                    {
                        DatabaseName       = cmdLine.Database,
                        SQLServerName      = cmdLine.Server,
                        UserId             = cmdLine.AuthenticationArgs.UserName,
                        Password           = cmdLine.AuthenticationArgs.Password,
                        AuthenticationType = cmdLine.AuthenticationArgs.AuthenticationType
                    };
                    multiData = MultiDbHelper.CreateMultiDbConfigFromQuery(connData, File.ReadAllText(cmdLine.MultiDbRunConfigFileName), out message);
                }
                break;

            case ".cfg":
            default:
                multiData = MultiDbHelper.ImportMultiDbTextConfig(multiDbOverrideSettingFileName);
                break;
            }
            //if (multiDbOverrideSettingFileName.EndsWith(".multidb", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.DeserializeMultiDbConfiguration(multiDbOverrideSettingFileName);
            //else if (multiDbOverrideSettingFileName.EndsWith(".multidbq", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.CreateMultiDbConfigFromQueryFile(multiDbOverrideSettingFileName, out message);
            //else if (multiDbOverrideSettingFileName.EndsWith(".cfg", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.ImportMultiDbTextConfig(multiDbOverrideSettingFileName);


            if (multiData == null || multiData.Count() == 0)
            {
                error         = "Unable to read in configuration file " + multiDbOverrideSettingFileName + ((message.Length > 0) ? " :: " + message : "");
                errorMessages = new string[] { error, "Returning error code: " + (int)ExecutionReturn.NullMultiDbConfig };
                log.LogError(error);
                return((int)ExecutionReturn.NullMultiDbConfig);
            }

            if (!MultiDbHelper.ValidateMultiDatabaseData(multiData))
            {
                error         = "One or more scripts is missing a default or target override database setting. Run has been halted. Please correct the error and try again";
                errorMessages = new string[] { error, "Returning error code: " + (int)ExecutionReturn.MissingTargetDbOverrideSetting };
                log.LogError(error);
                return((int)ExecutionReturn.MissingTargetDbOverrideSetting);
            }
            return(0);
        }