← Back to team overview

linux-traipu team mailing list archive

[Bug 950570] Re: Helper function for returning unix_timestamp

 

** Description changed:

  Item objects keep time information in a format inherited from MySQL. If
  you want to get that time as a unix timestamp you end up writing quite
  many lines of code. It would be convenient to have this as a utility
  function so you don't have to copy the code every time you need to do
  this conversion. (For instance, it could be a method of the Item
  class(es).
  
  For an example of how unix timestamp is computed, see
  
  drizzled/function/time/unix_timestamp.cc
  
  ...which provides the functionality to call UNIX_TIMESTAMP() in SQL.
  This issue is a feature request to provide a utility function for
  Drizzle internal use.
  
  An example consumer of this utility function is found in
  plugin/js/js.cc:195:
  
-         // DATE/TIME values are also STRING_RESULT, make them a Date type in v8
-         // Now we need to get the unix timestamp integer, surprisingly tricky...
-         // TODO: This should really be just args[n]->get_epoch_seconds(). I need to write a separate patch for Item class one of these days.
-         type::Time ltime;
-         Timestamp temporal;
-         args[n]->get_date(ltime, 0);
-         temporal.set_years(ltime.year);
-         temporal.set_months(ltime.month);
-         temporal.set_days(ltime.day);
-         temporal.set_hours(ltime.hour);
-         temporal.set_minutes(ltime.minute);
-         temporal.set_seconds(ltime.second);
-         temporal.set_epoch_seconds();
-         if (temporal.is_valid())
-         {
-           time_t tmp;
-           temporal.to_time_t(tmp);
-           // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
-           // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
-           a->Set( n-1, v8::Date::New(((uint64_t)tmp)*1000) );
-         } else {
-           a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
-         }
+         // DATE/TIME values are also STRING_RESULT, make them a Date type in v8
+         // Now we need to get the unix timestamp integer, surprisingly tricky...
+         // TODO: This should really be just args[n]->get_epoch_seconds(). I need to write a separate patch for Item class one of these days.
+         type::Time ltime;
+         Timestamp temporal;
+         args[n]->get_date(ltime, 0);
+         temporal.set_years(ltime.year);
+         temporal.set_months(ltime.month);
+         temporal.set_days(ltime.day);
+         temporal.set_hours(ltime.hour);
+         temporal.set_minutes(ltime.minute);
+         temporal.set_seconds(ltime.second);
+         temporal.set_epoch_seconds();
+         if (temporal.is_valid())
+         {
+           time_t tmp;
+           temporal.to_time_t(tmp);
+           // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
+           // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
+           a->Set( n-1, v8::Date::New(((uint64_t)tmp)*1000) );
+         } else {
+           a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
+         }
  
  It should be possible to simply replace this code with a
  
-         if ( time_t tsamp = args[n]->get_epoch_seconds() )
-         {
-           // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
-           // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
-           a->Set( n-1, v8::Date::New(((uint64_t) tstamp )*1000) );
-         } else {
-           a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
-         }
+         if ( time_t tsamp = args[n]->get_epoch_seconds() )
+         {
+           // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
+           // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
+           a->Set( n-1, v8::Date::New(((uint64_t) tstamp )*1000) );
+         } else {
+           a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
+         }

-- 
You received this bug notification because you are a member of UBUNTU -
AL - BR, which is subscribed to Drizzle.
https://bugs.launchpad.net/bugs/950570

Title:
  Helper function for returning unix_timestamp

Status in A Lightweight SQL Database for Cloud Infrastructure and Web Applications:
  In Progress

Bug description:
  Item objects keep time information in a format inherited from MySQL.
  If you want to get that time as a unix timestamp you end up writing
  quite many lines of code. It would be convenient to have this as a
  utility function so you don't have to copy the code every time you
  need to do this conversion. (For instance, it could be a method of the
  Item class(es).

  For an example of how unix timestamp is computed, see

  drizzled/function/time/unix_timestamp.cc

  ...which provides the functionality to call UNIX_TIMESTAMP() in SQL.
  This issue is a feature request to provide a utility function for
  Drizzle internal use.

  An example consumer of this utility function is found in
  plugin/js/js.cc:195:

          // DATE/TIME values are also STRING_RESULT, make them a Date type in v8
          // Now we need to get the unix timestamp integer, surprisingly tricky...
          // TODO: This should really be just args[n]->get_epoch_seconds(). I need to write a separate patch for Item class one of these days.
          type::Time ltime;
          Timestamp temporal;
          args[n]->get_date(ltime, 0);
          temporal.set_years(ltime.year);
          temporal.set_months(ltime.month);
          temporal.set_days(ltime.day);
          temporal.set_hours(ltime.hour);
          temporal.set_minutes(ltime.minute);
          temporal.set_seconds(ltime.second);
          temporal.set_epoch_seconds();
          if (temporal.is_valid())
          {
            time_t tmp;
            temporal.to_time_t(tmp);
            // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
            // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
            a->Set( n-1, v8::Date::New(((uint64_t)tmp)*1000) );
          } else {
            a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
          }

  It should be possible to simply replace this code with a

          if ( time_t tsamp = args[n]->get_epoch_seconds() )
          {
            // Pay attention, Ecmascript defines a date as *milliseconds* since unix epoch
            // Also, on platforms where time_t is 32 bit, we need explicit cast to 64 bit integer
            a->Set( n-1, v8::Date::New(((uint64_t) tstamp )*1000) );
          } else {
            a->Set( n-1, v8::String::New(args[n]->val_str(str)->c_str() ) );
          }

To manage notifications about this bug go to:
https://bugs.launchpad.net/drizzle/+bug/950570/+subscriptions


References