[pgsqlclient-checkins] SF.net SVN: pgsqlclient: [95] trunk/PostgreSqlClient/source/PostgreSql/Data/S
Status: Inactive
Brought to you by:
carlosga_fb
From: <car...@us...> - 2006-04-11 17:25:23
|
Revision: 95 Author: carlosga_fb Date: 2006-04-11 10:25:08 -0700 (Tue, 11 Apr 2006) ViewCVS: http://svn.sourceforge.net/pgsqlclient/?rev=95&view=rev Log Message: ----------- ?\194?\183 More Database Schema Fixes Modified Paths: -------------- trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/MetaData.xml trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgColumns.cs trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgForeignKeyColumns.cs trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgPrimaryKeys.cs Modified: trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/MetaData.xml =================================================================== --- trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/MetaData.xml 2006-04-11 17:24:10 UTC (rev 94) +++ trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/MetaData.xml 2006-04-11 17:25:08 UTC (rev 95) @@ -797,7 +797,7 @@ <DbType>15</DbType> </DataTypes> <DataTypes> - <TypeName>char</TypeName> + <TypeName>character</TypeName> <ProviderDbType>5</ProviderDbType> <ColumnSize>2147483647</ColumnSize> <CreateFormat /> @@ -822,7 +822,7 @@ <DbType>16</DbType> </DataTypes> <DataTypes> - <TypeName>varchar</TypeName> + <TypeName>character varying</TypeName> <ProviderDbType>27</ProviderDbType> <ColumnSize>2147483647</ColumnSize> <CreateFormat /> @@ -872,7 +872,7 @@ <DbType>16</DbType> </DataTypes> <DataTypes> - <TypeName>binary</TypeName> + <TypeName>bytea</TypeName> <ProviderDbType>1</ProviderDbType> <ColumnSize>2147483647</ColumnSize> <CreateFormat /> @@ -922,7 +922,7 @@ <DbType>6</DbType> </DataTypes> <DataTypes> - <TypeName>time</TypeName> + <TypeName>timestamp without time zone</TypeName> <ProviderDbType>23</ProviderDbType> <ColumnSize>8</ColumnSize> <CreateFormat /> @@ -947,7 +947,7 @@ <DbType>6</DbType> </DataTypes> <DataTypes> - <TypeName>time(tz)</TypeName> + <TypeName>time with time zone</TypeName> <ProviderDbType>24</ProviderDbType> <ColumnSize>12</ColumnSize> <CreateFormat /> @@ -972,7 +972,7 @@ <DbType>6</DbType> </DataTypes> <DataTypes> - <TypeName>timestamp</TypeName> + <TypeName>timestamp without time zone</TypeName> <ProviderDbType>25</ProviderDbType> <ColumnSize>8</ColumnSize> <CreateFormat /> @@ -997,7 +997,7 @@ <DbType>6</DbType> </DataTypes> <DataTypes> - <TypeName>timestamp(tz)</TypeName> + <TypeName>timestamp with time zone</TypeName> <ProviderDbType>26</ProviderDbType> <ColumnSize>8</ColumnSize> <CreateFormat /> Modified: trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgColumns.cs =================================================================== --- trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgColumns.cs 2006-04-11 17:24:10 UTC (rev 94) +++ trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgColumns.cs 2006-04-11 17:25:08 UTC (rev 95) @@ -16,6 +16,8 @@ */ using System; +using System.Data; +using PostgreSql.Data.PostgreSqlClient; namespace PostgreSql.Data.Schema { @@ -33,6 +35,7 @@ "table_name, " + "column_name, " + "data_type, " + + "0 AS COLUMN_SIZE, " + "numeric_precision, " + "numeric_scale, " + "ordinal_position, " + @@ -41,14 +44,18 @@ "when 'YES' then true " + "end AS is_nullable, " + "column_default, " + + "character_maximum_length AS CHARACTER_LENGTH, " + "character_octet_length, " + "character_set_catalog, " + "character_set_schema, " + "character_set_name, " + "collation_catalog, " + "collation_schema, " + - "collation_name " + - "FROM information_schema.columns "; + "collation_name, " + + "domain_catalog, " + + "domain_schema, " + + "domain_name " + + "FROM information_schema.columns "; if (restrictions != null && restrictions.Length > 0) { @@ -98,6 +105,37 @@ return sql; } + protected override DataTable ProcessResult(PgConnection connection, DataTable schema) + { + DataTable dataTypes = connection.GetSchema("DataTypes"); + + foreach (DataRow column in schema.Rows) + { + switch (column["DATA_TYPE"].ToString()) + { + case "text": + column["COLUMN_SIZE"] = column["CHARACTER_OCTET_LENGTH"]; + break; + + case "character": + case "character variying": + column["COLUMN_SIZE"] = column["CHARACTER_LENGTH"]; + break; + + default: + dataTypes.DefaultView.RowFilter = String.Format("TypeName='{0}'", column["COLUMN_NAME"]); + + if (dataTypes.DefaultView.Count == 1) + { + column["COLUMN_SIZE"] = dataTypes.DefaultView[0]["ColumnSize"]; + } + break; + } + } + + return schema; + } + #endregion } } Modified: trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgForeignKeyColumns.cs =================================================================== --- trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgForeignKeyColumns.cs 2006-04-11 17:24:10 UTC (rev 94) +++ trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgForeignKeyColumns.cs 2006-04-11 17:25:08 UTC (rev 95) @@ -147,6 +147,8 @@ // CleanUp selectColumn.Dispose(); + foreignKeyColumns.Columns.Remove("CONSTRAINT_TABLE_COLUMNS"); + foreignKeyColumns.Columns.Remove("REFERENCED_TABLE_COLUMNS"); return foreignKeyColumns; } Modified: trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgPrimaryKeys.cs =================================================================== --- trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgPrimaryKeys.cs 2006-04-11 17:24:10 UTC (rev 94) +++ trunk/PostgreSqlClient/source/PostgreSql/Data/Schema/PgPrimaryKeys.cs 2006-04-11 17:25:08 UTC (rev 95) @@ -16,7 +16,10 @@ */ using System; +using System.Data; +using PostgreSql.Data.PostgreSqlClient; + namespace PostgreSql.Data.Schema { internal sealed class PgPrimaryKeys : PgSchema @@ -29,8 +32,9 @@ "SELECT " + "current_database() AS TABLE_CATALOG, " + "pg_namespace.nspname AS TABLE_SCHEMA, " + - "pg_class.relname AS TABLE_NAME, " + - "pg_constraint.conname AS PK_NAME, " + + "pg_class.relname AS TABLE_NAME, " + + "null AS COLUMN_NAME, " + + "pg_constraint.conname AS PK_NAME, " + "pg_constraint.conkey AS PK_COLUMNS, " + "pg_description.description AS DESCRIPTION " + "FROM pg_constraint " + @@ -65,6 +69,68 @@ return sql; } + protected override System.Data.DataTable ProcessResult(PostgreSql.Data.PostgreSqlClient.PgConnection connection, System.Data.DataTable schema) + { + DataTable primaryKeyColumns = schema.Clone(); + string sql = + "SELECT " + + "column_name " + + "FROM information_schema.columns " + + "WHERE " + + "table_catalog=current_database() AND " + + "table_schema=@tableSchema AND " + + "table_name=@tableName AND " + + "ordinal_position=@ordinalPosition"; + + PgCommand selectColumn = new PgCommand(sql, connection); + selectColumn.Parameters.Add("@tableSchema", PgDbType.Text); + selectColumn.Parameters.Add("@tableName", PgDbType.Text); + selectColumn.Parameters.Add("@ordinalPosition", PgDbType.Text); + + try + { + selectColumn.Prepare(); + + foreach (DataRow row in schema.Rows) + { + Array pkColumns = (Array)row["PK_COLUMNS"]; + + for (int i = 0; i < pkColumns.Length; i++) + { + DataRow primaryKeyColumn = primaryKeyColumns.NewRow(); + + // Grab the table column name + selectColumn.Parameters["@tableSchema"].Value = row["TABLE_SCHEMA"]; + selectColumn.Parameters["@tableName"].Value = row["TABLE_NAME"]; + selectColumn.Parameters["@ordinalPosition"].Value = Convert.ToInt16(pkColumns.GetValue(i + 1)); + + string pkColumnName = (string)selectColumn.ExecuteScalar(); + + // Create the new primary key column info + primaryKeyColumn["TABLE_CATALOG"] = row["TABLE_CATALOG"]; + primaryKeyColumn["TABLE_SCHEMA"] = row["TABLE_SCHEMA"]; + primaryKeyColumn["TABLE_NAME"] = row["TABLE_NAME"]; + primaryKeyColumn["COLUMN_NAME"] = pkColumnName; + primaryKeyColumn["DESCRIPTION"] = row["DESCRIPTION"]; + + primaryKeyColumns.Rows.Add(primaryKeyColumn); + } + } + } + catch + { + throw; + } + finally + { + // CleanUp + selectColumn.Dispose(); + primaryKeyColumns.Columns.Remove("PK_COLUMNS"); + } + + return primaryKeyColumns; + } + #endregion } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |