~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to sql/item_timefunc.cc

MergedĀ fromĀ trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
953
953
{
954
954
  if (args[0]->type() == Item::FIELD_ITEM)
955
955
  {
956
 
    if (args[0]->field_type() == MYSQL_TYPE_DATE)
 
956
    if (args[0]->field_type() == MYSQL_TYPE_NEWDATE)
957
957
      return MONOTONIC_STRICT_INCREASING;
958
958
    if (args[0]->field_type() == MYSQL_TYPE_DATETIME)
959
959
      return MONOTONIC_INCREASING;
974
974
  }
975
975
  res=(longlong) calc_daynr(ltime.year,ltime.month,ltime.day);
976
976
  
977
 
  if (args[0]->field_type() == MYSQL_TYPE_DATE)
 
977
  if (args[0]->field_type() == MYSQL_TYPE_NEWDATE)
978
978
  {
979
979
    // TO_DAYS() is strictly monotonic for dates, leave incl_endp intact
980
980
    return res;
1209
1209
enum_monotonicity_info Item_func_year::get_monotonicity_info() const
1210
1210
{
1211
1211
  if (args[0]->type() == Item::FIELD_ITEM &&
1212
 
      (args[0]->field_type() == MYSQL_TYPE_DATE ||
 
1212
      (args[0]->field_type() == MYSQL_TYPE_NEWDATE ||
1213
1213
       args[0]->field_type() == MYSQL_TYPE_DATETIME))
1214
1214
    return MONOTONIC_INCREASING;
1215
1215
  return NON_MONOTONIC;
1249
1249
longlong Item_func_unix_timestamp::val_int()
1250
1250
{
1251
1251
  MYSQL_TIME ltime;
1252
 
  my_bool not_used;
 
1252
  bool not_used;
1253
1253
  
1254
1254
  DBUG_ASSERT(fixed == 1);
1255
1255
  if (arg_count == 0)
2020
2020
    follows:
2021
2021
 
2022
2022
    - If first arg is a MYSQL_TYPE_DATETIME result is MYSQL_TYPE_DATETIME
2023
 
    - If first arg is a MYSQL_TYPE_DATE and the interval type uses hours,
 
2023
    - If first arg is a MYSQL_TYPE_NEWDATE and the interval type uses hours,
2024
2024
      minutes or seconds then type is MYSQL_TYPE_DATETIME.
2025
2025
    - Otherwise the result is MYSQL_TYPE_STRING
2026
2026
      (This is because you can't know if the string contains a DATE, MYSQL_TIME or
2031
2031
  if (arg0_field_type == MYSQL_TYPE_DATETIME ||
2032
2032
      arg0_field_type == MYSQL_TYPE_TIMESTAMP)
2033
2033
    cached_field_type= MYSQL_TYPE_DATETIME;
2034
 
  else if (arg0_field_type == MYSQL_TYPE_DATE)
 
2034
  else if (arg0_field_type == MYSQL_TYPE_NEWDATE)
2035
2035
  {
2036
2036
    if (int_type <= INTERVAL_DAY || int_type == INTERVAL_YEAR_MONTH)
2037
2037
      cached_field_type= arg0_field_type;
2637
2637
 
2638
2638
  cached_field_type= MYSQL_TYPE_STRING;
2639
2639
  arg0_field_type= args[0]->field_type();
2640
 
  if (arg0_field_type == MYSQL_TYPE_DATE ||
 
2640
  if (arg0_field_type == MYSQL_TYPE_NEWDATE ||
2641
2641
      arg0_field_type == MYSQL_TYPE_DATETIME ||
2642
2642
      arg0_field_type == MYSQL_TYPE_TIMESTAMP)
2643
2643
    cached_field_type= MYSQL_TYPE_DATETIME;
3178
3178
      switch (cached_format_type) {
3179
3179
      case DATE_ONLY:
3180
3180
        cached_timestamp_type= MYSQL_TIMESTAMP_DATE;
3181
 
        cached_field_type= MYSQL_TYPE_DATE; 
 
3181
        cached_field_type= MYSQL_TYPE_NEWDATE; 
3182
3182
        max_length= MAX_DATE_WIDTH * MY_CHARSET_BIN_MB_MAXLEN;
3183
3183
        break;
3184
3184
      case TIME_ONLY: