コード例 #1
0
ファイル: TableRunner.cs プロジェクト: njmube/pgdoc
        internal static void Run(PgTable table)
        {
            string content = FileHelper.ReadResource(TemplatePath);
            List<string> matches = HtmlHelper.GetMatch(content);

            if (matches == null)
            {
                return;
            }

            BuildDocumentation(content, matches, table);
        }
コード例 #2
0
ファイル: ColumnProcessor.cs プロジェクト: njmube/pgdoc
        internal static Collection<PgColumn> GetColumns(PgTable pgTable)
        {
            Collection<PgColumn> columns = new Collection<PgColumn>();

            #region sql

            string sql = FileHelper.ReadSqlResource("columns.sql");

            #endregion

            using (NpgsqlCommand command = new NpgsqlCommand(sql))
            {
                command.Parameters.AddWithValue("@SchemaName", pgTable.SchemaName);
                command.Parameters.AddWithValue("@TableName", pgTable.Name);

                using (DataTable table = DbOperation.GetDataTable(command))
                {
                    if (table.Rows.Count.Equals(0))
                    {
                        return columns;
                    }

                    foreach (DataRow row in table.Rows)
                    {
                        PgColumn column = new PgColumn
                        {
                            SchemaName = pgTable.SchemaName,
                            TableName = pgTable.Name,
                            Name = Conversion.TryCastString(row["column_name"]),
                            OrdinalPosition = Conversion.TryCastInteger(row["ordinal_position"]),
                            DefaultValue = Conversion.TryCastString(row["column_default"]),
                            DataType = Conversion.TryCastString(row["data_type"]),
                            IsNullable = Conversion.TryCastBoolean(row["is_nullable"]),
                            MaxLength = Conversion.TryCastInteger(row["character_maximum_length"]),
                            Description = Conversion.TryCastString(row["description"]),
                            PrimaryKeyConstraintName = Conversion.TryCastString(row["key"]),
                            ForiegnKeyName = Conversion.TryCastString(row["constraint_name"]),
                            ForeignSchemaName = Conversion.TryCastString(row["references_schema"]),
                            ForeignTableName = Conversion.TryCastString(row["references_table"]),
                            ForeignColumnName = Conversion.TryCastString(row["references_field"])
                        };

                        column.IsPrimaryKey = !string.IsNullOrWhiteSpace(column.PrimaryKeyConstraintName);

                        columns.Add(column);
                    }
                }
            }

            return columns;
        }
コード例 #3
0
ファイル: TableTriggerProcessor.cs プロジェクト: njmube/pgdoc
        internal static Collection<PgTableTrigger> GetTriggers(PgTable pgTable)
        {
            Collection<PgTableTrigger> triggers = new Collection<PgTableTrigger>();

            string sql = FileHelper.ReadSqlResource("table-triggers.sql");

            using (NpgsqlCommand command = new NpgsqlCommand(sql))
            {
                command.Parameters.AddWithValue("@SchemaName", pgTable.SchemaName);
                command.Parameters.AddWithValue("@TableName", pgTable.Name);
                using (DataTable table = DbOperation.GetDataTable(command))
                {
                    if (table.Rows.Count > 0)
                    {
                        foreach (DataRow row in table.Rows)
                        {
                            PgTableTrigger trigger = new PgTableTrigger
                            {
                                SchemaName = Conversion.TryCastString(row["trigger_schema"]),
                                Name = Conversion.TryCastString(row["trigger_name"]),
                                TargetTableSchema = pgTable.SchemaName,
                                TargetTableName = pgTable.Name,
                                EventName = Conversion.TryCastString(row["event_manipulation"]),
                                Timing = Conversion.TryCastString(row["action_timing"]),
                                Condition = Conversion.TryCastString(row["action_condition"]),
                                Order = Conversion.TryCastInteger(row["action_order"]),
                                Orientation = Conversion.TryCastString(row["action_orientation"]),
                                TargetFunctionSchema = Conversion.TryCastString(row["target_function_schema"]),
                                TargetFunctionName = Conversion.TryCastString(row["target_function_name"]),
                                TargetFunctionOid = Conversion.TryCastString(row["target_function_oid"]),
                                Description = Conversion.TryCastString(row["description"]),
                            };

                            triggers.Add(trigger);
                        }
                    }
                }
            }

            return triggers;
        }
コード例 #4
0
ファイル: TableRunner.cs プロジェクト: njmube/pgdoc
        private static void BuildDocumentation(string content, List<string> matches, PgTable table)
        {
            table.Columns = ColumnProcessor.GetColumns(table);
            table.Triggers = TableTriggerProcessor.GetTriggers(table);
            table.Indices = IndexProcessor.GetIndices(table);
            table.CheckConstraints = CheckConstraintProcessor.GetCheckConstraints(table);

            content = content.Replace("[DBName]", Program.Database.ToUpperInvariant());
            content = content.Replace("[SchemaName]", table.SchemaName);
            content = content.Replace("[TableName]", table.Name);
            content = content.Replace("[TableComment]", table.Description);

            content = Parsers.ColumnParser.Parse(content, matches, table.Columns);
            content = Parsers.ForeignKeyParser.Parse(content, matches, table.Columns);
            content = Parsers.IndexParser.Parse(content, matches, table.Indices);
            content = Parsers.CheckConstraintParser.Parse(content, matches, table.CheckConstraints);
            content = Parsers.DefaultParser.Parse(content, matches, table.Columns);
            content = Parsers.TriggerParser.Parse(content, matches, table.Triggers);

            string targetPath = System.IO.Path.Combine (OutputPath, table.SchemaName, table.Name + ".html");
            FileHelper.WriteFile(content, targetPath);
        }
コード例 #5
0
ファイル: IndexProcessor.cs プロジェクト: njmube/pgdoc
        internal static Collection<PgIndex> GetIndices(PgTable pgTable)
        {
            Collection<PgIndex> indices = new Collection<PgIndex>();

            string sql = FileHelper.ReadSqlResource("indices.sql");

            using (NpgsqlCommand command = new NpgsqlCommand(sql))
            {
                command.Parameters.AddWithValue("@SchemaName", pgTable.SchemaName);
                command.Parameters.AddWithValue("@TableName", pgTable.Name);
                using (DataTable table = DbOperation.GetDataTable(command))
                {
                    if (table.Rows.Count > 0)
                    {
                        foreach (DataRow row in table.Rows)
                        {
                            PgIndex index = new PgIndex
                            {
                                SchemaName = pgTable.SchemaName,
                                TableName = pgTable.Name,
                                Name = Conversion.TryCastString(row["index_name"]),
                                Owner = Conversion.TryCastString(row["owner"]),
                                Type = Conversion.TryCastString(row["type"]),
                                AccessMethod = Conversion.TryCastString(row["access_method"]),
                                Definition = Conversion.TryCastString(row["definition"]),
                                IsClustered = Conversion.TryCastBoolean(row["is_clustered"]),
                                IsValid = Conversion.TryCastBoolean(row["is_valid"]),
                                Description = Conversion.TryCastString(row["description"])
                            };

                            indices.Add(index);
                        }
                    }
                }
            }

            return indices;
        }
コード例 #6
0
        internal static Collection<PgCheckConstraint> GetCheckConstraints(PgTable pgTable)
        {
            Collection<PgCheckConstraint> constraints = new Collection<PgCheckConstraint>();

            string sql = FileHelper.ReadSqlResource("check-constraints.sql");

            using (NpgsqlCommand command = new NpgsqlCommand(sql))
            {
                command.Parameters.AddWithValue("@SchemaName", pgTable.SchemaName);
                command.Parameters.AddWithValue("@TableName", pgTable.Name);
                using (DataTable table = DbOperation.GetDataTable(command))
                {
                    if (table.Rows.Count > 0)
                    {
                        foreach (DataRow row in table.Rows)
                        {
                            PgCheckConstraint constraint = new PgCheckConstraint
                            {
                                SchemaName = pgTable.SchemaName,
                                TableName = pgTable.Name,
                                Name = Conversion.TryCastString(row["constraint_name"]),
                                Definition = Conversion.TryCastString(row["definition"]),
                                Description = Conversion.TryCastString(row["description"]),
                                Deferrable = Conversion.TryCastBoolean(row["deferrable"]),
                                Deferred = Conversion.TryCastBoolean(row["deferred"]),
                                IsLocal = Conversion.TryCastBoolean(row["is_local"]),
                                NoInherit = Conversion.TryCastBoolean(row["no_inherit"])
                            };

                            constraints.Add(constraint);
                        }
                    }
                }
            }

            return constraints;
        }
コード例 #7
0
ファイル: TableProcessor.cs プロジェクト: njmube/pgdoc
        private static Collection<PgTable> GetTables(DataTable table)
        {
            Collection<PgTable> pgTables = new Collection<PgTable>();

            if (table.Rows.Count > 0)
            {
                foreach (DataRow row in table.Rows)
                {
                    PgTable pgTable = new PgTable
                    {
                        RowNumber = Conversion.TryCastLong(row["row_number"]),
                        Name = Conversion.TryCastString(row["object_name"]),
                        SchemaName = Conversion.TryCastString(row["object_schema"]),
                        Tablespace = Conversion.TryCastString(row["tablespace"]),
                        Owner = Conversion.TryCastString(row["owner"]),
                        Description = Conversion.TryCastString(row["description"])
                    };

                    pgTables.Add(pgTable);
                }
            }

            return pgTables;
        }