~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_insert.cc

  • Committer: Brian Aker
  • Date: 2009-04-13 16:22:40 UTC
  • mfrom: (971.1.78 mordred)
  • Revision ID: brian@gaz-20090413162240-ugi3gvhofmcuglzl
Merge Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
#include <drizzled/field/timestamp.h>
34
34
#include <drizzled/lock.h>
35
35
 
 
36
#include <bitset>
 
37
 
 
38
using namespace std;
 
39
 
36
40
 
37
41
/*
38
42
  Check if insert fields are correct.
75
79
      No fields are provided so all fields must be provided in the values.
76
80
      Thus we set all bits in the write set.
77
81
    */
78
 
    bitmap_set_all(table->write_set);
 
82
    table->write_set->set();
79
83
  }
80
84
  else
81
85
  {                                             // Part field list
116
120
    }
117
121
    if (table->timestamp_field) // Don't automaticly set timestamp if used
118
122
    {
119
 
      if (bitmap_is_set(table->write_set,
120
 
                        table->timestamp_field->field_index))
 
123
      if (table->write_set->test(table->timestamp_field->field_index))
121
124
        clear_timestamp_auto_bits(table->timestamp_field_type,
122
125
                                  TIMESTAMP_AUTO_SET_ON_INSERT);
123
126
      else
124
127
      {
125
 
        bitmap_set_bit(table->write_set,
126
 
                       table->timestamp_field->field_index);
 
128
        table->write_set->set(table->timestamp_field->field_index);
127
129
      }
128
130
    }
129
131
    /* Mark all virtual columns for write*/
167
169
      Unmark the timestamp field so that we can check if this is modified
168
170
      by update_fields
169
171
    */
170
 
    timestamp_mark= bitmap_test_and_clear(table->write_set,
171
 
                                          table->timestamp_field->field_index);
 
172
    timestamp_mark= table->write_set->test(table->timestamp_field->field_index);
 
173
    table->write_set->reset(table->timestamp_field->field_index);
172
174
  }
173
175
 
174
176
  /* Check the fields we are going to modify */
178
180
  if (table->timestamp_field)
179
181
  {
180
182
    /* Don't set timestamp column if this is modified. */
181
 
    if (bitmap_is_set(table->write_set,
182
 
                      table->timestamp_field->field_index))
 
183
    if (table->write_set->test(table->timestamp_field->field_index))
183
184
      clear_timestamp_auto_bits(table->timestamp_field_type,
184
185
                                TIMESTAMP_AUTO_SET_ON_UPDATE);
185
186
    if (timestamp_mark)
186
 
      bitmap_set_bit(table->write_set,
187
 
                     table->timestamp_field->field_index);
 
187
      table->write_set->set(table->timestamp_field->field_index);
188
188
  }
189
189
  return 0;
190
190
}
721
721
{
722
722
  int error;
723
723
  char *key=0;
724
 
  MY_BITMAP *save_read_set, *save_write_set;
 
724
  bitset<MAX_FIELDS> *save_read_set, *save_write_set;
725
725
  uint64_t prev_insert_id= table->file->next_insert_id;
726
726
  uint64_t insert_id_for_cur_row= 0;
727
727
 
828
828
            table->next_number_field->val_int());
829
829
        info->touched++;
830
830
        if ((table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ &&
831
 
             !bitmap_is_subset(table->write_set, table->read_set)) ||
 
831
             !((*table->read_set & *table->write_set) == *table->write_set)) ||
832
832
            table->compare_record())
833
833
        {
834
834
          if ((error=table->file->ha_update_row(table->record[1],
965
965
                                           TableList *)
966
966
{
967
967
  int err= 0;
968
 
  MY_BITMAP *write_set= entry->write_set;
 
968
  bitset<MAX_FIELDS> *write_set= entry->write_set;
969
969
 
970
970
  for (Field **field=entry->field ; *field ; field++)
971
971
  {
972
 
    if (!bitmap_is_set(write_set, (*field)->field_index))
 
972
    if (!write_set->test((*field)->field_index))
973
973
    {
974
974
      /*
975
975
       * If the field doesn't have any default value
1667
1667
 
1668
1668
  /* Mark all fields that are given values */
1669
1669
  for (Field **f= field ; *f ; f++)
1670
 
    bitmap_set_bit(table->write_set, (*f)->field_index);
 
1670
    table->write_set->set((*f)->field_index);
1671
1671
 
1672
1672
  /* Don't set timestamp if used */
1673
1673
  table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;