~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_load.cc

Fixed bashism.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
using namespace std;
30
30
 
31
31
class READ_INFO {
32
 
  File  cursor;
 
32
  File  file;
33
33
  unsigned char *buffer;                /* Buffer for read text */
34
34
  unsigned char *end_of_buff;           /* Data in bufferts ends here */
35
35
  size_t buff_length;                   /* Length of buffert */
48
48
        *row_end;                       /* Found row ends here */
49
49
  const CHARSET_INFO *read_charset;
50
50
 
51
 
  READ_INFO(File cursor, size_t tot_length, const CHARSET_INFO * const cs,
 
51
  READ_INFO(File file, size_t tot_length, const CHARSET_INFO * const cs,
52
52
            String &field_term,String &line_start,String &line_term,
53
53
            String &enclosed,int escape, bool is_fifo);
54
54
  ~READ_INFO();
95
95
  SYNOPSYS
96
96
    mysql_load()
97
97
      session - current thread
98
 
      ex  - file_exchange object representing source cursor and its parsing rules
 
98
      ex  - file_exchange object representing source file and its parsing rules
99
99
      table_list  - list of tables to which we are loading data
100
100
      fields_vars - list of fields and variables to which we read
101
 
                    data from cursor
 
101
                    data from file
102
102
      set_fields  - list of fields mentioned in set clause
103
103
      set_values  - expressions to assign to fields in previous list
104
104
      handle_duplicates - indicates whenever we should emit error or
124
124
  char *db= table_list->db;                     // This is never null
125
125
  assert(db);
126
126
  /*
127
 
    If path for cursor is not defined, we will use the current database.
 
127
    If path for file is not defined, we will use the current database.
128
128
    If this is not set, we will use the directory where the table to be
129
129
    loaded is located
130
130
  */
165
165
  }
166
166
 
167
167
  table= table_list->table;
168
 
  transactional_table= table->cursor->has_transactions();
 
168
  transactional_table= table->file->has_transactions();
169
169
 
170
170
  if (!fields_vars.elements)
171
171
  {
275
275
        return(true);
276
276
      }
277
277
 
278
 
      // if we are not in slave thread, the cursor must be:
 
278
      // if we are not in slave thread, the file must be:
279
279
      if (!((stat_info.st_mode & S_IROTH) == S_IROTH &&  // readable by others
280
280
            (stat_info.st_mode & S_IFLNK) != S_IFLNK && // and not a symlink
281
281
            ((stat_info.st_mode & S_IFREG) == S_IFREG ||
339
339
    table->next_number_field=table->found_next_number_field;
340
340
    if (ignore ||
341
341
        handle_duplicates == DUP_REPLACE)
342
 
      table->cursor->extra(HA_EXTRA_IGNORE_DUP_KEY);
 
342
      table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
343
343
    if (handle_duplicates == DUP_REPLACE)
344
 
        table->cursor->extra(HA_EXTRA_WRITE_CAN_REPLACE);
345
 
    table->cursor->ha_start_bulk_insert((ha_rows) 0);
 
344
        table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
 
345
    table->file->ha_start_bulk_insert((ha_rows) 0);
346
346
    table->copy_blobs=1;
347
347
 
348
348
    session->abort_on_warning= true;
355
355
      error= read_sep_field(session, info, table_list, fields_vars,
356
356
                            set_fields, set_values, read_info,
357
357
                            *enclosed, skip_lines, ignore);
358
 
    if (table->cursor->ha_end_bulk_insert() && !error)
 
358
    if (table->file->ha_end_bulk_insert() && !error)
359
359
    {
360
 
      table->cursor->print_error(my_errno, MYF(0));
 
360
      table->file->print_error(my_errno, MYF(0));
361
361
      error= 1;
362
362
    }
363
 
    table->cursor->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
364
 
    table->cursor->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
 
363
    table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
 
364
    table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
365
365
    table->next_number_field=0;
366
366
  }
367
367
  if (file >= 0)
390
390
err:
391
391
  assert(transactional_table || !(info.copied || info.deleted) ||
392
392
              session->transaction.stmt.modified_non_trans_table);
393
 
  table->cursor->ha_release_auto_increment();
 
393
  table->file->ha_release_auto_increment();
394
394
  table->auto_increment_field_not_null= false;
395
395
  session->abort_on_warning= 0;
396
396
  return(error);
631
631
    }
632
632
    if (item)
633
633
    {
634
 
      /* Have not read any field, thus input cursor is simply ended */
 
634
      /* Have not read any field, thus input file is simply ended */
635
635
      if (item == fields_vars.head())
636
636
        break;
637
637
      for (; item ; item= it++)
714
714
  case 'r': return '\r';
715
715
  case 'b': return '\b';
716
716
  case '0': return 0;                           // Ascii null
717
 
  case 'Z': return '\032';                      // Win32 end of cursor
 
717
  case 'Z': return '\032';                      // Win32 end of file
718
718
  case 'N': found_null=1;
719
719
 
720
720
    /* fall through */
733
733
                     const CHARSET_INFO * const cs,
734
734
                     String &field_term, String &line_start, String &line_term,
735
735
                     String &enclosed_par, int escape, bool is_fifo)
736
 
  :cursor(file_par),escape_char(escape)
 
736
  :file(file_par),escape_char(escape)
737
737
{
738
738
  read_charset= cs;
739
739
  field_term_ptr=(char*) field_term.ptr();
776
776
  else
777
777
  {
778
778
    end_of_buff=buffer+buff_length;
779
 
    if (init_io_cache(&cache,(false) ? -1 : cursor, 0,
 
779
    if (init_io_cache(&cache,(false) ? -1 : file, 0,
780
780
                      (false) ? READ_NET :
781
781
                      (is_fifo ? READ_FIFO : READ_CACHE),0L,1,
782
782
                      MYF(MY_WME)))
1001
1001
 
1002
1002
  NOTES
1003
1003
    The row may not be fixed size on disk if there are escape
1004
 
    characters in the cursor.
 
1004
    characters in the file.
1005
1005
 
1006
1006
  IMPLEMENTATION NOTE
1007
1007
    One can't use fixed length with multi-byte charset **