DB2 and MSSQL have different default order syntaxes
Peter Rabbitson [Sat, 5 Dec 2009 10:44:25 +0000 (10:44 +0000)]
Makefile.PL
lib/DBIx/Class/SQLAHacks.pm
lib/DBIx/Class/SQLAHacks/MSSQL.pm [new file with mode: 0644]

index 5b8ae47..86497df 100644 (file)
@@ -144,6 +144,7 @@ resources 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/db
 
 no_index 'DBIx::Class::SQLAHacks';
 no_index 'DBIx::Class::SQLAHacks::MySQL';
+no_index 'DBIx::Class::SQLAHacks::MSSQL';
 no_index 'DBIx::Class::SQLAHacks::OracleJoins';
 no_index 'DBIx::Class::Storage::DBI::AmbiguousGlob';
 no_index 'DBIx::Class::Storage::DBIHacks';
index 3208a76..02c336c 100644 (file)
@@ -53,7 +53,7 @@ sub _RowNumberOver {
 
   # get the order_by only (or make up an order if none exists)
   my $order_by = $self->_order_by(
-    (delete $order->{order_by}) || \ '(SELECT (1))'
+    (delete $order->{order_by}) || $self->_rno_default_order
   );
 
   # whatever is left
@@ -71,6 +71,11 @@ EOS
   return $sql;
 }
 
+# some databases are happy with OVER (), some need OVER (ORDER BY (SELECT (1)) )
+sub _rno_default_order {
+  return undef;
+}
+
 # Crappy Top based Limit/Offset support. Legacy from MSSQL.
 sub _Top {
   my ( $self, $sql, $order, $rows, $offset ) = @_;
diff --git a/lib/DBIx/Class/SQLAHacks/MSSQL.pm b/lib/DBIx/Class/SQLAHacks/MSSQL.pm
new file mode 100644 (file)
index 0000000..f1af970
--- /dev/null
@@ -0,0 +1,14 @@
+package # Hide from PAUSE
+  DBIx::Class::SQLAHacks::MSSQL;
+
+use base qw( DBIx::Class::SQLAHacks );
+use Carp::Clan qw/^DBIx::Class|^SQL::Abstract/;
+
+#
+# MSSQL does not support ... OVER() ... RNO limits
+#
+sub _rno_default_order {
+  return \ '(SELECT(1))';
+}
+
+1;