[Dbix-class] MSSQL - problem sorting by joined
column while limiting rows
Peter Rabbitson
rabbit+dbic at rabbit.us
Wed Dec 16 19:49:42 GMT 2009
Alan Humphrey wrote:
>> Indeed, it was rather hard to reproduce it, because we kept looking in
>> the wrong place. Please try [1]
>>
>> Cheers
>>
>
> Peter -
>
> This is great! Sorts are coming back as expected. Running the tests, however, I'm getting errors. See below for a snippet of the output.
>
> The test is running against MSSQL2005-Express.
>
> Thanks again for keeping after this!
>
> - Alan
Cheers!
>
> t/746mssql.......................................
> # Failed test 'The object isa DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server'
> # at t/746mssql.t line 29.
> # The object isn't a 'DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server' it's a 'DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server'
This is strange. What is the DSN envvar you are using?
> # Failed test 'populate with PKs supplied ok'
> # at t/746mssql.t line 221.
> # died: Transaction aborted: DBIx::Class::Schema::populate(): DBI Exception: DBD::Sybase::db do failed: Server message number=3902 severity=16 state=1 line=1 server=ALAN-PC\SQLEXPRESS text=The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
> # [for Statement "COMMIT"] at t/746mssql.t line 203
> # Rollback failed: DBIx::Class::Storage::TxnScopeGuard::DESTROY(): DBI Exception: DBD::Sybase::db do failed: Server message number=3903 severity=16 state=1 line=1 server=ALAN-PC\SQLEXPRESS text=The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
> # [for Statement "ROLLBACK"] at /usr/local/share/perl/5.10.0/Test/Exception.pm line 104
>
> # Failed test 'populate without PKs supplied ok'
> # at t/746mssql.t line 255.
> # died: Transaction aborted: DBIx::Class::Schema::populate(): DBI Exception: DBD::Sybase::db do failed: Server message number=3902 severity=16 state=1 line=1 server=ALAN-PC\SQLEXPRESS text=The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
> # [for Statement "COMMIT"] at t/746mssql.t line 239
> # Rollback failed: DBIx::Class::Storage::TxnScopeGuard::DESTROY(): DBI Exception: DBD::Sybase::db do failed: Server message number=3903 severity=16 state=1 line=1 server=ALAN-PC\SQLEXPRESS text=The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
> # [for Statement "ROLLBACK"] at /usr/local/share/perl/5.10.0/Test/Exception.pm line 104
> #
These seem to be related to the DSN as well.
> SELECT me.id, me.name FROM owners me ORDER BY name:
> SELECT me.id, me.name FROM (SELECT TOP 4294967296 me.id, me.name FROM owners me ORDER BY name) me:
>
> # Failed test 'Sort is preserved across IN subqueries'
> # at t/746mssql.t line 298.
> # Structures begin differing at:
> # $got->[0] = '1'
> # $expected->[0] = '3'
>
> # Failed test 'Expected SQL executed'
> # at t/746mssql.t line 464.
> # SQL expressions differ
> # got: (SELECT TOP 4294967296 [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], [owner].[id], [owner].[name] FROM ( SELECT * FROM ( SELECT [me].*, ROW_NUMBER() OVER( ORDER BY (SELECT(1)) ) AS rno__row__index FROM (SELECT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price] FROM (SELECT TOP 4294967296 [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price] FROM [books] [me] JOIN [owners] [owner] ON [owner].[id] = [me].[owner] WHERE ( ( [owner].[name] != ? AND [source] = ? ) ) ORDER BY [owner].[name]) [me]) [me] ) rno_subq WHERE rno__row__index BETWEEN 3 AND 9 ) [me] JOIN [owners] [owner] ON [owner].[id] = [me].[owner] WHERE ( ( [owner].[name] != ? AND [source] = ? ) ) ORDER BY [owner].[name])
> # expected: (
> # SELECT TOP 100 PERCENT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], [owner].[id], [owner].[name]
> # FROM (
> # SELECT *
> # FROM (
> # SELECT [me].*, ROW_NUMBER() OVER( ORDER BY (SELECT(1)) ) AS rno__row__index
> # FROM (
> # SELECT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price]
> # FROM (
> # SELECT TOP 100 PERCENT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price]
> # FROM [books] [me]
> # JOIN [owners] [owner] ON [owner].[id] = [me].[owner]
> # WHERE ( ( [owner].[name] != ? AND [source] = ? ) )
> # ORDER BY [owner].[name]
> # ) [me]
> # ) [me]
> # ) rno_subq
> # WHERE rno__row__index BETWEEN 3 AND 9
> # ) [me]
> # JOIN [owners] [owner] ON [owner].[id] = [me].[owner]
> # WHERE ( ( [owner].[name] != ? AND [source] = ? ) )
> # ORDER BY [owner].[name]
> # )
> # differing in :
> # [ TOP 4294967296[me].[id],[me].[source],[me].[owner],[me].[title],[me].[price],[owner].[id],[owner].[name] ] != [ TOP 100 PERCENT[me].[id],[me].[source],[me].[owner],[me].[title],[me].[price],[owner].[id],[owner].[name] ]
> #
> # Looks like you failed 5 tests of 53.
This is my fault, I forgot to commit something - svn update and try again.
More information about the DBIx-Class
mailing list