public void Parse_ArgumentException_Empty() { // Arrange string table = null; // Act & Assert Assert.Throws <ArgumentException>(() => TableInformation.Parse(table)); Assert.Throws <ArgumentException>(() => TableInformation.Parse(table, true)); }
public void Parse_ArgumentException_NotTwoPeriods() { // Arrange var table1 = "Album"; var table2 = "[config.legacy].Album"; // Act & Assert Assert.Throws <ArgumentException>(() => TableInformation.Parse(table1)); Assert.Throws <ArgumentException>(() => TableInformation.Parse(table2)); Assert.Throws <ArgumentException>(() => TableInformation.Parse(table1, true)); Assert.Throws <ArgumentException>(() => TableInformation.Parse(table2, true)); }
public void Parse_OnlyTable_CorrectCreation() { // Arrange var table = "dbo.Album"; // Act var ti = TableInformation.Parse(table); // Assert Assert.AreEqual("dbo", ti.Schema); Assert.AreEqual("Album", ti.Name); Assert.IsTrue(ti.HasPrimaryKey); Assert.AreEqual("dbo.Album", ti.UnsafeFullName); Assert.AreEqual("[dbo].[Album]", ti.SafeFullName); }
public void Parse_TableWithHasPrimaryKey_CorrectCreation() { // Arrange var table = "dbo.Album"; // Act var ti1 = TableInformation.Parse(table, false); var ti2 = TableInformation.Parse(table, true); // Assert Assert.AreEqual("dbo", ti1.Schema); Assert.AreEqual("Album", ti1.Name); Assert.IsFalse(ti1.HasPrimaryKey); Assert.AreEqual("dbo.Album", ti1.UnsafeFullName); Assert.AreEqual("[dbo].[Album]", ti1.SafeFullName); Assert.AreEqual("dbo", ti2.Schema); Assert.AreEqual("Album", ti2.Name); Assert.IsTrue(ti2.HasPrimaryKey); Assert.AreEqual("dbo.Album", ti2.UnsafeFullName); Assert.AreEqual("[dbo].[Album]", ti2.SafeFullName); }
private List <TableInformation> GetTablesFromRepository(DatabaseInfo dbInfo) { if (dbInfo.DatabaseType == DatabaseType.Npgsql) { return(EnvDteHelper.GetNpgsqlTableNames(dbInfo.ConnectionString)); } using (var repository = RepositoryHelper.CreateRepository(dbInfo)) { var allPks = repository.GetAllPrimaryKeys(); var tableList = repository.GetAllTableNamesForExclusion(); var tables = new List <TableInformation>(); foreach (var table in tableList) { var hasPrimaryKey = allPks.Any(m => m.TableName == table); tables.Add(TableInformation.Parse(table, hasPrimaryKey)); } return(tables); } }
public void GenerateServerDgmlFiles() { try { if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var databaseList = EnvDteHelper.GetDataConnections(_package); var psd = new PickServerDatabaseDialog(databaseList, _package, new Dictionary <string, string>()); var diagRes = psd.ShowModal(); if (!diagRes.HasValue || !diagRes.Value) { return; } _package.Dte2.StatusBar.Text = "Loading schema information..."; var dbInfo = psd.SelectedDatabase.Value; if (dbInfo.DatabaseType == DatabaseType.SQLCE35) { EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}"); return; } var ptd = new PickTablesDialog(); using (var repository = RepositoryHelper.CreateRepository(dbInfo)) { var ti = new List <TableInformation>(); var tables = repository.GetAllTableNamesForExclusion(); foreach (var table in tables) { ti.Add(TableInformation.Parse(table)); } ptd.Tables = ti; } var res = ptd.ShowModal(); if (!res.HasValue || !res.Value) { return; } var name = RepositoryHelper.GetClassBasis(dbInfo.ConnectionString, dbInfo.DatabaseType); var path = Path.Combine(Path.GetTempPath(), name + ".schema.dgml"); if (File.Exists(path)) { File.SetAttributes(path, FileAttributes.Normal); } using (var repository = RepositoryHelper.CreateRepository(dbInfo)) { var generator = RepositoryHelper.CreateGenerator(repository, path, dbInfo.DatabaseType); generator.GenerateSchemaGraph(dbInfo.ConnectionString, ptd.Tables.Select(m => m.UnsafeFullName).ToList()); File.SetAttributes(path, FileAttributes.ReadOnly); _package.Dte2.ItemOperations.OpenFile(path); _package.Dte2.ActiveDocument.Activate(); } Telemetry.TrackEvent("PowerTools.GenerateSchemaDgml"); } catch (Exception ex) { _package.LogError(new List <string>(), ex); } }
public void GenerateServerDgmlFiles() { try { if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug) { EnvDteHelper.ShowError("Cannot generate code while debugging"); return; } var databaseList = EnvDteHelper.GetDataConnections(_package); var psd = _package.GetView <IPickServerDatabaseDialog>(); psd.PublishConnections(databaseList.Select(m => new DatabaseConnectionModel { ConnectionName = m.Value.Caption, ConnectionString = m.Value.ConnectionString, DatabaseType = m.Value.DatabaseType })); var pickDataSourceResult = psd.ShowAndAwaitUserResponse(true); if (!pickDataSourceResult.ClosedByOK) { return; } _package.Dte2.StatusBar.Text = "Loading schema information..."; // Reload the database list, in case the user has added a new database in the dialog databaseList = EnvDteHelper.GetDataConnections(_package); DatabaseInfo dbInfo = null; if (pickDataSourceResult.Payload.Connection != null) { dbInfo = databaseList.Single(m => m.Value.ConnectionString == pickDataSourceResult.Payload.Connection?.ConnectionString).Value; } if (dbInfo == null) { // User didn't select a database, should be impossible, though return; } if (dbInfo.DatabaseType == DatabaseType.SQLCE35) { EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}"); return; } var ptd = new PickTablesDialog(); using (var repository = RepositoryHelper.CreateRepository(dbInfo)) { var ti = new List <TableInformation>(); var tables = repository.GetAllTableNamesForExclusion(); foreach (var table in tables) { ti.Add(TableInformation.Parse(table)); } ptd.Tables = ti; } var res = ptd.ShowModal(); if (!res.HasValue || !res.Value) { return; } var name = RepositoryHelper.GetClassBasis(dbInfo.ConnectionString, dbInfo.DatabaseType); var path = Path.Combine(Path.GetTempPath(), name + ".schema.dgml"); if (File.Exists(path)) { File.SetAttributes(path, FileAttributes.Normal); } using (var repository = RepositoryHelper.CreateRepository(dbInfo)) { var generator = RepositoryHelper.CreateGenerator(repository, path, dbInfo.DatabaseType); generator.GenerateSchemaGraph(dbInfo.ConnectionString, ptd.Tables.Select(m => m.UnsafeFullName).ToList()); File.SetAttributes(path, FileAttributes.ReadOnly); _package.Dte2.ItemOperations.OpenFile(path); _package.Dte2.ActiveDocument.Activate(); } Telemetry.TrackEvent("PowerTools.GenerateSchemaDgml"); } catch (Exception ex) { _package.LogError(new List <string>(), ex); } }