Stop mangling sql on the way out of the limit dialects
Peter Rabbitson [Wed, 15 Dec 2010 15:58:46 +0000 (16:58 +0100)]
Changes
lib/DBIx/Class/SQLMaker/LimitDialects.pm
t/sqlmaker/limit_dialects/generic_subq.t
t/sqlmaker/limit_dialects/rno.t
t/sqlmaker/limit_dialects/rownum.t
t/sqlmaker/limit_dialects/toplimit.t

diff --git a/Changes b/Changes
index 554b9d8..ed1bfa4 100644 (file)
--- a/Changes
+++ b/Changes
@@ -37,6 +37,8 @@ Revision history for DBIx::Class
         - Fix count of grouped resultsets using HAVING with aliases
         - Setting belongs_to columns/relationships no longer leaves the
           FK value and related object out of sync
+        - Stop stripping newlines from SQL statements in the limit emulators
+          as it is possible that custom sql with comments was provided
 
     * Misc
         - Switch all serialization to use Storable::nfreeze for portable
index 846cab7..bb884d7 100644 (file)
@@ -202,7 +202,6 @@ SELECT $out_sel FROM (
 
 EOS
 
-  $sql =~ s/\s*\n\s*/ /g;   # easier to read in the debugger
   return $sql;
 }
 
@@ -307,7 +306,6 @@ EOS
 EOS
   }
 
-  $sql =~ s/\s*\n\s*/ /g;   # easier to read in the debugger
   return $sql;
 }
 
@@ -433,7 +431,6 @@ sub _Top {
     $order_by_requested,
   ) if ( ($offset && $order_by_requested) || ($mid_sel ne $out_sel) );
 
-  $sql =~ s/\s*\n\s*/ /g;   # easier to read in the debugger
   return $sql;
 }
 
@@ -579,7 +576,6 @@ EOS
     ,
   );
 
-  $sql =~ s/\s*\n\s*/ /g;   # easier to read in the debugger
   return $sql;
 }
 
index 8bd47b7..9e771a9 100644 (file)
@@ -122,4 +122,19 @@ is_deeply (
   'Correct columns selected with rows',
 );
 
+{
+  $rs = $schema->resultset('Artist')->search({}, {
+    columns => 'name',
+    offset => 1,
+    order_by => 'name',
+  });
+  local $rs->result_source->{name} = "weird \n newline/multi \t \t space containing \n table";
+
+  like (
+    ${$rs->as_query}->[0],
+    qr| weird \s \n \s newline/multi \s \t \s \t \s space \s containing \s \n \s table|x,
+    'Newlines/spaces preserved in final sql',
+  );
+}
+
 done_testing;
index dc598c0..4b96a65 100644 (file)
@@ -71,4 +71,20 @@ is_same_sql_bind(
   [ [ 'source', 'Library' ] ],
 );
 
+{
+  my $rs = $schema->resultset('Artist')->search({}, {
+    columns => 'name',
+    offset => 1,
+    order_by => 'name',
+  });
+  local $rs->result_source->{name} = "weird \n newline/multi \t \t space containing \n table";
+
+  like (
+    ${$rs->as_query}->[0],
+    qr| weird \s \n \s newline/multi \s \t \s \t \s space \s containing \s \n \s table|x,
+    'Newlines/spaces preserved in final sql',
+  );
+}
+
+
 done_testing;
index 909367b..2fa12ca 100644 (file)
@@ -54,4 +54,20 @@ is_same_sql_bind (
   'Rownum subsel aliasing works correctly'
 );
 
+{
+  $rs = $s->resultset('Artist')->search({}, {
+    columns => 'name',
+    offset => 1,
+    order_by => 'name',
+  });
+  local $rs->result_source->{name} = "weird \n newline/multi \t \t space containing \n table";
+
+  like (
+    ${$rs->as_query}->[0],
+    qr| weird \s \n \s newline/multi \s \t \s \t \s space \s containing \s \n \s table|x,
+    'Newlines/spaces preserved in final sql',
+  );
+}
+
+
 done_testing;
index 16f64dc..29ef966 100644 (file)
@@ -194,4 +194,19 @@ is_same_sql_bind( $rs_selectas_top->search({})->as_query,
                    [ [ 'source', 'Library' ] ],
                 );
 
+{
+  my $rs = $schema->resultset('Artist')->search({}, {
+    columns => 'name',
+    offset => 1,
+    order_by => 'name',
+  });
+  local $rs->result_source->{name} = "weird \n newline/multi \t \t space containing \n table";
+
+  like (
+    ${$rs->as_query}->[0],
+    qr| weird \s \n \s newline/multi \s \t \s \t \s space \s containing \s \n \s table|x,
+    'Newlines/spaces preserved in final sql',
+  );
+}
+
 done_testing;