private void GetPrimaryKey(TSqlTable table, DatabaseTable dbTable)
        {
            if (table.PrimaryKeyConstraints.Count() == 0)
            {
                return;
            }

            var pk         = table.PrimaryKeyConstraints.First();
            var primaryKey = new DatabasePrimaryKey
            {
                Name  = pk.Name.HasName ? pk.Name.Parts[1] : null,
                Table = dbTable
            };

            if (!pk.Clustered)
            {
                primaryKey["SqlServer:Clustered"] = false;
            }

            foreach (var pkCol in pk.Columns)
            {
                var dbCol = dbTable.Columns
                            .Single(c => c.Name == pkCol.Name.Parts[2]);

                primaryKey.Columns.Add(dbCol);
            }

            dbTable.PrimaryKey = primaryKey;
        }
Esempio n. 2
0
        /// <summary>
        /// Outputs a table
        /// </summary>
        /// <param name="tbl"></param>
        /// <param name="outputFormat"></param>
        /// <returns></returns>
        private void OutputDiagramTableDef(TSqlTable tbl)
        {
            StringBuilder outputString = new StringBuilder();

            if (format == DiagramFormat.PlantUML)
            {
                // need to string [] from the name
                diagram.AppendFormat("table({0}) {{\n", removeQualifiers(tbl.Name.ToString()));
            }
            else if (format == DiagramFormat.GraphViz)
            {
                diagram.AppendFormat("{0} [label=<\n", removeQualifiers(tbl.Name.ToString()).Replace(".", "_"));
                diagram.AppendLine("\t<table border=\"0\" cellborder=\"1\" cellspacing=\"0\" cellpadding=\"4\">");
                diagram.AppendFormat("\t\t<tr><td bgcolor=\"lightblue\">{0}</td></tr>\n", removeQualifiers(tbl.Name.ToString()));
            }

            OutputDiagramColumns(tbl);

            if (format == DiagramFormat.PlantUML)
            {
                outputString.AppendLine("}\n");
                outputString.AppendLine("");
            }
            else if (format == DiagramFormat.GraphViz)
            {
                outputString.AppendLine("\t</table>");
                outputString.AppendLine(">]\n");
                outputString.AppendLine("");
            }
        }
        private void GetUniqueConstraints(TSqlTable table, DatabaseModel dbModel)
        {
            var dbTable = dbModel.Tables
                          .Single(t => t.Name == table.Name.Parts[1] &&
                                  t.Schema == table.Name.Parts[0]);

            var uqs = table.UniqueConstraints.ToList();

            foreach (var uq in uqs)
            {
                var uniqueConstraint = new DatabaseUniqueConstraint
                {
                    Name  = uq.Name.HasName ? uq.Name.Parts[1] : null,
                    Table = dbTable
                };

                if (uq.Clustered)
                {
                    uniqueConstraint["SqlServer:Clustered"] = true;
                }

                foreach (var uqCol in uq.Columns)
                {
                    var dbCol = dbTable.Columns
                                .Single(c => c.Name == uqCol.Name.Parts[2]);

                    uniqueConstraint.Columns.Add(dbCol);
                }

                dbTable.UniqueConstraints.Add(uniqueConstraint);
            }
        }
Esempio n. 4
0
        private void GetIndexes(TSqlTable table, DatabaseModel dbModel)
        {
            var dbTable = dbModel.Tables
                          .Single(t => t.Name == table.Name.Parts[1] &&
                                  t.Schema == table.Name.Parts[0]);

            var ixs = table.Indexes.ToList();

            foreach (var sqlIx in ixs)
            {
                var ix = sqlIx as TSqlIndex;

                if (sqlIx == null)
                {
                    continue;
                }

                var index = new DatabaseIndex
                {
                    Name     = ix.Name.Parts[2],
                    Table    = dbTable,
                    IsUnique = ix.Unique,
                    Filter   = ix.FilterPredicate
                };

                if (ix.Clustered)
                {
                    index["SqlServer:Clustered"] = true;
                }
                foreach (var column in ix.Columns)
                {
                    var dbCol = dbTable.Columns
                                .SingleOrDefault(c => c.Name == column.Name.Parts[2]);

                    if (dbCol != null)
                    {
                        index.Columns.Add(dbCol);
                    }
                }

                var includedColumns = new List <string>();

                foreach (var includedColumn in ix.IncludedColumns)
                {
                    includedColumns.Add(includedColumn.Name.Parts[2]);
                }

                if (includedColumns.Count != 0)
                {
                    index["SqlServer:Include"] = includedColumns.ToArray();
                }

                if (index.Columns.Count > 0)
                {
                    dbTable.Indexes.Add(index);
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Loops over all
        /// </summary>
        /// <param name="model"></param>
        /// <param name="outputFormat"></param>
        /// <returns></returns>
        private void OutputDiagramSchemaDef()
        {
            var schemas = model.GetObjects <TSqlSchema>(DacQueryScopes.Default);

            //StringBuilder outputstring = new StringBuilder();

            foreach (var schema in schemas)
            {
                if (schema.Name.Parts[0] == "dbo")
                {
                    if (format == DiagramFormat.PlantUML)
                    {
                        diagram.AppendFormat("\npackage {0} {{", schema.Name);
                    }

                    // put tables here
                    var x = schema.GetChildren(DacQueryScopes.UserDefined);


                    foreach (var thing in x)
                    {
                        if (thing.ObjectType == ModelSchema.Table)
                        {
                            var tbl = new TSqlTable(thing);
                            diagram.Append("\n");
                            OutputDiagramTableDef(tbl);
                            diagram.Append("\n");
                        }
                    }

                    //outputstring.Append("}\n");
                }
            }

            schemas = model.GetObjects <TSqlSchema>(DacQueryScopes.UserDefined);
            foreach (var schema in schemas)
            {
                diagram.AppendFormat("\npackage {0} {{", schema.Name);

                // put tables here
                var x = schema.GetChildren(DacQueryScopes.UserDefined);


                foreach (var thing in x)
                {
                    if (thing.ObjectType == ModelSchema.Table)
                    {
                        var tbl = new TSqlTable(thing);
                        diagram.Append("\n");
                        OutputDiagramTableDef(tbl);
                        diagram.Append("\n");
                    }
                }

                diagram.Append("\n}}");
            }
        }
        public void BasicInstantiation()
        {
            using (TSqlModel model = new TSqlModel(SqlServerVersion.Sql120, new TSqlModelOptions()
            {
            }))
            {
                string createTable = @"
CREATE TABLE [dbo].[Table1]
(
	[Id] INT NOT NULL PRIMARY KEY
)
";

                string createCheck = @"
ALTER TABLE [dbo].[Table1]
	ADD CONSTRAINT [check1]
	CHECK (1 > 0)
";

                model.AddObjects(createTable);
                model.AddObjects(createCheck);

                IEnumerable <TSqlObject> tables = model.GetObjects(DacQueryScopes.Default, Table.TypeClass);
                tables.Single().GetReferencing(View.BodyDependencies);

                TSqlTypedModel typedModel = new TSqlTypedModel(model);

                var             genericTables = typedModel.GetObjects <TSqlTable>(DacQueryScopes.Default);
                var             sql90Tables   = typedModel.GetObjects <ISql90TSqlTable>(DacQueryScopes.Default);
                TSqlTable       genericTable  = genericTables.First();
                ISql90TSqlTable sql90Table    = sql90Tables.First();

                IList <TSqlColumn>       genericColumns = genericTable.Columns.ToList();
                IList <ISql90TSqlColumn> sql90Columns   = sql90Table.Columns.ToList();

                Assert.AreEqual(genericColumns.Count, sql90Columns.Count, "Column counts should not be different between implementations");

                // iterate of generic columns
                for (int i = 0; i < genericColumns.Count; i++)
                {
                    TSqlColumn       col      = genericColumns[i];
                    ISql90TSqlColumn sql90Col = sql90Columns[i];
                    Assert.AreEqual(col.Collation, sql90Col.Collation, "Collation is not the same");
                    Assert.AreEqual(col.Expression, sql90Col.Expression, "Expression is not equal");
                }

                Assert.AreEqual(2, genericTable.AllConstraints.Count(), "Incorrect number of constraints");
                Assert.AreEqual(1, genericTable.CheckConstraints.Count(), "Incorrect number of check constraints");
                Assert.AreEqual(1, genericTable.PrimaryKeyConstraints.Count(), "Incorrect number of Primary Key Constraints");

                //TODO: Code gen the Reverse relationships for all explicitly implemented interfaces
                Assert.AreEqual(2, ((TSqlTable)sql90Table).AllConstraints.Count(), "Incorrect number of constraints");
                Assert.AreEqual(1, ((TSqlTable)sql90Table).CheckConstraints.Count(), "Incorrect number of check constraints");
                Assert.AreEqual(1, ((TSqlTable)sql90Table).PrimaryKeyConstraints.Count(), "Incorrect number of Primary Key Constraints");
            }
        }
        private void GetForeignKeys(TSqlTable table, DatabaseModel dbModel)
        {
            var dbTable = dbModel.Tables
                          .Single(t => t.Name == table.Name.Parts[1] &&
                                  t.Schema == table.Name.Parts[0]);

            var fks = table.ForeignKeyConstraints.ToList();

            foreach (var fk in fks)
            {
                var foreignTable = dbModel.Tables
                                   .SingleOrDefault(t => t.Name == fk.ForeignTable.First().Name.Parts[1] &&
                                                    t.Schema == fk.ForeignTable.First().Name.Parts[0]);

                if (foreignTable == null)
                {
                    continue;
                }

                var foreignKey = new DatabaseForeignKey
                {
                    Name           = fk.Name.HasName ? fk.Name.Parts[1] : null,
                    Table          = dbTable,
                    PrincipalTable = foreignTable,
                    OnDelete       = ConvertToReferentialAction(fk.DeleteAction)
                };

                foreach (var fkCol in fk.Columns)
                {
                    var dbCol = dbTable.Columns
                                .Single(c => c.Name == fkCol.Name.Parts[2]);

                    foreignKey.Columns.Add(dbCol);
                }

                foreach (var fkCol in fk.ForeignColumns)
                {
                    var dbCol = foreignTable.Columns
                                .SingleOrDefault(c => c.Name == fkCol.Name.Parts[2]);

                    if (dbCol != null)
                    {
                        foreignKey.PrincipalColumns.Add(dbCol);
                    }
                }

                if (foreignKey.PrincipalColumns.Count > 0)
                {
                    dbTable.ForeignKeys.Add(foreignKey);
                }
            }
        }
Esempio n. 8
0
        private List <ColumnDescriptor> BuildColumnDescriptors(TSqlTable table)
        {
            if (!CanDecodeAllColumns(table))
            {
                //throw new InvalidOperationException
                MessageBox.Show("Unable to work out column types for: " + table.Name.GetSchemaObjectName() +
                                " \r\nIf it has any user defined types then MergeUi doesn't support that right now");

                return(null);
            }

            return(table.Columns.Where(column => column.ColumnType == ColumnType.Column).Select(column => new ColumnDescriptor(column)).ToList());
        }
Esempio n. 9
0
        private IEnumerable <Constraint> BuildConstraints(TSqlTable table)
        {
            var constraints = new List <Constraint>();

            foreach (var c in table.PrimaryKeyConstraints)
            {
                constraints.Add(new Constraint()
                {
                    Name = c.Name, Type = ConstraintType.PrimaryKey
                });
            }


            return(constraints);
        }
Esempio n. 10
0
        private bool CanDecodeAllColumns(TSqlTable table)
        {
            try
            {
                foreach (TSqlColumn column in table.Columns.Where(column => column.ColumnType == ColumnType.Column))
                {
                    if (column.ObjectType == UserDefinedType.TypeClass)
                    {
                    }
                    var descriptor = new ColumnDescriptor(column);
                }
            }
            catch (Exception e)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 11
0
        public ProcedureBuilder(string testSchema, string testName, TSqlTableValuedFunction procedureUnderTest)
        {
            CodeType = CodeType.Function;
            _testProcedure.StatementList = new StatementList();
            foreach (var t in procedureUnderTest.BodyDependencies)
            {
                if (t.ObjectType == ModelSchema.Table)
                {
                    //table to fake
                    var table = new TSqlTable(t.Element);
                    AddTable(table.Name);
                }
            }

            foreach (var p in procedureUnderTest.Parameters)
            {
                AddParameter(p.Name.GetName().UnQuote(), GetParameterType(p.DataType));
            }

            CreateTestProcedureDefinition(testSchema, testName);
            CreateSelectForFunctionUnderTest(procedureUnderTest.Name);
        }
 private void GetColumns(TSqlTable item, DatabaseTable dbTable, IReadOnlyDictionary <string, (string storeType, string typeName)> typeAliases, List <TSqlDefaultConstraint> defaultConstraints)
 private static void GetColumns(TSqlTable item, DatabaseTable dbTable, IReadOnlyDictionary <string, (string StoreType, string TypeName)> typeAliases, List <TSqlDefaultConstraint> defaultConstraints, TSqlTypedModel model)
Esempio n. 14
0
        /// <summary>
        /// Outputs the columns of a table
        /// </summary>
        /// <param name="outputString"></param>
        /// <param name="t"></param>
        /// <param name="outputFormat"></param>
        /// <returns></returns>
        private void  OutputDiagramColumns(TSqlTable t)
        {
            foreach (var Column in t.Columns)
            {
                if (format == DiagramFormat.PlantUML)
                {
                    diagram.AppendFormat("\t{0}:", Column.Name.Parts[2]);
                }
                else if (format == DiagramFormat.GraphViz)
                {
                    diagram.AppendFormat("\t\t<tr><td align=\"left\">{0}:", Column.Name.Parts[2]);
                }

                foreach (var columnDataType in Column.DataType)
                {
                    if (format == DiagramFormat.PlantUML)
                    {
                        diagram.AppendFormat(" {0}", removeQualifiers(columnDataType.Name.ToString()));
                    }
                    else if (format == DiagramFormat.GraphViz)
                    {
                        diagram.AppendFormat("{0}", removeQualifiers(columnDataType.Name.ToString()));
                    }
                }

                //Check to see if the column is a PK
                foreach (var pk in t.PrimaryKeyConstraints)
                {
                    foreach (var primaryKeyColumn in pk.Columns)
                    {
                        if (primaryKeyColumn.Name.Parts[2] == Column.Name.Parts[2])
                        {
                            if (format == DiagramFormat.PlantUML)
                            {
                                diagram.AppendFormat("<<PK>>");
                            }
                            else if (format == DiagramFormat.GraphViz)
                            {
                                diagram.Append("(PK)");
                            }
                        }
                    }
                }

                // Check to see if the column is a FK
                foreach (var fk in t.ForeignKeyConstraints)
                {
                    foreach (var foreignKeyColumn in fk.Columns)
                    {
                        if (foreignKeyColumn.Name.Parts[2] == Column.Name.Parts[2])
                        {
                            if (format == DiagramFormat.PlantUML)
                            {
                                diagram.AppendFormat("<<FK>>");
                            }
                            else if (format == DiagramFormat.GraphViz)
                            {
                                diagram.Append("(FK)");
                            }
                        }
                    }
                }

                if (format == DiagramFormat.PlantUML)
                {
                    diagram.AppendFormat("\n");
                }
                else if (format == DiagramFormat.GraphViz)
                {
                    diagram.AppendFormat("</td></tr>\n");
                }
            }
        }
        public void TSqlStatementExtensions_GetAllTables_TSqlTable_Constructor()
        {
            var tables = new TSqlTable("Person");

            Assert.AreEqual("Person", tables.TableName);
        }
Esempio n. 16
0
 public TableDescriptor(TSqlTable table)
 {
     Columns     = BuildColumnDescriptors(table);
     Name        = table.Name;
     Constraints = BuildConstraints(table);
 }