All pastes #35318 Raw Edit

Stuff

public text v1 · immutable
#35318 ·published 2005-12-30 21:20 UTC
rendered paste body
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;