Commit 4888de1d authored by unknown's avatar unknown
Browse files

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1

into poseidon.ndb.mysql.com:/home/tomas/mysql-4.1-ndb

parents 24f6437c 9131bd24
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -179,7 +179,14 @@ class Field
  virtual void make_field(Send_field *)=0;
  virtual void sort_string(char *buff,uint length)=0;
  virtual bool optimize_range(uint idx, uint part);
  virtual bool store_for_compare() { return 0; }
  /*
    This should be true for fields which, when compared with constant
    items, can be casted to longlong. In this case we will at 'fix_fields'
    stage cast the constant items to longlongs and at the execution stage
    use field->val_int() for comparison.  Used to optimize clauses like
    'a_column BETWEEN date_const, date_const'.
  */
  virtual bool can_be_compared_as_longlong() const { return FALSE; }
  virtual void free() {}
  Field *new_field(MEM_ROOT *root, struct st_table *new_table)
  {
@@ -566,7 +573,7 @@ class Field_longlong :public Field_num {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 8; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  uint32 max_length() { return 20; }
  field_cast_enum field_cast_type() { return FIELD_CAST_LONGLONG; }
};
@@ -694,7 +701,7 @@ class Field_timestamp :public Field_str {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 4; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  bool zero_pack() const { return 0; }
  void set_time();
  virtual void set_default()
@@ -740,7 +747,7 @@ class Field_year :public Field_tiny {
  String *val_str(String*,String *);
  bool send_binary(Protocol *protocol);
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  field_cast_enum field_cast_type() { return FIELD_CAST_YEAR; }
};

@@ -772,7 +779,7 @@ class Field_date :public Field_str {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 4; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  bool zero_pack() const { return 1; }
  field_cast_enum field_cast_type() { return FIELD_CAST_DATE; }
};
@@ -802,7 +809,7 @@ class Field_newdate :public Field_str {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 3; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  bool zero_pack() const { return 1; }
  bool get_date(TIME *ltime,uint fuzzydate);
  bool get_time(TIME *ltime);
@@ -839,7 +846,7 @@ class Field_time :public Field_str {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 3; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  bool zero_pack() const { return 1; }
  field_cast_enum field_cast_type() { return FIELD_CAST_TIME; }
};
@@ -875,7 +882,7 @@ class Field_datetime :public Field_str {
  void sort_string(char *buff,uint length);
  uint32 pack_length() const { return 8; }
  void sql_type(String &str) const;
  bool store_for_compare() { return 1; }
  bool can_be_compared_as_longlong() const { return TRUE; }
  bool zero_pack() const { return 1; }
  bool get_date(TIME *ltime,uint fuzzydate);
  bool get_time(TIME *ltime);
+3 −3
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ void Item_bool_func2::fix_length_and_dec()
  if (args[0]->type() == FIELD_ITEM)
  {
    Field *field=((Item_field*) args[0])->field;
    if (field->store_for_compare())
    if (field->can_be_compared_as_longlong())
    {
      if (convert_constant_item(field,&args[1]))
      {
@@ -256,7 +256,7 @@ void Item_bool_func2::fix_length_and_dec()
  if (args[1]->type() == FIELD_ITEM)
  {
    Field *field=((Item_field*) args[1])->field;
    if (field->store_for_compare())
    if (field->can_be_compared_as_longlong())
    {
      if (convert_constant_item(field,&args[0]))
      {
@@ -856,7 +856,7 @@ void Item_func_between::fix_length_and_dec()
  if (args[0]->type() == FIELD_ITEM)
  {
    Field *field=((Item_field*) args[0])->field;
    if (field->store_for_compare())
    if (field->can_be_compared_as_longlong())
    {
      if (convert_constant_item(field,&args[1]))
	cmp_type=INT_RESULT;			// Works for all types.