[Adapdev-commits] Adapdev/src/Adapdev.Data/Schema ColumnSchema.cs,1.3,1.4 SchemaBuilder.cs,1.8,1.9
Status: Beta
Brought to you by:
intesar66
From: reic0113 <rei...@us...> - 2005-07-25 02:22:24
|
Update of /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24456/src/Adapdev.Data/Schema Modified Files: ColumnSchema.cs SchemaBuilder.cs Log Message: - benr: initial mysql integration checkin Index: ColumnSchema.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/ColumnSchema.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ColumnSchema.cs 25 Mar 2005 02:14:29 -0000 1.3 --- ColumnSchema.cs 25 Jul 2005 02:22:15 -0000 1.4 *************** *** 225,228 **** --- 225,234 ---- } + public string GetMySqlDbTypeName() + { + MySql.Data.MySqlClient.MySqlDbType dbType = (MySql.Data.MySqlClient.MySqlDbType)DataTypeId; + return dbType.ToString(); + } + public override string ToString() { Index: SchemaBuilder.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/SchemaBuilder.cs,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** SchemaBuilder.cs 19 May 2005 03:30:58 -0000 1.8 --- SchemaBuilder.cs 25 Jul 2005 02:22:15 -0000 1.9 *************** *** 7,10 **** --- 7,11 ---- using Adapdev.Data; using Adapdev.Data.Sql; + using MySql.Data.MySqlClient; /// <summary> *************** *** 55,58 **** --- 56,68 ---- public static DatabaseSchema CreateDatabaseSchema(string oledbConnectionString, Adapdev.Data.DbType databaseType, DbProviderType providerType, string schemaFilter, Adapdev.IProgressCallback progress) { + + ///<HACK> + /// benr: this should be done more elegantly + /// </HACK> + if (databaseType == Adapdev.Data.DbType.MYSQL) + { + return CreateMySqlDatabaseSchema(oledbConnectionString); + } + int recordCount = 0; dbProviderType = providerType; *************** *** 211,221 **** public static DataTable GetReaderSchema(string oledbConnectionString, string tableName, Adapdev.Data.DbType databaseType) { ! DataTable schemaTable = null; ! try { ! OleDbConnection cn = new OleDbConnection(); ! OleDbCommand cmd = new OleDbCommand(); ! OleDbDataReader myReader; ! cn.ConnectionString = oledbConnectionString; cn.Open(); --- 221,239 ---- public static DataTable GetReaderSchema(string oledbConnectionString, string tableName, Adapdev.Data.DbType databaseType) { ! switch(databaseType) ! { ! case Adapdev.Data.DbType.MYSQL: ! return GetReaderSchema(new MySqlConnection(), new MySqlCommand(), oledbConnectionString, databaseType, tableName); ! default: ! return GetReaderSchema(new OleDbConnection(), new OleDbCommand(), oledbConnectionString, databaseType, tableName); ! } ! } ! private static DataTable GetReaderSchema(IDbConnection cn, IDbCommand cmd, string connectionString, Adapdev.Data.DbType databaseType, string tableName) ! { ! DataTable schemaTable = null; ! try ! { ! cn.ConnectionString = connectionString; cn.Open(); *************** *** 224,228 **** cmd.Connection = cn; cmd.CommandText = "SELECT * FROM " + QueryHelper.GetPreDelimeter(databaseType) + tableName + QueryHelper.GetPostDelimeter(databaseType); ! myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly); schemaTable = myReader.GetSchemaTable(); --- 242,246 ---- cmd.Connection = cn; cmd.CommandText = "SELECT * FROM " + QueryHelper.GetPreDelimeter(databaseType) + tableName + QueryHelper.GetPostDelimeter(databaseType); ! IDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly); schemaTable = myReader.GetSchemaTable(); *************** *** 230,234 **** myReader.Close(); cn.Close(); ! } catch (Exception ex) { schemaTable = null; if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Warning, "Could not load Column information for " + tableName + ". " + ex.Message); --- 248,254 ---- myReader.Close(); cn.Close(); ! } ! catch (Exception ex) ! { schemaTable = null; if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Warning, "Could not load Column information for " + tableName + ". " + ex.Message); *************** *** 237,241 **** } - /// <summary> /// Gets the OLE db schema. --- 257,260 ---- *************** *** 366,369 **** --- 385,477 ---- } + + #region MySql Specific Methods + + private static DatabaseSchema CreateMySqlDatabaseSchema(string connectionString) + { + dbProviderType = DbProviderType.MYSQL; + + DataTable schemaTables = SchemaBuilder.GetMySqlSchema(connectionString); + + DatabaseSchema di = new DatabaseSchema(); + MySqlConnection c = new MySqlConnection(connectionString); + di.Name = c.Database; + c = null; + + foreach (DataRow dr in schemaTables.Rows) + { + TableSchema ti = CreateMySqlTableSchema(dr); + CreateColumnSchemas(ti, connectionString, Adapdev.Data.DbType.MYSQL); + + DataTable columns = SchemaBuilder.GetMySqlColumnSchema(connectionString, ti.Name); + + foreach(DataRow columnRow in columns.Rows) + { + if (columnRow["Key"] + "" == "PRI") + { + ti[columnRow["Field"].ToString()].IsPrimaryKey = true; + } + else if (columnRow["Key"] + "" == "MUL") + { + ti[columnRow["Field"].ToString()].IsForeignKey = true; + } + } + di.AddTable(ti); + } + + return di; + } + + private static TableSchema CreateMySqlTableSchema(DataRow dr) + { + TableSchema ti = new TableSchema(); + ti.Alias = dr[0].ToString(); + ti.Name = ti.Alias; + ti.TableType = TableType.TABLE; + return ti; + } + + private static DataTable GetMySqlColumnSchema(string connectionString, string tableName) + { + DataTable schemaTable = new DataTable(); + MySqlConnection cn = new MySqlConnection(); + MySqlCommand cmd = new MySqlCommand(); + MySqlDataAdapter da = new MySqlDataAdapter(); + + cn.ConnectionString = connectionString; + cn.Open(); + + cmd.Connection = cn; + cmd.CommandText = "SHOW COLUMNS IN " + tableName; + da.SelectCommand = cmd; + da.Fill(schemaTable); + + cn.Close(); + + + return schemaTable; + } + + /// <summary> + /// Gets the OleDbConnection.GetOleDbSchemaTable for a specified connection + /// </summary> + /// <param name="mysqlConnectionString">The connectoin to use</param> + /// <param name="guid"></param> + /// <param name="filter"></param> + /// <returns></returns> + public static DataTable GetMySqlSchema(string mysqlConnectionString) + { + MySqlConnection conn = new MySqlConnection(mysqlConnectionString); + conn.Open(); + MySqlCommand command = new MySqlCommand("SHOW TABLES", conn); + DataTable tbl = new DataTable(); + MySqlDataAdapter da = new MySqlDataAdapter(command); + da.Fill(tbl); + conn.Close(); + return tbl; + } + + #endregion + } } \ No newline at end of file |