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); }
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; }
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; }
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); }
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; }
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; }
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; }