public override View GetView (string viewName) { if (!DatabaseProvider.SupportsSchemaType (typeof (View))) throw new FeatureNotSupportedException ("Views"); MySqlConnection conn = DatabaseProvider.Connection as MySqlConnection; if (conn == null) throw new InvalidOperationException ("No connection available."); ConnectionState originalState = conn.State; if (conn.State == ConnectionState.Closed) conn.Open (); MySqlCommand cmd = conn.CreateCommand (); cmd.CommandText = String.Format ("DESCRIBE {0};", viewName); MySqlDataReader dr = cmd.ExecuteReader (); View view = new View (DatabaseProvider); view.Name = viewName; view.SchemaName = DatabaseProvider.Connection.Database; while (dr.Read ()) { Column column = new Column (DatabaseProvider, view); column.Name = dr.GetString (dr.GetOrdinal ("Field")); column.SchemaName = DatabaseProvider.Connection.Database; // NOTE: MySql 5 shows "NO" when the column doesn't allow nulls while MySql 4 doesn't // show anything. Both say YES when nulls are allowed. column.NotNull = (dr.GetString (dr.GetOrdinal ("Null")) != "YES"); string extras = dr.GetString (dr.GetOrdinal ("Extra")); column.AutoIncrementSeed = (extras.IndexOf ("auto_increment")>=0)?1:0; view.Columns.Add (column); } dr.Close (); if (originalState != conn.State) conn.Close (); return view;