private static void WriteSummary(string objectsEntireSkyline, DominatedObjects dominatedObjects) { Debug.WriteLine(objectsEntireSkyline + " objects that dominate other objects: {0}", dominatedObjects.NumberOfObjectsDominatingOtherObjects); Debug.WriteLine(objectsEntireSkyline + " dominated objects: {0}", dominatedObjects.NumberOfDistinctDominatedObjects); Debug.WriteLine(objectsEntireSkyline + " dominated objects multiple: {0}", dominatedObjects.NumberOfDominatedObjectsIncludingDuplicates); Debug.WriteLine(""); }
private static void WriteDominatingObjects(string objectsEntireSkyline, DominatedObjects dominatedObjects) { foreach ( KeyValuePair <long, long> dominatingObject in dominatedObjects.NumberOfObjectsDominatedByEachObjectOrderedByDescCount) { if (dominatingObject.Value > 0) { Debug.WriteLine(objectsEntireSkyline + " object {0:00000} dominates {1:00000} other objects", dominatingObject.Key, dominatingObject.Value); } } }
private void TestForDominatedObjects() { var common = new SQLCommon { SkylineType = new SkylineBNL() { Provider = Helper.ProviderName, ConnectionString = Helper.ConnectionString }, ShowInternalAttributes = true }; DataTable entireSkylineDataTable = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, _entireSkylineSql); int[] skylineAttributeColumns = SkylineSamplingHelper.GetSkylineAttributeColumns(entireSkylineDataTable); DbProviderFactory factory = DbProviderFactories.GetFactory(Helper.ProviderName); // use the factory object to create Data access objects. DbConnection connection = factory.CreateConnection(); // will return the connection object (i.e. SqlConnection ...) connection.ConnectionString = Helper.ConnectionString; var dtEntire = new DataTable(); connection.Open(); DbDataAdapter dap = factory.CreateDataAdapter(); DbCommand selectCommand = connection.CreateCommand(); selectCommand.CommandTimeout = 0; //infinite timeout string strQueryEntire; string operatorsEntire; int numberOfRecordsEntire; string[] parameterEntire; string ansiSqlEntire = common.GetAnsiSqlFromPrefSqlModel( common.GetPrefSqlModelFromPreferenceSql(_entireSkylineSql)); prefSQL.SQLParser.Helper.DetermineParameters(ansiSqlEntire, out parameterEntire, out strQueryEntire, out operatorsEntire, out numberOfRecordsEntire); selectCommand.CommandText = strQueryEntire; dap.SelectCommand = selectCommand; dtEntire = new DataTable(); dap.Fill(dtEntire); for (var ii = 0; ii < skylineAttributeColumns.Length; ii++) { dtEntire.Columns.RemoveAt(0); } DataTable sampleSkylineDataTable = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, _skylineSampleSql); DataTable entireSkylineDataTableBestRank = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, _entireSkylineSqlBestRank.Replace("XXX", sampleSkylineDataTable.Rows.Count.ToString())); DataTable entireSkylineDataTableSumRank = common.ParseAndExecutePrefSQL(Helper.ConnectionString, Helper.ProviderName, _entireSkylineSqlSumRank.Replace("XXX", sampleSkylineDataTable.Rows.Count.ToString())); IReadOnlyDictionary <long, object[]> sampleSkylineDatabase = prefSQL.SQLSkyline.Helper.GetDatabaseAccessibleByUniqueId(sampleSkylineDataTable, 0); IReadOnlyDictionary <long, object[]> entireDatabase = prefSQL.SQLSkyline.Helper.GetDatabaseAccessibleByUniqueId(dtEntire, 0); IReadOnlyDictionary <long, object[]> entireSkylineDatabase = prefSQL.SQLSkyline.Helper.GetDatabaseAccessibleByUniqueId(entireSkylineDataTable, 0); IReadOnlyDictionary <long, object[]> entireSkylineDatabaseBestRank = prefSQL.SQLSkyline.Helper.GetDatabaseAccessibleByUniqueId(entireSkylineDataTableBestRank, 0); IReadOnlyDictionary <long, object[]> entireSkylineDatabaseSumRank = prefSQL.SQLSkyline.Helper.GetDatabaseAccessibleByUniqueId(entireSkylineDataTableSumRank, 0); IReadOnlyDictionary <long, object[]> randomSample = SkylineSamplingHelper.GetRandomSample(entireSkylineDatabase, sampleSkylineDataTable.Rows.Count); var dominatedObjectsEntireSkyline = new DominatedObjects(entireDatabase, entireSkylineDatabase, skylineAttributeColumns); var dominatedObjectsSampleSkyline = new DominatedObjects(entireDatabase, sampleSkylineDatabase, skylineAttributeColumns); var dominatedObjectsEntireSkylineBestRank = new DominatedObjects(entireDatabase, entireSkylineDatabaseBestRank, skylineAttributeColumns); var dominatedObjectsEntireSkylineSumRank = new DominatedObjects(entireDatabase, entireSkylineDatabaseSumRank, skylineAttributeColumns); var dominatedObjectsRandomSample = new DominatedObjects(entireDatabase, randomSample, skylineAttributeColumns); Debug.WriteLine("entire database size: {0}", entireDatabase.Keys.ToList().Count); Debug.WriteLine("entire skyline size: {0}", entireSkylineDataTable.Rows.Count); Debug.WriteLine("sample skyline size: {0}", sampleSkylineDatabase.Keys.ToList().Count); Debug.WriteLine("random skyline size: {0}", randomSample.Keys.ToList().Count); Debug.WriteLine("best skyline size: {0}", entireSkylineDatabaseBestRank.Keys.ToList().Count); Debug.WriteLine("sum skyline size: {0}", entireSkylineDatabaseSumRank.Keys.ToList().Count); Debug.WriteLine(""); Debug.WriteLine(""); WriteSummary("entire", dominatedObjectsEntireSkyline); WriteSummary("sample", dominatedObjectsSampleSkyline); WriteSummary("random", dominatedObjectsRandomSample); WriteSummary("best", dominatedObjectsEntireSkylineBestRank); WriteSummary("sum", dominatedObjectsEntireSkylineSumRank); WriteDominatingObjects("entire", dominatedObjectsEntireSkyline); WriteDominatingObjects("sample", dominatedObjectsSampleSkyline); WriteDominatingObjects("random", dominatedObjectsRandomSample); WriteDominatingObjects("best", dominatedObjectsEntireSkylineBestRank); WriteDominatingObjects("sum", dominatedObjectsEntireSkylineSumRank); }