From: Arthur Axel 'fREW' Schmidt Date: Tue, 1 Feb 2011 03:32:35 +0000 (-0600) Subject: add more extraction types to all databases X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=37256abd758b2a319e3fe4aa2d0636a10be52e51;p=dbsrgits%2FDBIx-Class.git add more extraction types to all databases --- diff --git a/lib/DBIx/Class/SQLMaker/MSSQL.pm b/lib/DBIx/Class/SQLMaker/MSSQL.pm index b9a572c..f1bb809 100644 --- a/lib/DBIx/Class/SQLMaker/MSSQL.pm +++ b/lib/DBIx/Class/SQLMaker/MSSQL.pm @@ -12,13 +12,23 @@ sub _rno_default_order { { my %part_map = ( - month => 'mm', - day_of_month => 'dd', - year => 'yyyy', + year => 'year', + quarter => 'quarter', + month => 'month', + day_of_year => 'dayofyear', + day_of_month => 'day', + week => 'week', + day_of_week => 'weekday', + hour => 'hour', + minute => 'minute', + second => 'second', + millisecond => 'millisecond', ); my %diff_part_map = %part_map; - $diff_part_map{day} = delete $diff_part_map{day_of_month}; + $diff_part_map{day} = delete $diff_part_map{day_of_year}; + delete $diff_part_map{day_of_month}; + delete $diff_part_map{day_of_week}; sub _datetime_sql { "DATEPART('$part_map{$_[1]}', $_[2])" } sub _datetime_diff_sql { "DATEDIFF('$diff_part_map{$_[1]}', $_[2], $_[3])" } diff --git a/lib/DBIx/Class/SQLMaker/MySQL.pm b/lib/DBIx/Class/SQLMaker/MySQL.pm index 23dae02..efd4771 100644 --- a/lib/DBIx/Class/SQLMaker/MySQL.pm +++ b/lib/DBIx/Class/SQLMaker/MySQL.pm @@ -46,9 +46,27 @@ sub _lock_select { { my %part_map = ( - month => 'MONTH', - day_of_month => 'DAY', - year => 'YEAR', + microsecond => 'MICROSECOND', + second => 'SECOND', + minute => 'MINUTE', + hour => 'HOUR', + day_of_month => 'DAY', + week => 'WEEK', + month => 'MONTH', + quarter => 'QUARTER', + year => 'YEAR', + # should we support these or what? + second_microsecond => 'SECOND_MICROSECOND', + minute_microsecond => 'MINUTE_MICROSECOND', + minute_second => 'MINUTE_SECOND', + hour_microsecond => 'HOUR_MICROSECOND', + hour_second => 'HOUR_SECOND', + hour_minute => 'HOUR_MINUTE', + day_microsecond => 'DAY_MICROSECOND', + day_second => 'DAY_SECOND', + day_minute => 'DAY_MINUTE', + day_hour => 'DAY_HOUR', + year_month => 'YEAR_MONTH', ); my %diff_part_map = %part_map; diff --git a/lib/DBIx/Class/SQLMaker/Oracle.pm b/lib/DBIx/Class/SQLMaker/Oracle.pm index 7f6799e..015581a 100644 --- a/lib/DBIx/Class/SQLMaker/Oracle.pm +++ b/lib/DBIx/Class/SQLMaker/Oracle.pm @@ -248,9 +248,18 @@ sub _insert_returning { { my %part_map = ( - month => 'MONTH', - day_of_month => 'DAYOFMONTH', - year => 'YEAR', + month => 'MONTH', + day_of_month => 'DAYOFMONTH', + day_of_year => 'DAYOFYEAR', + day_of_quarter => 'DAY_OF_QUARTER', + quarter => 'QUARTER_OF_YEAR', + month_of_quarter => 'MONTH_OF_QUARTER', + year => 'YEAR', + hour => 'HOUR', + minute => 'MINUTE', + second => 'SECOND', + week_of_quarter => 'WEEK_OF_QUARTER', + week_of_year => 'WEEK_OF_YEAR', ); sub _datetime_sql { "$part_map{$_[1]}($_[2])" } @@ -258,9 +267,14 @@ sub _insert_returning { { my %part_map = ( - month => 'SQL_TSI_MONTH', - day => 'SQL_TSI_DAY', - year => 'SQL_TSI_YEAR', + second => 'SQL_TSI_SECOND', + minute => 'SQL_TSI_MINUTE', + hour => 'SQL_TSI_HOUR', + week => 'SQL_TSI_WEEK', + quarter => 'SQL_TSI_QUARTER', + month => 'SQL_TSI_MONTH', + day_of_year => 'SQL_TSI_DAY', + year => 'SQL_TSI_YEAR', ); sub _datetime_diff_sql { "TIMESTAMPDIFF($part_map{$_[1]}, $_[2], $_[3])" } diff --git a/lib/DBIx/Class/SQLMaker/Pg.pm b/lib/DBIx/Class/SQLMaker/Pg.pm index 357356b..d62c231 100644 --- a/lib/DBIx/Class/SQLMaker/Pg.pm +++ b/lib/DBIx/Class/SQLMaker/Pg.pm @@ -5,9 +5,27 @@ use base qw( DBIx::Class::SQLMaker ); use Carp::Clan qw/^DBIx::Class|^SQL::Abstract/; { my %part_map = ( - month => 'MONTH', - day_of_month => 'DAY', - year => 'YEAR', + century => 'CENTURY', + decade => 'DECADE', + day_of_month => 'DAY', + day_of_week => 'DOW', + day_of_year => 'DOY', + seconds_since_epoch => 'EPOCH', + hour => 'HOUR', + iso_day_of_week => 'ISODOW', + iso_year => 'ISOYEAR', + microsecond => 'MICROSECONDS', + millenium => 'MILLENIUM', + millisecond => 'MILLISECONDS', + minute => 'MINUTE', + month => 'MONTH', + quarter => 'QUARTER', + second => 'SECOND', + timezone => 'TIMEZONE', + timezone_hour => 'TIMEZONE_HOUR', + timezone_minute => 'TIMEZONE_MINUTE', + week => 'WEEK', + year => 'YEAR', ); my %diff_part_map = %part_map; diff --git a/lib/DBIx/Class/SQLMaker/SQLite.pm b/lib/DBIx/Class/SQLMaker/SQLite.pm index 61d9f7e..6a29f63 100644 --- a/lib/DBIx/Class/SQLMaker/SQLite.pm +++ b/lib/DBIx/Class/SQLMaker/SQLite.pm @@ -11,9 +11,20 @@ sub _lock_select () { '' }; { my %part_map = ( - month => 'm', - day_of_month => 'd', - year => 'Y', + month => 'm', + day_of_month => 'd', + year => 'Y', + hour => 'H', + day_of_year => 'j', + minute => 'M', + seconds => 'S', + day_of_week => 'w', + week => 'W', + year => 'Y', + # should we support these or what? + julian_day => 'J', + seconds_since_epoch => 's', + fractional_seconds => 'f', ); sub _datetime_sql { "STRFTIME('%$part_map{$_[1]}', $_[2])" }