Example #1
0
        public override void WriteStructureBeforeData(IDatabaseStructure db)
        {
            using (StreamWriter sw = new StreamWriter(GetWorkingFileName()))
            {
                m_fmt.Writer   = sw;
                m_fmt.Language = Language;
                m_fmt.BeginFile("s_database");
                m_fmt.H2("s_tables");
                foreach (var tbl in db.Tables.SortedByKey <ITableStructure, NameWithSchema>(tbl => tbl.FullName))
                {
                    m_fmt.H3(String.Format("{0} {1}", Texts.LangGet("s_table", m_language), tbl));
                    m_fmt.BeginTable(new TableStyle {
                        Border = 1, WidthPercent = 100
                    });

                    m_fmt.BeginRow(true);
                    m_fmt.HeadingCell("s_name"); m_fmt.HeadingCell("s_type"); m_fmt.HeadingCell("s_nullable");
                    m_fmt.HeadingCell("s_default_value"); m_fmt.HeadingCell("s_keys");
                    m_fmt.EndRow(true);

                    foreach (var col in tbl.Columns)
                    {
                        m_fmt.BeginRow(false);
                        if (col.IsNullable)
                        {
                            m_fmt.Cell(col.ColumnName);
                        }
                        else
                        {
                            m_fmt.BeginCell(false).Bold(col.ColumnName).EndCell(false);
                        }
                        m_fmt.Cell(col.DataType);
                        m_fmt.Cell(col.IsNullable ? "s_yes" : "s_no");
                        m_fmt.Cell(col.DefaultValue.SafeGetSql(Dialect));

                        List <string> keys = new List <string>();
                        foreach (IPrimaryKey pk in tbl.GetConstraints <IPrimaryKey>())
                        {
                            if (pk.Columns.IndexOfIf(c => c.ColumnName == col.ColumnName) >= 0)
                            {
                                keys.Add("PK");
                            }
                        }
                        foreach (IForeignKey fk in tbl.GetConstraints <IForeignKey>())
                        {
                            if (fk.Columns.IndexOfIf(c => c.ColumnName == col.ColumnName) >= 0)
                            {
                                keys.Add("FK->" + fk.PrimaryKeyTable.ToString());
                            }
                        }
                        m_fmt.Cell(keys.CreateDelimitedText(", "));
                        m_fmt.EndRow(false);
                    }
                    m_fmt.EndTable();
                }
                m_fmt.EndFile();
                m_fmt.Writer = null;
            }
        }