Thread: [pgsqlclient-checkins] pgsqlclient_10/source/PostgreSql/Data/DbSchema PgAggregatesSchema.cs,NONE,1.1
Status: Inactive
Brought to you by:
carlosga_fb
Update of /cvsroot/pgsqlclient/pgsqlclient_10/source/PostgreSql/Data/DbSchema In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6002 Added Files: PgAggregatesSchema.cs PgCastsSchema.cs PgCheckConstraints.cs PgCheckConstraintsByTable.cs PgColumnsSchema.cs PgDatabaseSchema.cs PgDbSchema.cs PgDbSchemaFactory.cs PgDomainsSchema.cs PgForeignKeysSchema.cs PgFunctionPrivilegesSchema.cs PgFunctionsSchema.cs PgGroupsSchema.cs PgIndexesSchema.cs PgPrimaryKeysSchema.cs PgProviderTypesSchema.cs PgSchemataSchema.cs PgSqlLanguagesSchema.cs PgTableConstraintsSchema.cs PgTablePrivilegesSchema.cs PgTablesSchema.cs PgTableStatisticsSchema.cs PgTriggersSchema.cs PgUsersSchema.cs PgViewPrivilegesSchema.cs PgViewsSchema.cs Log Message: Started the reorganization of the CVS module --- NEW FILE: PgCastsSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgCastsSchema : PgDbSchema { #region · Constructors · public PgCastsSchema() : base("Casts") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_cast"); } public override void AddRestrictionColumns() { } public override void AddDataColumns() { AddDataColumn("pg_typesrc.typname" , "SOURCE_TYPE"); AddDataColumn("pg_typetgt.typname" , "TARGET_TYPE"); AddDataColumn("pg_namespace.nspname", "FUNCTION_SCHEMA"); AddDataColumn("pg_proc.proname" , "FUNCTION_NAME"); AddDataColumn(this.GetContextExpression("pg_cast.castcontext"), "CAST_CONTEXT"); } public override void AddJoins() { AddJoin("left join", "pg_type as pg_typesrc", "pg_cast.castsource = pg_typesrc.oid"); AddJoin("left join", "pg_type as pg_typetgt", "pg_cast.casttarget = pg_typetgt.oid"); AddJoin("left join", "pg_proc" , "pg_cast.castfunc = pg_proc.oid"); AddJoin("left join", "pg_namespace" , "pg_proc.pronamespace = pg_namespace.oid"); } public override void AddOrderByColumns() { AddOrderBy("pg_proc.proname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion #region · Private Methods · private string GetContextExpression(string fieldName) { StringBuilder expression = new StringBuilder(); expression.AppendFormat(" case {0} ", fieldName); expression.Append(" when 'e' THEN 'EXPLICIT'"); expression.Append(" when 'a' THEN 'ASSIGNMENT'"); expression.Append(" when 'i' THEN 'EXPRESSIONS'"); expression.Append(" END "); return expression.ToString(); } #endregion } } --- NEW FILE: PgTriggersSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgTriggersSchema : PgDbSchema { #region · Constructors · public PgTriggersSchema() : base("Triggers") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_trigger"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "TRIGGER_SCHEMA", null); AddRestrictionColumn("pg_proc.proname" , "TRIGGER_NAME", null); AddRestrictionColumn("pg_class.relnamespace", "TABLE_SCHEMA", null); AddRestrictionColumn("pg_class.relname" , "TABLE_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_language.lanname" , "PROCEDURE_LANGUAGE"); AddDataColumn("pg_proc.proisagg" , "IS_AGGREGATE"); AddDataColumn("pg_proc.prosecdef" , "IS_SECURITY_DEFINER"); AddDataColumn("pg_proc.proisstrict" , "IS_STRICT"); AddDataColumn("pg_proc.proretset" , "RETURNS_SET"); } public override void AddJoins() { AddJoin("left join", "pg_class" , "pg_trigger.tgconstrrelid = pg_class.oid"); AddJoin("left join", "pg_proc" , "pg_trigger.tgfoid = pg_proc.oid"); AddJoin("left join", "pg_namespace" , "pg_proc.pronamespace = pg_namespace.oid"); AddJoin("left join", "pg_language" , "pg_proc.prolang = pg_language.oid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_proc.proname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion } } --- NEW FILE: PgProviderTypesSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgProviderTypesSchema : PgDbSchema { #region · Constructors · public PgProviderTypesSchema() : base("ProviderTypes") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_type"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname", "TYPE_SCHEMA", null); AddRestrictionColumn("pg_type.typname", "TYPE_NAME", null); AddRestrictionColumn("pg_type.oid", "DATA_TYPE", null); } public override void AddDataColumns() { AddDataColumn("pg_type.typlen", "COLUMN_SIZE"); AddDataColumn("pg_type.typnotnull", "IS_NOT_NULL"); AddDataColumn("pg_type.typndims", "ARRAY_DIMENSIONS"); AddDataColumn("pg_type.typelem", "ELEMENT_TYPE"); AddDataColumn("pg_type.typbasetype", "BASE_TYPE"); AddDataColumn("pg_type.typtypmod", "BASE_TYPE_MODIFIER"); AddDataColumn("pg_description.description", "DESCRIPTION"); } public override void AddJoins() { AddJoin("left join", "pg_namespace", "pg_type.typnamespace = pg_namespace.oid"); AddJoin("left join", "pg_description", "pg_type.oid = pg_description.objoid"); } public override void AddOrderByColumns() { AddOrderBy("pg_type.typname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion } } --- NEW FILE: PgIndexesSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgIndexesSchema : PgDbSchema { #region · Constructors · public PgIndexesSchema() : base("Indexes") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_index"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "TABLE_SCHEMA", null); AddRestrictionColumn("pg_class.relname" , "TABLE_NAME", null); AddRestrictionColumn("pg_classidx.relname" , "INDEX_NAME", null); } public override void AddDataColumns() { AddDataColumn("Pgnamespidx.nspname" , "INDEX_SCHEMA"); AddDataColumn("pg_am.amname" , "TYPE"); AddDataColumn("pg_index.indkey" , "INDEX_KEY"); AddDataColumn("pg_index.indisclustered" , "CLUSTERED"); AddDataColumn("pg_index.indisunique" , "UNIQUE"); AddDataColumn("pg_index.indisprimary" , "PRIMARY"); AddDataColumn("pg_am.amindexnulls" , "ALLOW_NULLS"); AddDataColumn("pg_am.amcanmulticol" , "MULTICOLUMN"); AddDataColumn("pg_am.amconcurrent" , "CONCURRENT"); AddDataColumn("pg_description.description", "DESCRIPTION"); } public override void AddJoins() { AddJoin("left join", "pg_class", "pg_index.indrelid = pg_class.oid"); AddJoin("left join", "pg_class as pg_classidx", "pg_index.indexrelid = pg_classidx.oid"); AddJoin("left join", "pg_namespace", "pg_classidx.relnamespace = pg_namespace.oid"); AddJoin("left join", "pg_namespace as Pgnamespidx", "pg_classidx.relnamespace = Pgnamespidx.oid"); AddJoin("left join", "pg_am", "pg_classidx.relam = pg_am.oid"); AddJoin("left join", "pg_description", "pg_index.indexrelid = pg_description.objoid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_class.relname"); AddOrderBy("pg_classidx.relname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion } } --- NEW FILE: PgTablePrivilegesSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; using System.Text.RegularExpressions; namespace PostgreSql.Data.DbSchema { internal class PgTablePrivilegesSchema : PgDbSchema { #region · Constructors · public PgTablePrivilegesSchema() : base("Table_Privileges") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_class"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "TABLE_SCHEMA", null); AddRestrictionColumn("pg_class.relname" , "TABLE_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_class.relacl", "PRIVILEGES"); } public override void AddJoins() { AddJoin("left join", "pg_namespace", "pg_class.relnamespace = pg_namespace.oid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_class.relname"); } public override void AddWhereFilters() { AddWhereFilter("pg_class.relkind = 'r'"); } #endregion #region · Overriden Methods · public override DataTable GetSchema(PgConnection connection, string[] restrictions) { DataTable tablesSchema= base.GetSchema(connection, restrictions); DataTable privileges = this.GetPrivilegesDataTable(); privileges.BeginLoadData(); foreach (DataRow row in tablesSchema.Rows) { if (row["PRIVILEGES"] != System.DBNull.Value) { PgPrivilege[] priv = DecodePrivileges((string[])row["PRIVILEGES"]); for (int i = 0; i < priv.Length; i++) { DataRow newRow = privileges.NewRow(); newRow["TABLE_SCHEMA"] = row["TABLE_SCHEMA"]; newRow["TABLE_NAME"] = row["TABLE_NAME"]; newRow["USER_NAME"] = priv[i].User; FillPrivileges(newRow, priv[i].Privileges); privileges.Rows.Add(newRow); } } } privileges.EndLoadData(); return privileges; } private DataTable GetPrivilegesDataTable() { DataTable privileges = new DataTable("Table_Privileges"); privileges.BeginInit(); privileges.Columns.Add("TABLE_SCHEMA", Type.GetType("System.String")); privileges.Columns.Add("TABLE_NAME", Type.GetType("System.String")); privileges.Columns.Add("USER_NAME", Type.GetType("System.String")); AddPrivilegesColumns(privileges); privileges.EndInit(); return privileges; } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { return restrictions; } #endregion } } --- NEW FILE: PgFunctionPrivilegesSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgFunctionPrivilegesSchema : PgDbSchema { #region · Constructors · public PgFunctionPrivilegesSchema() : base("Function_Privileges") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_proc"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "FUNCTION_SCHEMA", null); AddRestrictionColumn("pg_proc.proname" , "FUNCTION_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_proc.proacl", "PRIVILEGES"); } public override void AddJoins() { AddJoin("left join", "pg_namespace" , "pg_proc.pronamespace = pg_namespace.oid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_proc.proname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion #region · Overriden Methods · public override DataTable GetSchema(PgConnection connection, string[] restrictions) { DataTable functionsSchema = base.GetSchema(connection, restrictions); DataTable privileges = this.GetPrivilegesDataTable(); privileges.BeginLoadData(); foreach (DataRow row in functionsSchema.Rows) { if (row["PRIVILEGES"] != System.DBNull.Value) { PgPrivilege[] priv = this.DecodePrivileges((string[])row["PRIVILEGES"]); for (int i = 0; i < priv.Length; i++) { DataRow newRow = privileges.NewRow(); newRow["FUNCTION_SCHEMA"] = row["FUNCTION_SCHEMA"]; newRow["FUNCTION_NAME"] = row["FUNCTION_NAME"]; newRow["USER_NAME"] = priv[i].User; this.FillPrivileges(newRow, priv[i].Privileges); privileges.Rows.Add(newRow); } } } privileges.EndLoadData(); return privileges; } private DataTable GetPrivilegesDataTable() { DataTable privileges = new DataTable("Function_Privileges"); privileges.BeginInit(); privileges.Columns.Add("FUNCTION_SCHEMA", Type.GetType("System.String")); privileges.Columns.Add("FUNCTION_NAME" , Type.GetType("System.String")); privileges.Columns.Add("USER_NAME" , Type.GetType("System.String")); this.AddPrivilegesColumns(privileges); privileges.EndInit(); return privileges; } #endregion #region · Private Methods · private string GetVolatileExpression(string fieldName) { StringBuilder expression = new StringBuilder(); expression.AppendFormat(" case {0} ", fieldName); expression.Append(" when 'i' THEN 'INMUTABLE'"); expression.Append(" when 's' THEN 'STABLE'"); expression.Append(" when 'v' THEN 'VOLATILE'"); expression.Append(" END "); return expression.ToString(); } #endregion } } --- NEW FILE: PgUsersSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgUsersSchema : PgDbSchema { #region · Constructors · public PgUsersSchema() : base("Users") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_shadow"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_shadow.usename", "USER_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_shadow.usecreatedb", "CREATE_DATABASE"); AddDataColumn("pg_shadow.usesuper", "IS_SUPERUSER"); AddDataColumn("pg_shadow.usecatupd", "UPDATE_SYSCATALOGS"); AddDataColumn("pg_shadow.passwd", "PASSWORD"); AddDataColumn("pg_shadow.useconfig", "CONFIGURATION"); } public override void AddJoins() { } public override void AddOrderByColumns() { AddOrderBy("pg_shadow.usename"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion } } --- NEW FILE: PgForeignKeysSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgForeignKeysSchema : PgDbSchema { #region · Constructors · public PgForeignKeysSchema() : base("ForeignKeys") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_constraint"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "PK_TABLE_SCHEMA", null); AddRestrictionColumn("pk_table.relname" , "PK_TABLE_NAME", null); AddRestrictionColumn("pg_namespace.nspname" , "FK_TABLE_SCHEMA", null); AddRestrictionColumn("fk_table.relname" , "FK_TABLE_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_constraint.conkey" , "PK_COLUMNS"); AddDataColumn("pg_constraint.confkey" , "FK_COLUMNS"); AddDataColumn(this.GetRuleExpression("pg_constraint.confupdtype"), "UPDATE_RULE"); AddDataColumn(this.GetRuleExpression("pg_constraint.confdeltype"), "DELETE_RULE"); AddDataColumn("pg_constraint.conname" , "FK_NAME"); AddDataColumn("pg_constraint.condeferrable" , "DEFERRABILITY"); AddDataColumn("pg_constraint.condeferred" , "IS_DEFERRED"); AddDataColumn("pg_description.description" , "DESCRIPTION"); } public override void AddJoins() { AddJoin("left join" , "pg_namespace", "pg_constraint.connamespace = pg_namespace.oid"); AddJoin("left join" , "pg_class as pk_table", "pg_constraint.conrelid = pk_table.oid"); AddJoin("right join", "pg_class as fk_table", "pg_constraint.confrelid = fk_table.oid"); AddJoin("left join" , "pg_description", "pg_constraint.oid = pg_description.objoid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pk_table.relname"); AddOrderBy("pg_constraint.conname"); } public override void AddWhereFilters() { // Get Only Primary Key information AddWhereFilter("pg_constraint.contype = 'f'"); } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion #region · Private Methods · private string GetRuleExpression(string fieldName) { StringBuilder expression = new StringBuilder(); expression.AppendFormat(" case {0} ", fieldName); expression.Append(" when 'a' THEN 'NO ACTION'"); expression.Append(" when 'r' THEN 'RESTRICT'"); expression.Append(" when 'c' THEN 'CASCADE'"); expression.Append(" when 'd' THEN 'SET DEFAULT'"); expression.Append(" when 'n' THEN 'SET NULL'"); expression.Append(" END "); return expression.ToString(); } #endregion } } --- NEW FILE: PgFunctionsSchema.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgFunctionsSchema : PgDbSchema { #region · Constructors · public PgFunctionsSchema() : base("Functions") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_proc"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname" , "FUNCTION_SCHEMA", null); AddRestrictionColumn("pg_proc.proname" , "FUNCTION_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_language.lanname" , "PROCEDURE_LANGUAGE"); AddDataColumn("pg_proc.proisagg" , "IS_AGGREGATE"); AddDataColumn("pg_proc.prosecdef" , "IS_SECURITY_DEFINER"); AddDataColumn("pg_proc.proisstrict" , "IS_STRICT"); AddDataColumn(this.GetVolatileExpression("pg_proc.provolatile"), "VOLATILE"); AddDataColumn("pg_proc.proretset" , "RETURNS_SET"); AddDataColumn("pg_proc.prorettype" , "RETURN_TYPE"); AddDataColumn("pg_proc.pronargs" , "ARGUMENT_NUMBER"); AddDataColumn("pg_proc.proargtypes" , "ARGUMENTS"); AddDataColumn("pg_proc.prosrc" , "SOURCE"); AddDataColumn("pg_description.description", "DESCRIPTION"); } public override void AddJoins() { AddJoin("left join", "pg_namespace" , "pg_proc.pronamespace = pg_namespace.oid"); AddJoin("left join", "pg_language" , "pg_proc.prolang = pg_language.oid"); AddJoin("left join", "pg_description", "pg_proc.oid = pg_description.objoid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_proc.proname"); } public override void AddWhereFilters() { } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; return parsed; } #endregion #region · Private Methods · private string GetVolatileExpression(string fieldName) { StringBuilder expression = new StringBuilder(); expression.AppendFormat(" case {0} ", fieldName); expression.Append(" when 'i' THEN 'INMUTABLE'"); expression.Append(" when 's' THEN 'STABLE'"); expression.Append(" when 'v' THEN 'VOLATILE'"); expression.Append(" END "); return expression.ToString(); } #endregion } } --- NEW FILE: PgCheckConstraints.cs --- /* PgSqlClient - ADO.NET Data Provider for PostgreSQL 7.4+ * Copyright (c) 2003-2005 Carlos Guzman Alvarez * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using System; using System.Data; using System.Text; namespace PostgreSql.Data.DbSchema { internal class PgCheckConstraintsSchema : PgDbSchema { #region · Constructors · public PgCheckConstraintsSchema() : base("CheckConstraints") { } #endregion #region · Add Methods · public override void AddTables() { AddTable("pg_constraint"); } public override void AddRestrictionColumns() { AddRestrictionColumn("pg_namespace.nspname", "CONSTRAINT_SCHEMA", null); AddRestrictionColumn("pg_constraint.conname", "CONSTRAINT_NAME", null); } public override void AddDataColumns() { AddDataColumn("pg_get_constraintdef(pg_constraint.oid)", "CHECK_CLAUSULE"); AddDataColumn("pg_description.description", "DESCRIPTION"); } public override void AddJoins() { AddJoin("left join", "pg_namespace" , "pg_constraint.connamespace = pg_namespace.oid"); AddJoin("left join", "pg_description" , "pg_constraint.oid = pg_description.objoid"); } public override void AddOrderByColumns() { AddOrderBy("pg_namespace.nspname"); AddOrderBy("pg_constraint.conname"); } public override void AddWhereFilters() { AddWhereFilter("pg_constraint.contype = 'c'"); } #endregion #region · Parse Methods · public override string[] ParseRestrictions(string[] restrictions) { string[] parsed = restrictions; if (parsed != null) { if (parsed.Length == 7 && parsed[6] != null) { switch (pars... [truncated message content] |