add more extraction types to all databases
Arthur Axel 'fREW' Schmidt [Tue, 1 Feb 2011 03:32:35 +0000 (21:32 -0600)]
lib/DBIx/Class/SQLMaker/MSSQL.pm
lib/DBIx/Class/SQLMaker/MySQL.pm
lib/DBIx/Class/SQLMaker/Oracle.pm
lib/DBIx/Class/SQLMaker/Pg.pm
lib/DBIx/Class/SQLMaker/SQLite.pm

index b9a572c..f1bb809 100644 (file)
@@ -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])" }
index 23dae02..efd4771 100644 (file)
@@ -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;
index 7f6799e..015581a 100644 (file)
@@ -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])" }
index 357356b..d62c231 100644 (file)
@@ -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;
index 61d9f7e..6a29f63 100644 (file)
@@ -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])" }