public virtual void Server_Urn_has_Name_matching_InstanceName()
        {
            var connection = TestContext.GetTestConnection();
            var server     = new Management.Smo.Server(connection);

            Assert.That(server.Urn.Value, Is.EqualTo($"Server[@Name='{Urn.EscapeString(connection.TrueName)}']"), "Server URN");
        }
        /// <summary>
        /// creates a new database with a random name, runs the action, and drops the database
        /// </summary>
        /// <param name="context"></param>
        /// <param name="action"></param>
        /// <param name="preCreateAction"></param>
        public static void ExecuteWithDbDrop(this VisualStudio.TestTools.UnitTesting.TestContext context, Action <Database> action, Action <Database> preCreateAction = null)
        {
            var dbName           = string.Format("{0}{1}", context.TestName, new Random().Next());
            var serverConnection = context.GetTestConnection();
            var server           = new Management.Smo.Server(serverConnection);
            var database         = new Database(server, dbName);

            preCreateAction?.Invoke(database);
            database.Create();
            try
            {
                action(database);
            }
            finally
            {
                try
                {
                    database.Drop();
                }
                catch (Exception e)
                {
                    Trace.TraceError("Unable to drop database {0}: {1}", dbName, e);
                }
            }
        }
示例#3
0
        public void Collection_iteration_is_faster_with_SetDefaultInitFields()
        {
            using (var connectionMetrics = ConnectionMetrics.SetupMeasuredConnection(TestContext, 50))
            {
                var server   = new Management.Smo.Server(connectionMetrics.ServerConnection);
                var database = server.Databases[TestContext.GetTestDatabaseName()];
                connectionMetrics.Reset();
                foreach (Table table in database.Tables)
                {
                    // Accessing FileGroup triggers a query to fetch it
                    Trace.TraceInformation(
                        $"Unoptimized table Name: {table.Name}\tSchema:{table.Schema}\tFileGroup:{table.FileGroup}");
                }

                var unoptimizedMetrics = (QueryCount : connectionMetrics.QueryCount,
                                          BytesSent : connectionMetrics.BytesSent, BytesRead : connectionMetrics.BytesRead,
                                          ConnectionCount : connectionMetrics.ConnectionCount);
                Trace.TraceInformation(string.Join($"{Environment.NewLine}\t", new[]
                {
                    "Unoptimized metrics:",
                    $"QueryCount:{unoptimizedMetrics.QueryCount}", $"ConnectionCount:{unoptimizedMetrics.ConnectionCount}",
                    $"BytesSent:{unoptimizedMetrics.BytesSent}", $"BytesRead:{unoptimizedMetrics.BytesRead}"
                }));

                connectionMetrics.Reset();
                server.SetDefaultInitFields(typeof(Table), "Name", "Schema", "FileGroup");
                database.Tables.Refresh();
                foreach (Table table in database.Tables)
                {
                    // The FileGroup property is already populated, so no extra query is needed
                    Trace.TraceInformation(
                        $"Optimized table Name: {table.Name}\tSchema:{table.Schema}\tFileGroup:{table.FileGroup}");
                }

                var optimizedMetrics = (QueryCount : connectionMetrics.QueryCount,
                                        BytesSent : connectionMetrics.BytesSent, BytesRead : connectionMetrics.BytesRead,
                                        ConnectionCount : connectionMetrics.ConnectionCount);
                Trace.TraceInformation(string.Join($"{Environment.NewLine}\t", new[]
                {
                    "Optimized Metrics:",
                    $"QueryCount:{optimizedMetrics.QueryCount}", $"ConnectionCount:{optimizedMetrics.ConnectionCount}",
                    $"BytesSent:{optimizedMetrics.BytesSent}", $"BytesRead:{optimizedMetrics.BytesRead}"
                }));
                Assert.That(optimizedMetrics.BytesRead, Is.LessThan(unoptimizedMetrics.BytesRead), "BytesRead");
                Assert.That(optimizedMetrics.BytesSent, Is.LessThan(unoptimizedMetrics.BytesSent), "BytesSent");
                Assert.That(optimizedMetrics.ConnectionCount, Is.AtMost(unoptimizedMetrics.ConnectionCount), "ConnectionCount");
                Assert.That(optimizedMetrics.QueryCount, Is.LessThan(unoptimizedMetrics.QueryCount), "QueryCount");
            }
        }
        public virtual void Urn_attribute_values_require_escaping()
        {
            var connection = TestContext.GetTestConnection();
            var server     = new Management.Smo.Server(connection);

            TestContext.ExecuteWithDbDrop((database) =>
            {
                var table = new Table(database, "Name'With'Quotes");
                table.Columns.Add(new Column(table, "col1", DataType.Int));
                table.Create();
                Assert.That(table.Urn.GetNameForType(Table.UrnSuffix), Is.EqualTo("Name'With'Quotes"), "Urn Value");
                Assert.Throws <FailedOperationException>(() =>
                                                         table = (Table)server.GetSmoObject(
                                                             $"Server/Database[@Name='{database.Name}']/Table[@Name='Name'With'Quotes']"));
                table = (Table)server.GetSmoObject(
                    $"Server/Database[@Name='{database.Name}']/Table[@Name='{Urn.EscapeString("Name'With'Quotes")}']");
                Assert.That(table.Name, Is.EqualTo("Name'With'Quotes"), "Table with escaped name");
            });
        }