X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSQLMaker%2FLimitDialects.pm;h=846cab7f753f03d88b891ab183ca856ac8d63393;hb=a6646e1b0a25acfd21cc3e32b8c479dd0f3526ef;hp=d4689a7dee3d44ee9a37f643d338fdc61de1b996;hpb=d5dedbd62928f65a9071b4d9b6d56c6b663a073b;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/SQLMaker/LimitDialects.pm b/lib/DBIx/Class/SQLMaker/LimitDialects.pm index d4689a7..846cab7 100644 --- a/lib/DBIx/Class/SQLMaker/LimitDialects.pm +++ b/lib/DBIx/Class/SQLMaker/LimitDialects.pm @@ -266,8 +266,8 @@ sub _FirstSkip { SELECT * FROM ( SELECT *, ROWNUM rownum__index FROM ( SELECT ... - ) - ) WHERE rownum__index BETWEEN ($offset+1) AND ($limit+$offset) + ) WHERE ROWNUM <= ($limit+$offset) + ) WHERE rownum__index >= ($offset+1) Supported by B. @@ -285,15 +285,27 @@ sub _RowNum { my $idx_name = $self->_quote ('rownum__index'); my $order_group_having = $self->_parse_rs_attrs($rs_attrs); - $sql = sprintf (<= %u EOS + } + else { + $sql = sprintf (<{alias}, $self->{name_sep}||'.', $_ ) } + { "$rs_attrs->{alias}.$_" } ( $rs_attrs->{_rsroot_source_handle}->resolve->_pri_cols ) ] ); @@ -590,17 +602,13 @@ EOS # also return a hashref (order doesn't matter) of QUOTED EXTRA-SEL => # QUOTED ALIAS pairs, which is a list of extra selectors that do *not* # exist in the original select list - sub _subqueried_limit_attrs { my ($self, $rs_attrs) = @_; croak 'Limit dialect implementation usable only in the context of DBIC (missing $rs_attrs)' unless ref ($rs_attrs) eq 'HASH'; - my ($re_sep, $re_alias) = map { quotemeta $_ } ( - $self->name_sep || '.', - $rs_attrs->{alias}, - ); + my ($re_sep, $re_alias) = map { quotemeta $_ } ( $self->{name_sep}, $rs_attrs->{alias} ); # correlate select and as, build selection index my (@sel, $in_sel_index); @@ -610,7 +618,6 @@ sub _subqueried_limit_attrs { my $sql_sel = $self->_recurse_fields ($s); my $sql_alias = (ref $s) eq 'HASH' ? $s->{-as} : undef; - push @sel, { sql => $sql_sel, unquoted_sql => do { local $self->{quote_char}; $self->_recurse_fields ($s) }, @@ -641,7 +648,11 @@ sub _subqueried_limit_attrs { # for possible further chaining) my (@in_sel, @out_sel, %renamed); for my $node (@sel) { - if (first { $_ =~ / (?{as}, $node->{unquoted_sql}) ) { + if ( + $node->{as} =~ / (?{unquoted_sql} =~ / (?{as} = $self->_unqualify_colname($node->{as}); my $quoted_as = $self->_quote($node->{as}); push @in_sel, sprintf '%s AS %s', $node->{sql}, $quoted_as; @@ -680,8 +691,7 @@ sub _subqueried_limit_attrs { sub _unqualify_colname { my ($self, $fqcn) = @_; - my $re_sep = quotemeta($self->name_sep || '.'); - $fqcn =~ s/ $re_sep /__/xg; + $fqcn =~ s/ \. /__/xg; return $fqcn; }