#export dbdef for now... everything else expects to find it here
@EXPORT_OK = qw(
dbh fields hfields qsearch qsearchs dbdef jsearch
- str2time_sql str2time_sql_closing regexp_sql not_regexp_sql concat_sql
+ str2time_sql str2time_sql_closing regexp_sql not_regexp_sql
+ concat_sql group_concat_sql
midnight_sql
);
}
+=item group_concat_sql COLUMN, DELIMITER
+
+Returns an SQL expression to concatenate an aggregate column, using
+GROUP_CONCAT() for mysql and array_to_string() and array_agg() for Pg.
+
+=cut
+
+sub group_concat_sql {
+ my ($col, $delim) = @_;
+ $delim = dbh->quote($delim);
+ if ( driver_name() =~ /^mysql/i ) {
+ # DISTINCT(foo) is valid as $col
+ return "GROUP_CONCAT($col SEPARATOR $delim)";
+ } else {
+ return "array_to_string(array_agg($col), $delim)";
+ }
+}
+
=item midnight_sql DATE
Returns an SQL expression to convert DATE (a unix timestamp) to midnight
use strict;
use vars qw($DEBUG);
-use FS::Record qw(dbh qsearch qsearchs);
+use FS::Record qw(dbh qsearch qsearchs group_concat_sql);
use Date::Format qw( time2str );
use Data::Dumper;
$select .= "NULL AS $_, ";
}
}
- $select .= "array_to_string(array_agg(DISTINCT(cust_main_county.taxnum)), ',') AS taxnums, ";
+ $select .= group_concat_sql('DISTINCT(cust_main_county.taxnum)', ',') .
+ ' AS taxnums, ';
$group =~ s/, $//;
# SELECT/GROUP clauses for second-level (totals) queries
$select_all = "SELECT $breakdown{pkgclass} AS pkgclass, ";
$group_all = "GROUP BY $breakdown{pkgclass}";
}
- $select_all .= "array_to_string(array_agg(DISTINCT(cust_main_county.taxnum)), ',') AS taxnums, ";
+ $select_all .= group_concat_sql('DISTINCT(cust_main_county.taxnum)', ',') .
+ ' AS taxnums, ';
my $agentnum;
if ( $opt{agentnum} and $opt{agentnum} =~ /^(\d+)$/ ) {