~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/log_event.h

Merged build changes from Antony.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
#pragma interface                       /* gcc class implementation */
33
33
#endif
34
34
 
35
 
#include <my_bitmap.h>
 
35
#include <mysys/my_bitmap.h>
36
36
#include "rpl_constants.h"
37
37
#ifndef MYSQL_CLIENT
38
38
#include "rpl_record.h"
155
155
  const char* line_start;
156
156
  const char* escaped;
157
157
  int cached_new_format;
158
 
  uint8 field_term_len,enclosed_len,line_term_len,line_start_len, escaped_len;
 
158
  uint8_t field_term_len,enclosed_len,line_term_len,line_start_len, escaped_len;
159
159
  char opt_flags;
160
160
  char empty_flags;
161
161
 
586
586
  // TODO: have the last catalog here ??
587
587
  char db[FN_REFLEN+1]; // TODO: make this a LEX_STRING when thd->db is
588
588
  bool flags2_inited;
589
 
  uint32 flags2;
 
589
  uint32_t flags2;
590
590
  bool sql_mode_inited;
591
591
  ulong sql_mode;               /* must be same as THD.variables.sql_mode */
592
592
  ulong auto_increment_increment, auto_increment_offset;
619
619
  */
620
620
  bool printed_fd_event;
621
621
  my_off_t hexdump_from;
622
 
  uint8 common_header_len;
 
622
  uint8_t common_header_len;
623
623
  char delimiter[16];
624
624
 
625
625
  /*
848
848
    The master's server id (is preserved in the relay log; used to
849
849
    prevent from infinite loops in circular replication).
850
850
  */
851
 
  uint32 server_id;
 
851
  uint32_t server_id;
852
852
 
853
853
  /**
854
854
    Some 16 flags. See the definitions above for LOG_EVENT_TIME_F,
855
855
    LOG_EVENT_FORCED_ROTATE_F, LOG_EVENT_THREAD_SPECIFIC_F, and
856
856
    LOG_EVENT_SUPPRESS_USE_F for notes.
857
857
  */
858
 
  uint16 flags;
 
858
  uint16_t flags;
859
859
 
860
860
  bool cache_stmt;
861
861
 
869
869
  THD* thd;
870
870
 
871
871
  Log_event();
872
 
  Log_event(THD* thd_arg, uint16 flags_arg, bool cache_stmt);
 
872
  Log_event(THD* thd_arg, uint16_t flags_arg, bool cache_stmt);
873
873
  /*
874
874
    read_log_event() functions read an event from a binlog or relay
875
875
    log; used by SHOW BINLOG EVENTS, the binlog_dump thread on the
929
929
  }
930
930
 
931
931
  static void operator delete(void *ptr,
932
 
                              size_t size __attribute__((__unused__)))
 
932
                              size_t size __attribute__((unused)))
933
933
  {
934
934
    my_free((uchar*) ptr, MYF(MY_WME|MY_ALLOW_ZERO_PTR));
935
935
  }
946
946
            write_data_header(file) ||
947
947
            write_data_body(file));
948
948
  }
949
 
  virtual bool write_data_header(IO_CACHE* file __attribute__((__unused__)))
 
949
  virtual bool write_data_header(IO_CACHE* file __attribute__((unused)))
950
950
  { return 0; }
951
951
  virtual bool write_data_body(IO_CACHE* file __attribute__((unused)))
952
952
  { return 0; }
1075
1075
    @retval 0     Event applied successfully
1076
1076
    @retval errno Error code if event application failed
1077
1077
  */
1078
 
  virtual int do_apply_event(Relay_log_info const *rli __attribute__((__unused__)))
 
1078
  virtual int do_apply_event(Relay_log_info const *rli __attribute__((unused)))
1079
1079
  {
1080
1080
    return 0;                /* Default implementation does nothing */
1081
1081
  }
1488
1488
    we pass it with q_len, so we would not have to call strlen()
1489
1489
    otherwise, set it to 0, in which case, we compute it with strlen()
1490
1490
  */
1491
 
  uint32 q_len;
1492
 
  uint32 db_len;
1493
 
  uint16 error_code;
 
1491
  uint32_t q_len;
 
1492
  uint32_t db_len;
 
1493
  uint16_t error_code;
1494
1494
  ulong thread_id;
1495
1495
  /*
1496
1496
    For events created by Query_log_event::do_apply_event (and
1527
1527
    Query_log_event, so automatically benefit from the work already done for
1528
1528
    status variables in Query_log_event.
1529
1529
 */
1530
 
  uint16 status_vars_len;
 
1530
  uint16_t status_vars_len;
1531
1531
 
1532
1532
  /*
1533
1533
    'flags2' is a second set of flags (on top of those in Log_event), for
1542
1542
  bool sql_mode_inited;
1543
1543
  bool charset_inited;
1544
1544
 
1545
 
  uint32 flags2;
 
1545
  uint32_t flags2;
1546
1546
  /* In connections sql_mode is 32 bits now but will be 64 bits soon */
1547
1547
  ulong sql_mode;
1548
1548
  ulong auto_increment_increment, auto_increment_offset;
1578
1578
  Log_event_type get_type_code() { return QUERY_EVENT; }
1579
1579
#ifndef MYSQL_CLIENT
1580
1580
  bool write(IO_CACHE* file);
1581
 
  virtual bool write_post_header_for_derived(IO_CACHE* file __attribute__((__unused__)))
 
1581
  virtual bool write_post_header_for_derived(IO_CACHE* file __attribute__((unused)))
1582
1582
  { return false; }
1583
1583
#endif
1584
1584
  bool is_valid() const { return query != 0; }
1598
1598
 
1599
1599
  int do_apply_event(Relay_log_info const *rli,
1600
1600
                       const char *query_arg,
1601
 
                       uint32 q_len_arg);
 
1601
                       uint32_t q_len_arg);
1602
1602
#endif /* HAVE_REPLICATION */
1603
1603
};
1604
1604
 
1664
1664
  char* master_log;
1665
1665
  int master_host_len;
1666
1666
  int master_log_len;
1667
 
  uint16 master_port;
 
1667
  uint16_t master_port;
1668
1668
 
1669
1669
#ifndef MYSQL_CLIENT
1670
1670
  Slave_log_event(THD* thd_arg, Relay_log_info* rli);
1904
1904
public:
1905
1905
  ulong thread_id;
1906
1906
  ulong slave_proxy_id;
1907
 
  uint32 table_name_len;
 
1907
  uint32_t table_name_len;
1908
1908
  /*
1909
1909
    No need to have a catalog, as these events can only come from 4.x.
1910
1910
    TODO: this may become false if Dmitri pushes his new LOAD DATA INFILE in
1911
1911
    5.0 only (not in 4.x).
1912
1912
  */
1913
 
  uint32 db_len;
1914
 
  uint32 fname_len;
1915
 
  uint32 num_fields;
 
1913
  uint32_t db_len;
 
1914
  uint32_t fname_len;
 
1915
  uint32_t num_fields;
1916
1916
  const char* fields;
1917
1917
  const uchar* field_lens;
1918
 
  uint32 field_block_len;
 
1918
  uint32_t field_block_len;
1919
1919
 
1920
1920
  const char* table_name;
1921
1921
  const char* db;
1922
1922
  const char* fname;
1923
 
  uint32 skip_lines;
 
1923
  uint32_t skip_lines;
1924
1924
  sql_ex_info sql_ex;
1925
1925
  bool local_fname;
1926
1926
 
2037
2037
     fixed.
2038
2038
  */
2039
2039
  time_t created;
2040
 
  uint16 binlog_version;
 
2040
  uint16_t binlog_version;
2041
2041
  char server_version[ST_SERVER_VER_LEN];
2042
2042
  /*
2043
2043
    artifical_event is 1 in the case where this is a generated event that
2112
2112
     LOG_EVENT_HEADER_LEN), except FORMAT_DESCRIPTION_EVENT and ROTATE_EVENT
2113
2113
     (those have a header of size LOG_EVENT_MINIMAL_HEADER_LEN).
2114
2114
  */
2115
 
  uint8 common_header_len;
2116
 
  uint8 number_of_event_types;
 
2115
  uint8_t common_header_len;
 
2116
  uint8_t number_of_event_types;
2117
2117
  /* The list of post-headers' lengthes */
2118
 
  uint8 *post_header_len;
 
2118
  uint8_t *post_header_len;
2119
2119
  uchar server_version_split[3];
2120
 
  const uint8 *event_type_permutation;
 
2120
  const uint8_t *event_type_permutation;
2121
2121
 
2122
 
  Format_description_log_event(uint8 binlog_ver, const char* server_ver=0);
 
2122
  Format_description_log_event(uint8_t binlog_ver, const char* server_ver=0);
2123
2123
  Format_description_log_event(const char* buf, uint event_len,
2124
2124
                               const Format_description_log_event
2125
2125
                               *description_event);
2368
2368
  uint charset_number;
2369
2369
  bool is_null;
2370
2370
#ifndef MYSQL_CLIENT
2371
 
  User_var_log_event(THD* thd_arg __attribute__((__unused__)),
 
2371
  User_var_log_event(THD* thd_arg __attribute__((unused)),
2372
2372
                     char *name_arg, uint name_len_arg,
2373
2373
                     char *val_arg, ulong val_len_arg, Item_result type_arg,
2374
2374
                     uint charset_number_arg)
2427
2427
private:
2428
2428
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
2429
2429
  virtual int do_update_pos(Relay_log_info *rli);
2430
 
  virtual enum_skip_reason do_shall_skip(Relay_log_info *rli __attribute__((__unused__)))
 
2430
  virtual enum_skip_reason do_shall_skip(Relay_log_info *rli __attribute__((unused)))
2431
2431
  {
2432
2432
    /*
2433
2433
      Events from ourself should be skipped, but they should not
2997
2997
  </tr>
2998
2998
 
2999
2999
  <tr>
3000
 
    <td>MYSQL_TYPE_TINY</td><td>1</td>
3001
 
    <td>0</td>
3002
 
    <td>No column metadata.</td>
3003
 
  </tr>
3004
 
 
3005
 
  <tr>
3006
 
    <td>MYSQL_TYPE_SHORT</td><td>2</td>
3007
 
    <td>0</td>
3008
 
    <td>No column metadata.</td>
3009
 
  </tr>
3010
 
 
3011
 
  <tr>
3012
 
    <td>MYSQL_TYPE_LONG</td><td>3</td>
3013
 
    <td>0</td>
3014
 
    <td>No column metadata.</td>
3015
 
  </tr>
3016
 
 
3017
 
  <tr>
3018
 
    <td>MYSQL_TYPE_DOUBLE</td><td>5</td>
 
3000
    <td>DRIZZLE_TYPE_TINY</td><td>1</td>
 
3001
    <td>0</td>
 
3002
    <td>No column metadata.</td>
 
3003
  </tr>
 
3004
 
 
3005
  <tr>
 
3006
    <td>DRIZZLE_TYPE_SHORT</td><td>2</td>
 
3007
    <td>0</td>
 
3008
    <td>No column metadata.</td>
 
3009
  </tr>
 
3010
 
 
3011
  <tr>
 
3012
    <td>DRIZZLE_TYPE_LONG</td><td>3</td>
 
3013
    <td>0</td>
 
3014
    <td>No column metadata.</td>
 
3015
  </tr>
 
3016
 
 
3017
  <tr>
 
3018
    <td>DRIZZLE_TYPE_DOUBLE</td><td>5</td>
3019
3019
    <td>1 byte</td>
3020
3020
    <td>1 byte unsigned integer, representing the "pack_length", which
3021
3021
    is equal to sizeof(double) on the server from which the event
3023
3023
  </tr>
3024
3024
 
3025
3025
  <tr>
3026
 
    <td>MYSQL_TYPE_NULL</td><td>6</td>
3027
 
    <td>0</td>
3028
 
    <td>No column metadata.</td>
3029
 
  </tr>
3030
 
 
3031
 
  <tr>
3032
 
    <td>MYSQL_TYPE_TIMESTAMP</td><td>7</td>
3033
 
    <td>0</td>
3034
 
    <td>No column metadata.</td>
3035
 
  </tr>
3036
 
 
3037
 
  <tr>
3038
 
    <td>MYSQL_TYPE_LONGLONG</td><td>8</td>
3039
 
    <td>0</td>
3040
 
    <td>No column metadata.</td>
3041
 
  </tr>
3042
 
 
3043
 
  <tr>
3044
 
    <td>MYSQL_TYPE_DATE</td><td>10</td>
3045
 
    <td>0</td>
3046
 
    <td>No column metadata.</td>
3047
 
  </tr>
3048
 
 
3049
 
  <tr>
3050
 
    <td>MYSQL_TYPE_TIME</td><td>11</td>
3051
 
    <td>0</td>
3052
 
    <td>No column metadata.</td>
3053
 
  </tr>
3054
 
 
3055
 
  <tr>
3056
 
    <td>MYSQL_TYPE_DATETIME</td><td>12</td>
3057
 
    <td>0</td>
3058
 
    <td>No column metadata.</td>
3059
 
  </tr>
3060
 
 
3061
 
  <tr>
3062
 
    <td>MYSQL_TYPE_YEAR</td><td>13</td>
3063
 
    <td>0</td>
3064
 
    <td>No column metadata.</td>
3065
 
  </tr>
3066
 
 
3067
 
  <tr>
3068
 
    <td><i>MYSQL_TYPE_NEWDATE</i></td><td><i>14</i></td>
 
3026
    <td>DRIZZLE_TYPE_NULL</td><td>6</td>
 
3027
    <td>0</td>
 
3028
    <td>No column metadata.</td>
 
3029
  </tr>
 
3030
 
 
3031
  <tr>
 
3032
    <td>DRIZZLE_TYPE_TIMESTAMP</td><td>7</td>
 
3033
    <td>0</td>
 
3034
    <td>No column metadata.</td>
 
3035
  </tr>
 
3036
 
 
3037
  <tr>
 
3038
    <td>DRIZZLE_TYPE_LONGLONG</td><td>8</td>
 
3039
    <td>0</td>
 
3040
    <td>No column metadata.</td>
 
3041
  </tr>
 
3042
 
 
3043
  <tr>
 
3044
    <td>DRIZZLE_TYPE_DATE</td><td>10</td>
 
3045
    <td>0</td>
 
3046
    <td>No column metadata.</td>
 
3047
  </tr>
 
3048
 
 
3049
  <tr>
 
3050
    <td>DRIZZLE_TYPE_TIME</td><td>11</td>
 
3051
    <td>0</td>
 
3052
    <td>No column metadata.</td>
 
3053
  </tr>
 
3054
 
 
3055
  <tr>
 
3056
    <td>DRIZZLE_TYPE_DATETIME</td><td>12</td>
 
3057
    <td>0</td>
 
3058
    <td>No column metadata.</td>
 
3059
  </tr>
 
3060
 
 
3061
  <tr>
 
3062
    <td>DRIZZLE_TYPE_YEAR</td><td>13</td>
 
3063
    <td>0</td>
 
3064
    <td>No column metadata.</td>
 
3065
  </tr>
 
3066
 
 
3067
  <tr>
 
3068
    <td><i>DRIZZLE_TYPE_NEWDATE</i></td><td><i>14</i></td>
3069
3069
    <td>&ndash;</td>
3070
3070
    <td><i>This enumeration value is only used internally and cannot
3071
3071
    exist in a binlog.</i></td>
3072
3072
  </tr>
3073
3073
 
3074
3074
  <tr>
3075
 
    <td>MYSQL_TYPE_VARCHAR</td><td>15</td>
 
3075
    <td>DRIZZLE_TYPE_VARCHAR</td><td>15</td>
3076
3076
    <td>2 bytes</td>
3077
3077
    <td>2 byte unsigned integer representing the maximum length of
3078
3078
    the string.</td>
3079
3079
  </tr>
3080
3080
 
3081
3081
  <tr>
3082
 
    <td>MYSQL_TYPE_NEWDECIMAL</td><td>246</td>
 
3082
    <td>DRIZZLE_TYPE_NEWDECIMAL</td><td>246</td>
3083
3083
    <td>2 bytes</td>
3084
3084
    <td>A 1 byte unsigned int representing the precision, followed
3085
3085
    by a 1 byte unsigned int representing the number of decimals.</td>
3086
3086
  </tr>
3087
3087
 
3088
3088
  <tr>
3089
 
    <td><i>MYSQL_TYPE_ENUM</i></td><td><i>247</i></td>
3090
 
    <td>&ndash;</td>
3091
 
    <td><i>This enumeration value is only used internally and cannot
3092
 
    exist in a binlog.</i></td>
3093
 
  </tr>
3094
 
 
3095
 
  <tr>
3096
 
    <td><i>MYSQL_TYPE_SET</i></td><td><i>248</i></td>
3097
 
    <td>&ndash;</td>
3098
 
    <td><i>This enumeration value is only used internally and cannot
3099
 
    exist in a binlog.</i></td>
3100
 
  </tr>
3101
 
 
3102
 
  <tr>
3103
 
    <td>MYSQL_TYPE_BLOB</td><td>252</td>
 
3089
    <td><i>DRIZZLE_TYPE_ENUM</i></td><td><i>247</i></td>
 
3090
    <td>&ndash;</td>
 
3091
    <td><i>This enumeration value is only used internally and cannot
 
3092
    exist in a binlog.</i></td>
 
3093
  </tr>
 
3094
 
 
3095
  <tr>
 
3096
    <td><i>DRIZZLE_TYPE_SET</i></td><td><i>248</i></td>
 
3097
    <td>&ndash;</td>
 
3098
    <td><i>This enumeration value is only used internally and cannot
 
3099
    exist in a binlog.</i></td>
 
3100
  </tr>
 
3101
 
 
3102
  <tr>
 
3103
    <td>DRIZZLE_TYPE_BLOB</td><td>252</td>
3104
3104
    <td>1 byte</td>
3105
3105
    <td>The pack length, i.e., the number of bytes needed to represent
3106
3106
    the length of the blob: 1, 2, 3, or 4.</td>
3107
3107
  </tr>
3108
3108
 
3109
3109
  <tr>
3110
 
    <td>MYSQL_TYPE_STRING</td><td>254</td>
 
3110
    <td>DRIZZLE_TYPE_STRING</td><td>254</td>
3111
3111
    <td>2 bytes</td>
3112
 
    <td>The first byte is always MYSQL_TYPE_VAR_STRING (i.e., 253).
 
3112
    <td>The first byte is always DRIZZLE_TYPE_VAR_STRING (i.e., 253).
3113
3113
    The second byte is the field size, i.e., the number of bytes in
3114
3114
    the representation of size of the string: 3 or 4.</td>
3115
3115
  </tr>
3149
3149
    ENUM_FLAG_COUNT
3150
3150
  };
3151
3151
 
3152
 
  typedef uint16 flag_set;
 
3152
  typedef uint16_t flag_set;
3153
3153
 
3154
3154
  /* Special constants representing sets of flags */
3155
3155
  enum 
3163
3163
 
3164
3164
#ifndef MYSQL_CLIENT
3165
3165
  Table_map_log_event(THD *thd, TABLE *tbl, ulong tid, 
3166
 
                      bool is_transactional, uint16 flags);
 
3166
                      bool is_transactional, uint16_t flags);
3167
3167
#endif
3168
3168
#ifdef HAVE_REPLICATION
3169
3169
  Table_map_log_event(const char *buf, uint event_len, 
3281
3281
    COMPLETE_ROWS_F = (1U << 3)
3282
3282
  };
3283
3283
 
3284
 
  typedef uint16 flag_set;
 
3284
  typedef uint16_t flag_set;
3285
3285
 
3286
3286
  /* Special constants representing sets of flags */
3287
3287
  enum 
3375
3375
  ulong       m_master_reclength; /* Length of record on master side */
3376
3376
 
3377
3377
  /* Bit buffers in the same memory as the class */
3378
 
  uint32    m_bitbuf[128/(sizeof(uint32)*8)];
3379
 
  uint32    m_bitbuf_ai[128/(sizeof(uint32)*8)];
 
3378
  uint32_t    m_bitbuf[128/(sizeof(uint32_t)*8)];
 
3379
  uint32_t    m_bitbuf_ai[128/(sizeof(uint32_t)*8)];
3380
3380
 
3381
3381
  uchar    *m_rows_buf;         /* The rows in packed format */
3382
3382
  uchar    *m_rows_cur;         /* One-after the end of the data */