Interesting; I would never have imagined that DataRow doesn't implement any interfaces.
ItemArray doesn't look very expensive at all -- just a single allocation for the array, then the references are all copied over into it from an underlying ArrayList. On Mon, Jun 23, 2008 at 9:13 AM, Dino Viehland <[EMAIL PROTECTED]> wrote: > Actually it's not related to the interfaces – DataRow implements no > interfaces! Instead what it has is a default member which we of course map > into __getitem__. And Python says that all things with __getitem__ can be > enumerated by going from 0 until you get an exception. > > > > In 2.0 we apparently support this conversion on user defined types but not > on built-in .NET types. I'm actually doing some work now which will unify > the .NET vs User-Defined type code paths so this will go away but I've > opened bug #17142 to track this ( > http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=17142). > That way afterwards we'll make sure we've got a test in place and it won't > regress in the future. > > > > Now that being said you probably don't actually want to be doing this for > performance reasons J. The way we know this iteration is complete is when > an exception is thrown which is going to be bad for perf. Calling > row.ItemArray is going to give you a real enumerable object which terminates > w/o an exception so you may see better perf that way - of course that seems > to make a copy of all the rows, so there's a trade-off to be made here… > > > > *From:* [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] *On Behalf Of *Curt Hagenlocher > *Sent:* Monday, June 23, 2008 8:37 AM > *To:* Discussion of IronPython > *Subject:* Re: [IronPython] DataRows and IronPython 2.0 B3 > > > > It's very unlikely that this was intentional. I suspect that it's related > to a change in the way we handle interfaces -- this wouldn't be the first > unanticipated consequence of that change. :/ > > > > > On Mon, Jun 23, 2008 at 8:30 AM, Michael Foord <[EMAIL PROTECTED]> > wrote: > > Note that we can fix it by iterating over 'row.ItemArray' instead, I just > wondered if the breakage was intentional. > > Michael Foord > > > > Michael Foord wrote: > > Hello all, > > I'm further investigating potential compatibility issues with moving > Resolver One to IronPython 2, and I've encountered a change in behaviour > with respect to iterating over DataRows. > > The script below works in IronPython 1, printing all the data in the rows. > In IronPython 2.0 B3 it raises an exception. > > IronPython 1: > C:\compile>c:\Binaries\ironpython\ipy.exe test_data.py > 0 System.Data.DataRow > 0 A Big Boy Did It and Ran Away > 1 System.Data.DataRow > 0 Affective Computing > 2 System.Data.DataRow > 0 Clear and Present Danger > > IronPython 2: > C:\compile>c:\Binaries\ironpython2\ipy.exe test_data.py > 0 <System.Data.DataRow object at 0x000000000000002B [System.Data.DataRow]> > Traceback (most recent call last): > File "test_data.py", line 29, in test_data.py > TypeError: expected IEnumerator, got DataRow > > > Test script: > > import clr > clr.AddReference('System.Data') > > from System.Data import DataSet > from System.Data.Odbc import OdbcConnection, OdbcDataAdapter > > > connectString = ( > "DRIVER={MySQL ODBC 3.51 Driver};" > "blah blah blah" > "OPTION=3;" > ) > > query = "SELECT title FROM books WHERE price > 2 ORDER BY title" > > connection = OdbcConnection(connectString) > adaptor = OdbcDataAdapter(query, connection) > dataSet = DataSet() > connection.Open() > adaptor.Fill(dataSet) > connection.Close() > > for rowIndex, row in enumerate(dataSet.Tables[0].Rows): > print rowIndex, row > for colIndex, data in enumerate(row): > print ' ', colIndex, data > > Michael Foord > http://www.ironpythoninaction.com/ > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >
_______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
