MySQL 8.0.31
Source Code Documentation
api0api.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 2008, 2022, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is also distributed with certain software (including but not
10limited to OpenSSL) that is licensed under separate terms, as designated in a
11particular file or component or in included license documentation. The authors
12of MySQL hereby grant you an additional permission to link the program and
13your derivative works with the separately licensed software that they have
14included with MySQL.
15
16This program is distributed in the hope that it will be useful, but WITHOUT
17ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
19for more details.
20
21You should have received a copy of the GNU General Public License along with
22this program; if not, write to the Free Software Foundation, Inc.,
2351 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24
25*****************************************************************************/
26
27/** @file include/api0api.h
28 InnoDB Native API
29
30 2008-08-01 Created by Sunny Bains.
31 3/20/2011 Jimmy Yang extracted from Embedded InnoDB
32 *******************************************************/
33
34#ifndef api0api_h
35#define api0api_h
36
37#include <stdint.h>
38#include <stdio.h>
39
40#include "config.h"
41#include "db0err.h"
42
43#if defined(WITH_INNODB_MEMCACHED) && !defined(NDEBUG)
44#define UNIV_MEMCACHED_SDI
45#endif
46
47/** Page number */
48typedef uint32_t page_no_t;
49/** Tablespace identifier */
50typedef uint32_t space_id_t;
51
52typedef struct ib_sdi_key ib_sdi_key_t;
54
55/* Basic types used by the InnoDB API. */
56/** All InnoDB error codes are represented by ib_err_t */
57typedef enum dberr_t ib_err_t;
58/** Representation of a byte within InnoDB */
59typedef unsigned char ib_byte_t;
60
61/** Representation of an unsigned long int within InnoDB */
62#ifdef _WIN64
63typedef unsigned __int64 ib_ulint_t;
64#else
65typedef unsigned long int ib_ulint_t;
66#endif /* _WIN64 */
67
68typedef void *ib_opaque_t;
70typedef uint64_t ib_id_u64_t;
71
72/** @enum ib_cfg_type_t Possible types for a configuration variable. */
73typedef enum {
74 IB_CFG_BOOL, /*!< The configuration parameter is
75 of type bool */
76
77 /* XXX Can we avoid having different types for ulint and ulong?
78 - On Win64 "unsigned long" is 32 bits
79 - ulong is always defined as "unsigned long"
80 - On Win64 ulint is defined as 64 bit integer
81 => On Win64 ulint != ulong.
82 If we typecast all ulong and ulint variables to the smaller type
83 ulong, then we will cut the range of the ulint variables.
84 This is not a problem for most ulint variables because their max
85 allowed values do not exceed 2^32-1 (e.g. log_groups is ulint
86 but its max allowed value is 10). BUT buffer_pool_size and
87 log_file_size allow up to 2^64-1. */
88
89 IB_CFG_ULINT, /*!< The configuration parameter is
90 of type ulint */
91
92 IB_CFG_ULONG, /*!< The configuration parameter is
93 of type ulong */
94
95 IB_CFG_TEXT, /*!< The configuration parameter is
96 of type char* */
97
98 IB_CFG_CB /*!< The configuration parameter is
99 a callback parameter */
101
102/** @enum ib_col_type_t column types that are supported. */
103typedef enum {
104 IB_VARCHAR = 1, /*!< Character varying length. The
105 column is not padded. */
106
107 IB_CHAR = 2, /*!< Fixed length character string. The
108 column is padded to the right. */
109
110 IB_BINARY = 3, /*!< Fixed length binary, similar to
111 IB_CHAR but the column is not padded
112 to the right. */
113
114 IB_VARBINARY = 4, /*!< Variable length binary */
115
116 IB_BLOB = 5, /*!< Binary large object, or
117 a TEXT type */
118
119 IB_INT = 6, /*!< Integer: can be any size
120 from 1 - 8 bytes. If the size is
121 1, 2, 4 and 8 bytes then you can use
122 the typed read and write functions. For
123 other sizes you will need to use the
124 ib_col_get_value() function and do the
125 conversion yourself. */
126
127 IB_SYS = 8, /*!< System column, this column can
128 be one of DATA_TRX_ID, DATA_ROLL_PTR
129 or DATA_ROW_ID. */
130
131 IB_FLOAT = 9, /*!< C (float) floating point value. */
132
133 IB_DOUBLE = 10, /*!> C (double) floating point value. */
134
135 IB_DECIMAL = 11, /*!< Decimal stored as an ASCII
136 string */
137
138 IB_VARCHAR_ANYCHARSET = 12, /*!< Any charset, varying length */
139
140 IB_CHAR_ANYCHARSET = 13 /*!< Any charset, fixed length */
141
143
144/** @enum ib_tbl_fmt_t InnoDB table format types */
145typedef enum {
146 IB_TBL_REDUNDANT, /*!< Redundant row format, the column
147 type and length is stored in the row.*/
148
149 IB_TBL_COMPACT, /*!< Compact row format, the column
150 type is not stored in the row. The
151 length is stored in the row but the
152 storage format uses a compact format
153 to store the length of the column data
154 and record data storage format also
155 uses less storage. */
156
157 IB_TBL_DYNAMIC, /*!< Compact row format. BLOB prefixes
158 are not stored in the clustered index */
159
160 IB_TBL_COMPRESSED /*!< Similar to dynamic format but
161 with pages compressed */
163
164/** @enum ib_col_attr_t InnoDB column attributes */
165typedef enum {
166 IB_COL_NONE = 0, /*!< No special attributes. */
167
168 IB_COL_NOT_NULL = 1, /*!< Column data can't be NULL. */
169
170 IB_COL_UNSIGNED = 2, /*!< Column is IB_INT and unsigned. */
171
172 IB_COL_NOT_USED = 4, /*!< Future use, reserved. */
173
174 IB_COL_CUSTOM1 = 8, /*!< Custom precision type, this is
175 a bit that is ignored by InnoDB and so
176 can be set and queried by users. */
177
178 IB_COL_CUSTOM2 = 16, /*!< Custom precision type, this is
179 a bit that is ignored by InnoDB and so
180 can be set and queried by users. */
181
182 IB_COL_CUSTOM3 = 32 /*!< Custom precision type, this is
183 a bit that is ignored by InnoDB and so
184 can be set and queried by users. */
186
187/* Note: must match lock0types.h */
188/** @enum ib_lck_mode_t InnoDB lock modes. */
189typedef enum {
190 IB_LOCK_IS = 0, /*!< Intention shared, an intention
191 lock should be used to lock tables */
192
193 IB_LOCK_IX, /*!< Intention exclusive, an intention
194 lock should be used to lock tables */
195
196 IB_LOCK_S, /*!< Shared locks should be used to
197 lock rows */
198
199 IB_LOCK_X, /*!< Exclusive locks should be used to
200 lock rows*/
201
202 IB_LOCK_TABLE_X, /*!< exclusive table lock */
203
204 IB_LOCK_NONE, /*!< This is used internally to note
205 consistent read */
206
207 IB_LOCK_NUM = IB_LOCK_NONE /*!< number of lock modes */
209
210typedef enum {
211 IB_CLUSTERED = 1, /*!< clustered index */
212 IB_UNIQUE = 2 /*!< unique index */
214
215/** @enum ib_srch_mode_t InnoDB cursor search modes for ib_cursor_moveto().
216Note: Values must match those found in page0cur.h */
217typedef enum {
218 IB_CUR_G = 1, /*!< If search key is not found then
219 position the cursor on the row that
220 is greater than the search key */
221
222 IB_CUR_GE = 2, /*!< If the search key not found then
223 position the cursor on the row that
224 is greater than or equal to the search
225 key */
226
227 IB_CUR_L = 3, /*!< If search key is not found then
228 position the cursor on the row that
229 is less than the search key */
230
231 IB_CUR_LE = 4 /*!< If search key is not found then
232 position the cursor on the row that
233 is less than or equal to the search
234 key */
236
237/** @enum ib_match_mode_t Various match modes used by ib_cursor_moveto() */
238typedef enum {
239 IB_CLOSEST_MATCH, /*!< Closest match possible */
240
241 IB_EXACT_MATCH, /*!< Search using a complete key
242 value */
243
244 IB_EXACT_PREFIX /*!< Search using a key prefix which
245 must match to rows: the prefix may
246 contain an incomplete field (the
247 last field in prefix may be just
248 a prefix of a fixed length column) */
250
251/** InnoDB column meta data. */
252typedef struct {
253 ib_col_type_t type; /*!< Type of the column */
254
255 ib_col_attr_t attr; /*!< Column attributes */
256
257 uint32_t type_len; /*!< Length of type */
258
259 uint16_t client_type; /*!< 16 bits of data relevant only to
260 the client. InnoDB doesn't care */
261
262 ib_charset_t *charset; /*!< Column charset */
264
265/* Note: Must be in sync with trx0trx.h */
266/** @enum ib_trx_level_t Transaction isolation levels */
267typedef enum {
268 IB_TRX_READ_UNCOMMITTED = 0, /*!< Dirty read: non-locking SELECTs are
269 performed so that we do not look at a
270 possible earlier version of a record;
271 thus they are not 'consistent' reads
272 under this isolation level; otherwise
273 like level 2 */
274
275 IB_TRX_READ_COMMITTED = 1, /*!< Somewhat Oracle-like isolation,
276 except that in range UPDATE and DELETE
277 we must block phantom rows with
278 next-key locks; SELECT ... FOR UPDATE
279 and ... LOCK IN SHARE MODE only lock
280 the index records, NOT the gaps before
281 them, and thus allow free inserting;
282 each consistent read reads its own
283 snapshot */
284
285 IB_TRX_REPEATABLE_READ = 2, /*!< All consistent reads in the same
286 trx read the same snapshot; full
287 next-key locking used in locking reads
288 to block insertions into gaps */
289
290 IB_TRX_SERIALIZABLE = 3 /*!< All plain SELECTs are converted to
291 LOCK IN SHARE MODE reads */
293
294/** Generical InnoDB callback prototype. */
295typedef void (*ib_cb_t)(void);
296
297constexpr uint32_t IB_CFG_BINLOG_ENABLED = 0x1;
298constexpr uint32_t IB_CFG_MDL_ENABLED = 0x2;
299constexpr uint32_t IB_CFG_DISABLE_ROWLOCK = 0x4;
300
301/** Used by ib_read_tuple to determine number of bytes to allocate for new slot
302if needed */
303static const size_t REC_BUF_SLOT_SIZE = 16384;
304
305/** The first argument to the InnoDB message logging function. By default
306it's set to stderr. You should treat ib_msg_stream_t as a void*, since
307it will probably change in the future. */
309
310/** All log messages are written to this function.It should have the same
311behavior as fprintf(3). */
312typedef int (*ib_msg_log_t)(ib_msg_stream_t, const char *, ...);
313
314/* Note: This is to make it easy for API users to have type
315checking for arguments to our functions. Making it ib_opaque_t
316by itself will result in pointer decay resulting in subverting
317of the compiler's type checking. */
318
319/** InnoDB tuple handle. This handle can refer to either a cluster index
320tuple or a secondary index tuple. There are two types of tuples for each
321type of index, making a total of four types of tuple handles. There
322is a tuple for reading the entire row contents and another for searching
323on the index key. */
324typedef struct ib_tuple_t *ib_tpl_t;
325
326/** InnoDB transaction handle, all database operations need to be covered
327by transactions. This handle represents a transaction. The handle can be
328created with ib_trx_begin(), you commit your changes with ib_trx_commit()
329and undo your changes using ib_trx_rollback(). If the InnoDB deadlock
330monitor rolls back the transaction then you need to free the transaction
331using the function ib_trx_release(). You can query the state of an InnoDB
332transaction by calling ib_trx_state(). */
333typedef struct trx_t *ib_trx_t;
334
335/** InnoDB cursor handle */
336typedef struct ib_cursor_t *ib_crsr_t;
337
338/** This function is used to compare two data fields for which the data type
339 is such that we must use the client code to compare them.
340
341 @param col_meta column meta data
342 @param p1 key
343 @param p1_len key length
344 @param p2 second key
345 @param p2_len second key length
346 @return 1, 0, -1, if a is greater, equal, less than b, respectively */
347
348typedef int (*ib_client_cmp_t)(const ib_col_meta_t *col_meta,
349 const ib_byte_t *p1, uint64_t p1_len,
350 const ib_byte_t *p2, uint64_t p2_len);
351
352/* This should be the same as univ.i */
353/** Represents SQL_NULL length */
354constexpr uint32_t IB_SQL_NULL = 0xFFFFFFFF;
355
356/** Start a transaction that's been rolled back. This special function
357 exists for the case when InnoDB's deadlock detector has rolledack
358 a transaction. While the transaction has been rolled back the handle
359 is still valid and can be reused by calling this function. If you
360 don't want to reuse the transaction handle then you can free the handle
361 by calling ib_trx_release().
362 @return innobase txn handle */
364 ib_trx_t ib_trx, /*!< in: transaction to restart */
365 ib_trx_level_t ib_trx_level, /*!< in: trx isolation level */
366 bool read_write, /*!< in: true if read write
367 transaction */
368 bool auto_commit, /*!< in: auto commit after each
369 single DML */
370 void *thd); /*!< in: THD */
371
372/** Begin a transaction. This will allocate a new transaction handle and
373put the transaction in the active state.
374@param[in] ib_trx_level trx isolation level
375@param[in] read_write true if read write transaction
376@param[in] auto_commit auto commit after each single DML
377@param[in,out] thd MySQL THD
378@return innobase txn handle */
379ib_trx_t ib_trx_begin(ib_trx_level_t ib_trx_level, bool read_write,
380 bool auto_commit, void *thd);
381
382/** Check if the transaction is read_only */
383uint32_t ib_trx_read_only(ib_trx_t ib_trx); /*!< in: trx handle */
384
385/** Release the resources of the transaction. If the transaction was
386 selected as a victim by InnoDB and rolled back then use this function
387 to free the transaction handle.
388 @return DB_SUCCESS or err code */
389ib_err_t ib_trx_release(ib_trx_t ib_trx); /*!< in: trx handle */
390
391/** Commit a transaction. This function will release the schema latches too.
392 It will also free the transaction handle.
393 @return DB_SUCCESS or err code */
394ib_err_t ib_trx_commit(ib_trx_t ib_trx); /*!< in: trx handle */
395
396/** Rollback a transaction. This function will release the schema latches too.
397 It will also free the transaction handle.
398 @return DB_SUCCESS or err code */
399ib_err_t ib_trx_rollback(ib_trx_t ib_trx); /*!< in: trx handle */
400
401/** Open an InnoDB secondary index cursor and return a cursor handle to it.
402 @return DB_SUCCESS or err code */
404 ib_crsr_t ib_open_crsr, /*!< in: open/active cursor */
405 const char *index_name, /*!< in: secondary index name */
406 ib_crsr_t *ib_crsr, /*!< out,own: InnoDB index cursor */
407 int *idx_type, /*!< out: index is cluster index */
408 ib_id_u64_t *idx_id); /*!< out: index id */
409
410/** Open an InnoDB table by name and return a cursor handle to it.
411 @return DB_SUCCESS or err code */
413 const char *name, /*!< in: table name */
414 ib_trx_t ib_trx, /*!< in: Current transaction handle
415 can be NULL */
416 ib_crsr_t *ib_crsr); /*!< out,own: InnoDB cursor */
417
418/** Reset the cursor.
419 @return DB_SUCCESS or err code */
420ib_err_t ib_cursor_reset(ib_crsr_t ib_crsr); /*!< in/out: InnoDB cursor */
421
422/** Close an InnoDB table and free the cursor.
423 @return DB_SUCCESS or err code */
424ib_err_t ib_cursor_close(ib_crsr_t ib_crsr); /*!< in/out: InnoDB cursor */
425
426/** update the cursor with new transactions and also reset the cursor
427 @return DB_SUCCESS or err code */
428ib_err_t ib_cursor_new_trx(ib_crsr_t ib_crsr, /*!< in/out: InnoDB cursor */
429 ib_trx_t ib_trx); /*!< in: transaction */
430
431/** Commit the transaction in a cursor
432 @return DB_SUCCESS or err code */
433ib_err_t ib_cursor_commit_trx(ib_crsr_t ib_crsr, /*!< in/out: InnoDB cursor */
434 ib_trx_t ib_trx); /*!< in: transaction */
435
436/** Insert a row to a table.
437 @return DB_SUCCESS or err code */
439 ib_crsr_t ib_crsr, /*!< in/out: InnoDB cursor instance */
440 const ib_tpl_t ib_tpl); /*!< in: tuple to insert */
441
442/** Update a row in a table.
443 @return DB_SUCCESS or err code */
445 ib_crsr_t ib_crsr, /*!< in: InnoDB cursor instance */
446 const ib_tpl_t ib_old_tpl, /*!< in: Old tuple in table */
447 const ib_tpl_t ib_new_tpl); /*!< in: New tuple to update */
448
449/** Delete a row in a table.
450 @return DB_SUCCESS or err code */
451ib_err_t ib_cursor_delete_row(ib_crsr_t ib_crsr); /*!< in: cursor instance */
452
453/** Read current row.
454 @return DB_SUCCESS or err code */
456 ib_crsr_t ib_crsr, /*!< in: InnoDB cursor instance */
457 ib_tpl_t ib_tpl, /*!< out: read cols into this tuple */
458 ib_tpl_t cmp_tpl, /*!< in: tuple to compare and stop
459 reading */
460 int mode, /*!< in: mode determine when to
461 stop read */
462 void **row_buf, /*!< in/out: row buffer */
463 uint64_t *row_len, /*!< in/out: row buffer len */
464 uint64_t *used_len); /*!< in/out: row buffer len used */
465
466/** Move cursor to the first record in the table.
467 @return DB_SUCCESS or err code */
468ib_err_t ib_cursor_first(ib_crsr_t ib_crsr); /*!< in: InnoDB cursor instance */
469
470/** Move cursor to the next record in the table.
471 @return DB_SUCCESS or err code */
472ib_err_t ib_cursor_next(ib_crsr_t ib_crsr); /*!< in: InnoDB cursor instance */
473
474/** Search for key.
475 @return DB_SUCCESS or err code */
476ib_err_t ib_cursor_moveto(ib_crsr_t ib_crsr, /*!< in: InnoDB cursor instance */
477 ib_tpl_t ib_tpl, /*!< in: Key to search for */
478 ib_srch_mode_t ib_srch_mode, /*!< in: search mode */
479 uint64_t direction); /*!< in: search direction */
480
481/** Set the match mode for ib_cursor_move().
482@param[in] ib_crsr Cursor instance
483@param[in] match_mode ib_cursor_moveto match mode*/
485
486/** Set a column of the tuple. Make a copy using the tuple's heap.
487 @param[in] ib_tpl tuple instance
488 @param[in] col_no column index in tuple
489 @param[in] src data value
490 @param[in] len data value len
491 @param[in] need_cpy if need memcpy
492 @return DB_SUCCESS or error code */
493ib_err_t ib_col_set_value(ib_tpl_t ib_tpl, ib_ulint_t col_no, const void *src,
494 uint64_t len, bool need_cpy);
495
496/** Get the size of the data available in the column the tuple.
497 @param[in] ib_tpl tuple instance
498 @param[in] i column index in tuple
499 @return bytes avail or IB_SQL_NULL */
500uint64_t ib_col_get_len(ib_tpl_t ib_tpl, ib_ulint_t i);
501
502/** Copy a column value from the tuple.
503 @param[in] ib_tpl tuple instance
504 @param[in] i in column index in tuple
505 @param[out] dst copied data value
506 @param[in] len max data value len to copy
507 @return bytes copied or IB_SQL_NULL */
508uint64_t ib_col_copy_value(ib_tpl_t ib_tpl, ib_ulint_t i, void *dst,
509 uint32_t len);
510
511/** Read a signed int 8 bit column from an InnoDB tuple.
512 @param[in] ib_tpl InnoDB tuple
513 @param[in] i column number
514 @param[out] ival integer value
515 @return DB_SUCCESS or error */
516ib_err_t ib_tuple_read_i8(ib_tpl_t ib_tpl, ib_ulint_t i, int8_t *ival);
517
518/** Read an unsigned int 8 bit column from an InnoDB tuple.
519 @param[in] ib_tpl InnoDB tuplr
520 @param[in] i column number
521 @param[out] ival integer value
522 @return DB_SUCCESS or error */
523ib_err_t ib_tuple_read_u8(ib_tpl_t ib_tpl, ib_ulint_t i, uint8_t *ival);
524
525/** Read a signed int 16 bit column from an InnoDB tuple.
526 @param[in] ib_tpl InnoDB tuple
527 @param[in] i column number
528 @param[out] ival integer value
529 @return DB_SUCCESS or error */
530ib_err_t ib_tuple_read_i16(ib_tpl_t ib_tpl, ib_ulint_t i, int16_t *ival);
531
532/** Read an unsigned int 16 bit column from an InnoDB tuple.
533 @param[in] ib_tpl InnoDB tuple
534 @param[in] i column number
535 @param[out] ival integer value
536 @return DB_SUCCESS or error */
537ib_err_t ib_tuple_read_u16(ib_tpl_t ib_tpl, ib_ulint_t i, uint16_t *ival);
538
539/** Read a signed int 32 bit column from an InnoDB tuple.
540 @param[in] ib_tpl InnoDB tuple
541 @param[in] i column number
542 @param[out] ival integer value
543 @return DB_SUCCESS or error */
544ib_err_t ib_tuple_read_i32(ib_tpl_t ib_tpl, ib_ulint_t i, int32_t *ival);
545
546/** Read an unsigned int 32 bit column from an InnoDB tuple.
547 @param[in] ib_tpl InnoDB tuple
548 @param[in] i column number
549 @param[out] ival integer value
550 @return DB_SUCCESS or error */
551ib_err_t ib_tuple_read_u32(ib_tpl_t ib_tpl, ib_ulint_t i, uint32_t *ival);
552
553/** Read a signed int 64 bit column from an InnoDB tuple.
554 @param[in] ib_tpl InnoDB tuple
555 @param[in] i column number
556 @param[out] ival integer value
557 @return DB_SUCCESS or error */
558ib_err_t ib_tuple_read_i64(ib_tpl_t ib_tpl, ib_ulint_t i, int64_t *ival);
559
560/** Read an unsigned int 64 bit column from an InnoDB tuple.
561 @param[in] ib_tpl InnoDB tuple
562 @param[in] i column number
563 @param[out] ival integer value
564 @return DB_SUCCESS or error */
565ib_err_t ib_tuple_read_u64(ib_tpl_t ib_tpl, ib_ulint_t i, uint64_t *ival);
566
567/** Get a column value pointer from the tuple.
568 @param[in] ib_tpl tuple instance
569 @param[in] i column index in tuple
570 @return NULL or pointer to buffer */
571const void *ib_col_get_value(ib_tpl_t ib_tpl, ib_ulint_t i);
572
573/** Get a column type, length and attributes from the tuple.
574 @param[in] ib_tpl InnoDB tuple
575 @param[in] i column number
576 @param[out] ib_col_meta column meta data
577 @return len of column data */
578uint64_t ib_col_get_meta(ib_tpl_t ib_tpl, ib_ulint_t i,
579 ib_col_meta_t *ib_col_meta);
580
581/** "Clear" or reset an InnoDB tuple. We free the heap and recreate the tuple.
582 @return new tuple, or NULL */
583ib_tpl_t ib_tuple_clear(ib_tpl_t ib_tpl); /*!< in: InnoDB tuple */
584
585/** Create a new cluster key search tuple and copy the contents of the
586 secondary index key tuple columns that refer to the cluster index record
587 to the cluster key. It does a deep copy of the column data.
588 @param[in] ib_crsr secondary index cursor
589 @param[out] ib_dst_tpl destination tuple
590 @param[in] ib_src_tpl source tuple
591 @return DB_SUCCESS or error code */
593 const ib_tpl_t ib_src_tpl);
594
595/** Create an InnoDB tuple used for index/table search.
596 @param[in] ib_crsr Cursor instance
597 @return tuple for current index */
599
600/** Create an InnoDB tuple used for index/table search.
601 @param[in] ib_crsr Cursor instance
602 @return tuple for current index */
604
605/** Create an InnoDB tuple used for table key operations.
606* @param[in] ib_crsr Cursor instance
607 @return tuple for current table */
609
610/** Create an InnoDB tuple for table row operations.
611 @param[in] ib_crsr Cursor instance
612 @return tuple for current table */
614
615/** Return the number of user columns in the tuple definition.
616 @param[in] ib_tpl Tuple for current table
617 @return number of user columns */
618uint64_t ib_tuple_get_n_user_cols(const ib_tpl_t ib_tpl);
619
620/** Return the number of columns in the tuple definition.
621 @param[in] ib_tpl Tuple for current table
622 @return number of columns */
623uint64_t ib_tuple_get_n_cols(const ib_tpl_t ib_tpl);
624
625/** Destroy an InnoDB tuple.
626 @param[in] ib_tpl Tuple for current table*/
627void ib_tuple_delete(ib_tpl_t ib_tpl);
628
629/** Get a table id.
630 @param[in] table_name table_to_find
631 @param[out] table_id table id if found
632 @return DB_SUCCESS if found */
633ib_err_t ib_table_get_id(const char *table_name, ib_id_u64_t *table_id);
634
635/** Check if cursor is positioned.
636 @param[in] ib_crsr InnoDB cursor instance
637 @return IB_true if positioned */
638bool ib_cursor_is_positioned(const ib_crsr_t ib_crsr);
639
640/** Checks if the data dictionary is latched in exclusive mode by a
641 user transaction.
642 @param[in] ib_trx transaction
643 @return true if exclusive latch */
644bool ib_schema_lock_is_exclusive(const ib_trx_t ib_trx);
645
646/** Lock an InnoDB cursor/table.
647 @param[in,out] ib_crsr InnoDB cursor
648 @param[in] ib_lck_mode InnoDB lock mode
649 @return DB_SUCCESS or error code */
650ib_err_t ib_cursor_lock(ib_crsr_t ib_crsr, ib_lck_mode_t ib_lck_mode);
651
652/** Set the Lock mode of the cursor.
653 @param[in,out] ib_crsr InnoDB cursor
654 @param[in] ib_lck_mode InnoDB lock mode
655 @return DB_SUCCESS or error code */
657
658/** Set need to access clustered index record flag.
659 @param[in,out] ib_crsr InnoDB cursor */
661
662/** Inform the cursor that it's the start of an SQL statement.
663 @param[in,out] ib_crsr InnoDB cursor */
664void ib_cursor_stmt_begin(ib_crsr_t ib_crsr);
665
666/** Write a double value to a column.
667 @param[in] ib_tpl InnoDB tuple
668 @param[in] col_no column number
669 @param[in] val value to write
670 @return DB_SUCCESS or error */
671ib_err_t ib_tuple_write_double(ib_tpl_t ib_tpl, int col_no, double val);
672
673/** Read a double column value from an InnoDB tuple.
674 @param[in] ib_tpl InnoDB tuple
675 @param[in] col_no column number
676 @param[out] dval double value
677 @return DB_SUCCESS or error */
678ib_err_t ib_tuple_read_double(ib_tpl_t ib_tpl, uint64_t col_no, double *dval);
679
680/** Write a float value to a column.
681 @param[in,out] ib_tpl tuple to write to
682 @param[in] col_no column number
683 @param[in] val value to write
684 @return DB_SUCCESS or error */
685ib_err_t ib_tuple_write_float(ib_tpl_t ib_tpl, int col_no, float val);
686
687/** Read a float value from an InnoDB tuple.
688 @param[in] ib_tpl InnoDB tuple
689 @param[in] col_no column number
690 @param[out] fval float value
691 @return DB_SUCCESS or error */
692ib_err_t ib_tuple_read_float(ib_tpl_t ib_tpl, uint64_t col_no, float *fval);
693
694/** Get a column type, length and attributes from the tuple.
695 @param[in] ib_crsr InnoDB cursor instance
696 @param[in] i column index in tuple
697 @return len of column data */
698const char *ib_col_get_name(ib_crsr_t ib_crsr, ib_ulint_t i);
699
700/** Get an index field name from the cursor.
701 @param[in] ib_crsr InnoDB cursor instance
702 @param[in] i column index in tuple
703 @return name of the field */
704const char *ib_get_idx_field_name(ib_crsr_t ib_crsr, ib_ulint_t i);
705
706/** Get generic configure status
707 @return configure status*/
708int ib_cfg_get_cfg();
709
710/** Return isolation configuration set by "innodb_api_trx_level"
711 @return trx isolation level*/
713
714/** Return configure value for background commit interval (in seconds)
715 @return background commit interval (in seconds) */
717
718/** Get a trx start time.
719 @return trx start_time */
720uint64_t ib_trx_get_start_time(ib_trx_t ib_trx); /*!< in: transaction */
721
722/** Wrapper of ut_strerr() which converts an InnoDB error number to a
723 human readable text message.
724 @return string, describing the error */
725const char *ib_ut_strerr(ib_err_t num); /*!< in: error number */
726
727/** Get the SDI keys in a tablespace into vector.
728@param[in] tablespace_id tablespace id
729@param[in,out] ib_sdi_vector vector to hold objects with tablespace types
730and ids
731@param[in,out] trx data dictionary transaction
732@return DB_SUCCESS if SDI keys retrieval is successful, else error */
734 ib_trx_t trx);
735
736/** Retrieve SDI from tablespace
737@param[in] tablespace_id tablespace id
738@param[in] ib_sdi_key SDI key
739@param[in,out] comp_sdi in: buffer to hold the SDI BLOB
740 out: compressed SDI retrieved from tablespace
741@param[in,out] comp_sdi_len in: Size of memory allocated
742 out: compressed length of SDI
743@param[out] uncomp_sdi_len out: uncompressed length of SDI
744@param[in,out] trx innodb transaction
745@return DB_SUCCESS if SDI retrieval is successful, else error
746in case the passed buffer length is smaller than the actual SDI
747DB_OUT_OF_MEMORY is thrown and uncompressed length is set in
748uncomp_sdi_len */
749ib_err_t ib_sdi_get(uint32_t tablespace_id, const ib_sdi_key_t *ib_sdi_key,
750 void *comp_sdi, uint32_t *comp_sdi_len,
751 uint32_t *uncomp_sdi_len, ib_trx_t trx);
752
753/** Insert/Update SDI in tablespace
754@param[in] tablespace_id tablespace id
755@param[in] sdi_key SDI key to uniquely identify the tablespace
756 object
757@param[in] uncomp_len uncompressed length of SDI
758@param[in] comp_len compressed length of SDI
759@param[in] sdi compressed SDI to be stored in tablespace
760@param[in,out] trx innodb transaction
761@return DB_SUCCESS if SDI Insert/Update is successful, else error */
762ib_err_t ib_sdi_set(uint32_t tablespace_id, const ib_sdi_key_t *sdi_key,
763 uint32_t uncomp_len, uint32_t comp_len, const void *sdi,
764 ib_trx_t trx);
765
766/** Delete SDI from tablespace.
767@param[in] tablespace_id tablespace id
768@param[in] sdi_key SDI key to uniquely identify the tablespace
769object
770@param[in,out] trx innodb transaction
771@return DB_SUCCESS if SDI deletion is successful, else error */
772ib_err_t ib_sdi_delete(uint32_t tablespace_id, const ib_sdi_key_t *sdi_key,
773 ib_trx_t trx);
774
775/** Create SDI in a tablespace
776@param[in] tablespace_id InnoDB tablespace id
777@return DB_SUCCESS if SDI index creation is successful, else error */
778ib_err_t ib_sdi_create(space_id_t tablespace_id);
779
780/** Drop SDI Index from tablespace. This should be used only when SDI
781is corrupted.
782@param[in] tablespace_id InnoDB tablespace id
783@return DB_SUCCESS if dropping of SDI indexes is successful, else error */
784ib_err_t ib_sdi_drop(space_id_t tablespace_id);
785
786/** Flush SDI in a tablespace. The pages of a SDI Index modified by the
787transaction will be flushed to disk.
788@param[in] space_id tablespace id
789@return DB_SUCCESS always */
791
792#ifdef UNIV_MEMCACHED_SDI
793/** Wrapper function to retrieve SDI from tablespace.
794@param[in] crsr Memcached cursor
795@param[in] key Memcached key
796@param[in,out] sdi SDI data retrieved
797@param[in,out] sdi_len in: Size of allocated memory
798 out: Actual SDI length
799@return DB_SUCCESS if SDI retrieval is successful, else error */
800ib_err_t ib_memc_sdi_get(ib_crsr_t crsr, const char *key, void *sdi,
801 uint64_t *sdi_len);
802
803/** Wrapper function to delete SDI from tablespace.
804@param[in,out] crsr Memcached cursor
805@param[in] key Memcached key
806@return DB_SUCCESS if SDI deletion is successful, else error */
807ib_err_t ib_memc_sdi_delete(ib_crsr_t crsr, const char *key);
808
809/** Wrapper function to insert SDI into tablespace.
810@param[in] crsr Memcached cursor
811@param[in] key Memcached key
812@param[in] sdi SDI to be stored in tablespace
813@param[in] sdi_len SDI length
814@return DB_SUCCESS if SDI insertion is successful, else error */
815ib_err_t ib_memc_sdi_set(ib_crsr_t crsr, const char *key, const void *sdi,
816 uint64_t *sdi_len);
817
818/** Wrapper function to create SDI in a tablespace.
819@param[in,out] crsr Memcached cursor
820@return DB_SUCCESS if SDI creation is successful, else error */
821ib_err_t ib_memc_sdi_create(ib_crsr_t crsr);
822
823/** Wrapper function to drop SDI in a tablespace.
824@param[in,out] crsr Memcached cursor
825@return DB_SUCCESS if dropping of SDI is successful, else error */
826ib_err_t ib_memc_sdi_drop(ib_crsr_t crsr);
827
828/* Wrapper function to retrieve list of SDI keys into the buffer
829The SDI keys are copied in the from x:y and separated by '|'.
830@param[in,out] crsr Memcached cursor
831@param[in] key Memcached key
832@param[out] sdi The keys are copies into this buffer
833@return DB_SUCCESS if SDI keys retrieval is successful, else error */
834ib_err_t ib_memc_sdi_get_keys(ib_crsr_t crsr, const char *key, void *sdi,
835 uint64_t list_buf_len);
836#endif /* UNIV_MEMCACHED_SDI */
837
838/** Check the table whether it contains virtual columns.
839@param[in] crsr InnoDB Cursor
840@return true if the table contains virtual column else failure. */
842
843#ifdef UNIV_MEMCACHED_SDI
844#define ONLY_FOR_MEMCACHED_SDI(x) x
845#else
846#define ONLY_FOR_MEMCACHED_SDI(x)
847#endif
848
849#define FOR_EACH_API_METHOD_NAME_STEM(transform) \
850 transform(cursor_open_table) /**/ \
851 transform(cursor_read_row) /**/ \
852 transform(cursor_insert_row) /**/ \
853 transform(cursor_delete_row) /**/ \
854 transform(cursor_update_row) /**/ \
855 transform(cursor_moveto) /**/ \
856 transform(cursor_first) /**/ \
857 transform(cursor_next) /**/ \
858 transform(cursor_set_match_mode) /**/ \
859 transform(sec_search_tuple_create) /**/ \
860 transform(clust_read_tuple_create) /**/ \
861 transform(tuple_delete) /**/ \
862 transform(tuple_read_u8) /**/ \
863 transform(tuple_read_u16) /**/ \
864 transform(tuple_read_u32) /**/ \
865 transform(tuple_read_u64) /**/ \
866 transform(tuple_read_i8) /**/ \
867 transform(tuple_read_i16) /**/ \
868 transform(tuple_read_i32) /**/ \
869 transform(tuple_read_i64) /**/ \
870 transform(tuple_get_n_cols) /**/ \
871 transform(col_set_value) /**/ \
872 transform(col_get_value) /**/ \
873 transform(col_get_meta) /**/ \
874 transform(trx_begin) /**/ \
875 transform(trx_commit) /**/ \
876 transform(trx_rollback) /**/ \
877 transform(trx_start) /**/ \
878 transform(trx_release) /**/ \
879 transform(cursor_lock) /**/ \
880 transform(cursor_close) /**/ \
881 transform(cursor_new_trx) /**/ \
882 transform(cursor_reset) /**/ \
883 transform(col_get_name) /**/ \
884 transform(cursor_open_index_using_name) /**/ \
885 transform(cfg_get_cfg) /**/ \
886 transform(cursor_set_cluster_access) /**/ \
887 transform(cursor_commit_trx) /**/ \
888 transform(cfg_trx_level) /**/ \
889 transform(tuple_get_n_user_cols) /**/ \
890 transform(cursor_set_lock_mode) /**/ \
891 transform(get_idx_field_name) /**/ \
892 transform(trx_get_start_time) /**/ \
893 transform(cfg_bk_commit_interval) /**/ \
894 transform(ut_strerr) /**/ \
895 transform(cursor_stmt_begin) /**/ \
896 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_get)) /**/ \
897 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_delete)) /**/ \
898 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_set)) /**/ \
899 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_create)) /**/ \
900 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_drop)) /**/ \
901 ONLY_FOR_MEMCACHED_SDI(transform(memc_sdi_get_keys)) /**/ \
902 transform(trx_read_only) /**/ \
903 transform(is_virtual_table) /**/
904
905#endif /* api0api_h */
constexpr uint32_t IB_SQL_NULL
Represents SQL_NULL length.
Definition: api0api.h:354
void ib_tuple_delete(ib_tpl_t ib_tpl)
Destroy an InnoDB tuple.
Definition: api0api.cc:2453
ib_tpl_t ib_sec_search_tuple_create(ib_crsr_t ib_crsr)
Create an InnoDB tuple used for index/table search.
Definition: api0api.cc:2375
ib_err_t ib_sdi_delete(uint32_t tablespace_id, const ib_sdi_key_t *sdi_key, ib_trx_t trx)
Delete SDI from tablespace.
ib_cfg_type_t
Possible types for a configuration variable.
Definition: api0api.h:73
@ IB_CFG_ULINT
The configuration parameter is of type ulint.
Definition: api0api.h:89
@ IB_CFG_ULONG
The configuration parameter is of type ulong.
Definition: api0api.h:92
@ IB_CFG_TEXT
The configuration parameter is of type char*.
Definition: api0api.h:95
@ IB_CFG_CB
The configuration parameter is a callback parameter.
Definition: api0api.h:98
@ IB_CFG_BOOL
The configuration parameter is of type bool.
Definition: api0api.h:74
ib_err_t ib_cursor_first(ib_crsr_t ib_crsr)
Move cursor to the first record in the table.
Definition: api0api.cc:1695
bool ib_is_virtual_table(ib_crsr_t crsr)
Check the table whether it contains virtual columns.
Definition: api0api.cc:895
ib_err_t ib_sdi_flush(space_id_t space_id)
Flush SDI in a tablespace.
Definition: api0api.cc:3173
ib_err_t ib_col_set_value(ib_tpl_t ib_tpl, ib_ulint_t col_no, const void *src, uint64_t len, bool need_cpy)
Set a column of the tuple.
Definition: api0api.cc:1814
ib_err_t ib_cursor_moveto(ib_crsr_t ib_crsr, ib_tpl_t ib_tpl, ib_srch_mode_t ib_srch_mode, uint64_t direction)
Search for key.
Definition: api0api.cc:1725
uint64_t ib_trx_get_start_time(ib_trx_t ib_trx)
Get a trx start time.
Definition: api0api.cc:564
ib_err_t ib_tuple_read_i64(ib_tpl_t ib_tpl, ib_ulint_t i, int64_t *ival)
Read a signed int 64 bit column from an InnoDB tuple.
Definition: api0api.cc:2244
ib_tpl_t ib_clust_search_tuple_create(ib_crsr_t ib_crsr)
Create an InnoDB tuple used for table key operations.
Definition: api0api.cc:2400
enum dberr_t ib_err_t
All InnoDB error codes are represented by ib_err_t.
Definition: api0api.h:57
ib_err_t ib_tuple_read_i16(ib_tpl_t ib_tpl, ib_ulint_t i, int16_t *ival)
Read a signed int 16 bit column from an InnoDB tuple.
Definition: api0api.cc:2196
constexpr uint32_t IB_CFG_BINLOG_ENABLED
Definition: api0api.h:297
unsigned char ib_byte_t
Representation of a byte within InnoDB.
Definition: api0api.h:59
ib_err_t ib_trx_rollback(ib_trx_t ib_trx)
Rollback a transaction.
Definition: api0api.cc:602
ib_err_t ib_tuple_write_double(ib_tpl_t ib_tpl, int col_no, double val)
Write a double value to a column.
Definition: api0api.cc:2559
ib_tpl_t ib_tuple_clear(ib_tpl_t ib_tpl)
"Clear" or reset an InnoDB tuple.
Definition: api0api.cc:2284
uint64_t ib_tuple_get_n_user_cols(const ib_tpl_t ib_tpl)
Return the number of user columns in the tuple definition.
Definition: api0api.cc:2430
struct ib_cursor_t * ib_crsr_t
InnoDB cursor handle.
Definition: api0api.h:336
constexpr uint32_t IB_CFG_MDL_ENABLED
Definition: api0api.h:298
FILE * ib_msg_stream_t
The first argument to the InnoDB message logging function.
Definition: api0api.h:308
ib_err_t ib_sdi_drop(space_id_t tablespace_id)
Drop SDI Index from tablespace.
Definition: api0api.cc:3119
ib_err_t ib_cursor_open_index_using_name(ib_crsr_t ib_open_crsr, const char *index_name, ib_crsr_t *ib_crsr, int *idx_type, ib_id_u64_t *idx_id)
Open an InnoDB secondary index cursor and return a cursor handle to it.
Definition: api0api.cc:780
ib_err_t ib_tuple_get_cluster_key(ib_crsr_t ib_crsr, ib_tpl_t *ib_dst_tpl, const ib_tpl_t ib_src_tpl)
Create a new cluster key search tuple and copy the contents of the secondary index key tuple columns ...
Definition: api0api.cc:2308
ib_err_t ib_cursor_update_row(ib_crsr_t ib_crsr, const ib_tpl_t ib_old_tpl, const ib_tpl_t ib_new_tpl)
Update a row in a table.
Definition: api0api.cc:1425
ib_err_t ib_tuple_read_double(ib_tpl_t ib_tpl, uint64_t col_no, double *dval)
Read a double column value from an InnoDB tuple.
Definition: api0api.cc:2578
uint32_t space_id_t
Tablespace identifier.
Definition: api0api.h:50
void ib_cursor_set_match_mode(ib_crsr_t ib_crsr, ib_match_mode_t match_mode)
Set the match mode for ib_cursor_move().
Definition: api0api.cc:1777
static const size_t REC_BUF_SLOT_SIZE
Used by ib_read_tuple to determine number of bytes to allocate for new slot if needed.
Definition: api0api.h:303
ib_err_t ib_cursor_close(ib_crsr_t ib_crsr)
Close an InnoDB table and free the cursor.
Definition: api0api.cc:977
ib_err_t ib_cursor_insert_row(ib_crsr_t ib_crsr, const ib_tpl_t ib_tpl)
Insert a row to a table.
Definition: api0api.cc:1127
ib_err_t ib_sdi_create(space_id_t tablespace_id)
Create SDI in a tablespace.
Definition: api0api.cc:3082
ib_tbl_fmt_t
InnoDB table format types.
Definition: api0api.h:145
@ IB_TBL_COMPRESSED
Similar to dynamic format but with pages compressed.
Definition: api0api.h:160
@ IB_TBL_DYNAMIC
Compact row format.
Definition: api0api.h:157
@ IB_TBL_COMPACT
Compact row format, the column type is not stored in the row.
Definition: api0api.h:149
@ IB_TBL_REDUNDANT
Redundant row format, the column type and length is stored in the row.
Definition: api0api.h:146
ib_err_t ib_cursor_lock(ib_crsr_t ib_crsr, ib_lck_mode_t ib_lck_mode)
Lock an InnoDB cursor/table.
Definition: api0api.cc:2501
ib_err_t ib_tuple_read_u16(ib_tpl_t ib_tpl, ib_ulint_t i, uint16_t *ival)
Read an unsigned int 16 bit column from an InnoDB tuple.
Definition: api0api.cc:2208
ib_err_t ib_sdi_set(uint32_t tablespace_id, const ib_sdi_key_t *sdi_key, uint32_t uncomp_len, uint32_t comp_len, const void *sdi, ib_trx_t trx)
Insert/Update SDI in tablespace.
ib_err_t ib_sdi_get(uint32_t tablespace_id, const ib_sdi_key_t *ib_sdi_key, void *comp_sdi, uint32_t *comp_sdi_len, uint32_t *uncomp_sdi_len, ib_trx_t trx)
Retrieve SDI from tablespace.
ib_err_t ib_tuple_write_float(ib_tpl_t ib_tpl, int col_no, float val)
Write a float value to a column.
uint64_t ib_col_get_meta(ib_tpl_t ib_tpl, ib_ulint_t i, ib_col_meta_t *ib_col_meta)
Get a column type, length and attributes from the tuple.
Definition: api0api.cc:2123
constexpr uint32_t IB_CFG_DISABLE_ROWLOCK
Definition: api0api.h:299
uint64_t ib_col_get_len(ib_tpl_t ib_tpl, ib_ulint_t i)
Get the size of the data available in the column the tuple.
Definition: api0api.cc:1989
ib_tpl_t ib_clust_read_tuple_create(ib_crsr_t ib_crsr)
Create an InnoDB tuple for table row operations.
Definition: api0api.cc:2415
ib_err_t ib_cursor_commit_trx(ib_crsr_t ib_crsr, ib_trx_t ib_trx)
Commit the transaction in a cursor.
Definition: api0api.cc:960
ib_err_t ib_cursor_new_trx(ib_crsr_t ib_crsr, ib_trx_t ib_trx)
update the cursor with new transactions and also reset the cursor
Definition: api0api.cc:936
ib_err_t ib_tuple_read_i8(ib_tpl_t ib_tpl, ib_ulint_t i, int8_t *ival)
Read a signed int 8 bit column from an InnoDB tuple.
Definition: api0api.cc:2172
bool ib_cursor_is_positioned(const ib_crsr_t ib_crsr)
Check if cursor is positioned.
Definition: api0api.cc:2483
uint64_t ib_cfg_bk_commit_interval()
Return configure value for background commit interval (in seconds)
Definition: api0api.cc:2641
bool ib_schema_lock_is_exclusive(const ib_trx_t ib_trx)
Checks if the data dictionary is latched in exclusive mode by a user transaction.
Definition: api0api.cc:2492
ib_trx_t ib_trx_begin(ib_trx_level_t ib_trx_level, bool read_write, bool auto_commit, void *thd)
Begin a transaction.
Definition: api0api.cc:535
ib_tpl_t ib_sec_read_tuple_create(ib_crsr_t ib_crsr)
Create an InnoDB tuple used for index/table search.
Definition: api0api.cc:2388
ib_match_mode_t
Various match modes used by ib_cursor_moveto()
Definition: api0api.h:238
@ IB_EXACT_MATCH
Search using a complete key value.
Definition: api0api.h:241
@ IB_EXACT_PREFIX
Search using a key prefix which must match to rows: the prefix may contain an incomplete field (the l...
Definition: api0api.h:244
@ IB_CLOSEST_MATCH
Closest match possible.
Definition: api0api.h:239
ib_err_t ib_cursor_reset(ib_crsr_t ib_crsr)
Reset the cursor.
Definition: api0api.cc:915
uint64_t ib_tuple_get_n_cols(const ib_tpl_t ib_tpl)
Return the number of columns in the tuple definition.
Definition: api0api.cc:2444
ib_trx_level_t
Transaction isolation levels.
Definition: api0api.h:267
@ IB_TRX_SERIALIZABLE
All plain SELECTs are converted to LOCK IN SHARE MODE reads.
Definition: api0api.h:290
@ IB_TRX_READ_COMMITTED
Somewhat Oracle-like isolation, except that in range UPDATE and DELETE we must block phantom rows wit...
Definition: api0api.h:275
@ IB_TRX_READ_UNCOMMITTED
Dirty read: non-locking SELECTs are performed so that we do not look at a possible earlier version of...
Definition: api0api.h:268
@ IB_TRX_REPEATABLE_READ
All consistent reads in the same trx read the same snapshot; full next-key locking used in locking re...
Definition: api0api.h:285
ib_col_type_t
column types that are supported.
Definition: api0api.h:103
@ IB_DECIMAL
C (double) floating point value.
Definition: api0api.h:135
@ IB_INT
Integer: can be any size from 1 - 8 bytes.
Definition: api0api.h:119
@ IB_DOUBLE
Definition: api0api.h:133
@ IB_SYS
System column, this column can be one of DATA_TRX_ID, DATA_ROLL_PTR or DATA_ROW_ID.
Definition: api0api.h:127
@ IB_VARBINARY
Variable length binary.
Definition: api0api.h:114
@ IB_CHAR_ANYCHARSET
Any charset, fixed length.
Definition: api0api.h:140
@ IB_BINARY
Fixed length binary, similar to IB_CHAR but the column is not padded to the right.
Definition: api0api.h:110
@ IB_VARCHAR
Character varying length.
Definition: api0api.h:104
@ IB_FLOAT
C (float) floating point value.
Definition: api0api.h:131
@ IB_CHAR
Fixed length character string.
Definition: api0api.h:107
@ IB_BLOB
Binary large object, or a TEXT type.
Definition: api0api.h:116
@ IB_VARCHAR_ANYCHARSET
Any charset, varying length.
Definition: api0api.h:138
struct ib_tuple_t * ib_tpl_t
InnoDB tuple handle.
Definition: api0api.h:324
ib_err_t ib_table_get_id(const char *table_name, ib_id_u64_t *table_id)
Get a table id.
Definition: api0api.cc:2466
void * ib_opaque_t
Definition: api0api.h:68
uint64_t ib_col_copy_value(ib_tpl_t ib_tpl, ib_ulint_t i, void *dst, uint32_t len)
Copy a column value from the tuple.
Definition: api0api.cc:2001
ib_err_t ib_tuple_read_float(ib_tpl_t ib_tpl, uint64_t col_no, float *fval)
Read a float value from an InnoDB tuple.
ib_err_t ib_tuple_read_u8(ib_tpl_t ib_tpl, ib_ulint_t i, uint8_t *ival)
Read an unsigned int 8 bit column from an InnoDB tuple.
Definition: api0api.cc:2184
ib_col_attr_t
InnoDB column attributes.
Definition: api0api.h:165
@ IB_COL_NONE
No special attributes.
Definition: api0api.h:166
@ IB_COL_NOT_USED
Future use, reserved.
Definition: api0api.h:172
@ IB_COL_CUSTOM3
Custom precision type, this is a bit that is ignored by InnoDB and so can be set and queried by users...
Definition: api0api.h:182
@ IB_COL_CUSTOM1
Custom precision type, this is a bit that is ignored by InnoDB and so can be set and queried by users...
Definition: api0api.h:174
@ IB_COL_CUSTOM2
Custom precision type, this is a bit that is ignored by InnoDB and so can be set and queried by users...
Definition: api0api.h:178
@ IB_COL_UNSIGNED
Column is IB_INT and unsigned.
Definition: api0api.h:170
@ IB_COL_NOT_NULL
Column data can't be NULL.
Definition: api0api.h:168
ib_opaque_t ib_charset_t
Definition: api0api.h:69
ib_err_t ib_cursor_next(ib_crsr_t ib_crsr)
Move cursor to the next record in the table.
Definition: api0api.cc:1704
void ib_cursor_stmt_begin(ib_crsr_t ib_crsr)
Inform the cursor that it's the start of an SQL statement.
Definition: api0api.cc:2550
ib_err_t ib_tuple_read_i32(ib_tpl_t ib_tpl, ib_ulint_t i, int32_t *ival)
Read a signed int 32 bit column from an InnoDB tuple.
Definition: api0api.cc:2220
ib_lck_mode_t
InnoDB lock modes.
Definition: api0api.h:189
@ IB_LOCK_X
Exclusive locks should be used to lock rows.
Definition: api0api.h:199
@ IB_LOCK_IS
Intention shared, an intention lock should be used to lock tables.
Definition: api0api.h:190
@ IB_LOCK_TABLE_X
exclusive table lock
Definition: api0api.h:202
@ IB_LOCK_IX
Intention exclusive, an intention lock should be used to lock tables.
Definition: api0api.h:193
@ IB_LOCK_S
Shared locks should be used to lock rows.
Definition: api0api.h:196
@ IB_LOCK_NONE
This is used internally to note consistent read.
Definition: api0api.h:204
@ IB_LOCK_NUM
number of lock modes
Definition: api0api.h:207
const char * ib_get_idx_field_name(ib_crsr_t ib_crsr, ib_ulint_t i)
Get an index field name from the cursor.
Definition: api0api.cc:2108
ib_err_t ib_cursor_set_lock_mode(ib_crsr_t ib_crsr, ib_lck_mode_t ib_lck_mode)
Set the Lock mode of the cursor.
Definition: api0api.cc:2515
ib_trx_level_t ib_cfg_trx_level()
Return isolation configuration set by "innodb_api_trx_level".
Definition: api0api.cc:2635
uint32_t ib_trx_read_only(ib_trx_t ib_trx)
Check if the transaction is read_only.
Definition: api0api.cc:556
int(* ib_msg_log_t)(ib_msg_stream_t, const char *,...)
All log messages are written to this function.It should have the same behavior as fprintf(3).
Definition: api0api.h:312
ib_err_t ib_tuple_read_u32(ib_tpl_t ib_tpl, ib_ulint_t i, uint32_t *ival)
Read an unsigned int 32 bit column from an InnoDB tuple.
Definition: api0api.cc:2232
ib_err_t ib_sdi_get_keys(uint32_t tablespace_id, ib_sdi_vector_t *ib_sdi_vector, ib_trx_t trx)
Get the SDI keys in a tablespace into vector.
const char * ib_ut_strerr(ib_err_t num)
Wrapper of ut_strerr() which converts an InnoDB error number to a human readable text message.
Definition: api0api.cc:2664
uint64_t ib_id_u64_t
Definition: api0api.h:70
int(* ib_client_cmp_t)(const ib_col_meta_t *col_meta, const ib_byte_t *p1, uint64_t p1_len, const ib_byte_t *p2, uint64_t p2_len)
This function is used to compare two data fields for which the data type is such that we must use the...
Definition: api0api.h:348
uint32_t page_no_t
Page number.
Definition: api0api.h:48
ib_err_t ib_cursor_delete_row(ib_crsr_t ib_crsr)
Delete a row in a table.
Definition: api0api.cc:1528
ib_err_t ib_cursor_read_row(ib_crsr_t ib_crsr, ib_tpl_t ib_tpl, ib_tpl_t cmp_tpl, int mode, void **row_buf, uint64_t *row_len, uint64_t *used_len)
Read current row.
Definition: api0api.cc:1596
ib_err_t ib_tuple_read_u64(ib_tpl_t ib_tpl, ib_ulint_t i, uint64_t *ival)
Read an unsigned int 64 bit column from an InnoDB tuple.
Definition: api0api.cc:2256
ib_err_t ib_trx_start(ib_trx_t ib_trx, ib_trx_level_t ib_trx_level, bool read_write, bool auto_commit, void *thd)
Start a transaction that's been rolled back.
Definition: api0api.cc:503
void(* ib_cb_t)(void)
Generical InnoDB callback prototype.
Definition: api0api.h:295
ib_err_t ib_cursor_open_table(const char *name, ib_trx_t ib_trx, ib_crsr_t *ib_crsr)
Open an InnoDB table by name and return a cursor handle to it.
Definition: api0api.cc:845
int ib_cfg_get_cfg()
Get generic configure status.
Definition: api0api.cc:2645
ib_err_t ib_trx_commit(ib_trx_t ib_trx)
Commit a transaction.
Definition: api0api.cc:585
const void * ib_col_get_value(ib_tpl_t ib_tpl, ib_ulint_t i)
Get a column value pointer from the tuple.
Definition: api0api.cc:2268
struct trx_t * ib_trx_t
InnoDB transaction handle, all database operations need to be covered by transactions.
Definition: api0api.h:333
ib_index_type_t
Definition: api0api.h:210
@ IB_UNIQUE
unique index
Definition: api0api.h:212
@ IB_CLUSTERED
clustered index
Definition: api0api.h:211
ib_err_t ib_trx_release(ib_trx_t ib_trx)
Release the resources of the transaction.
Definition: api0api.cc:572
ib_srch_mode_t
InnoDB cursor search modes for ib_cursor_moveto().
Definition: api0api.h:217
@ IB_CUR_L
If search key is not found then position the cursor on the row that is less than the search key.
Definition: api0api.h:227
@ IB_CUR_GE
If the search key not found then position the cursor on the row that is greater than or equal to the ...
Definition: api0api.h:222
@ IB_CUR_G
If search key is not found then position the cursor on the row that is greater than the search key.
Definition: api0api.h:218
@ IB_CUR_LE
If search key is not found then position the cursor on the row that is less than or equal to the sear...
Definition: api0api.h:231
void ib_cursor_set_cluster_access(ib_crsr_t ib_crsr)
Set need to access clustered index record flag.
Definition: api0api.cc:2540
const char * ib_col_get_name(ib_crsr_t ib_crsr, ib_ulint_t i)
Get a column type, length and attributes from the tuple.
Definition: api0api.cc:2096
unsigned long int ib_ulint_t
Representation of an unsigned long int within InnoDB.
Definition: api0api.h:65
Global error codes for the database.
dberr_t
Definition: db0err.h:38
#define dval(x)
Definition: dtoa.cc:607
const std::string FILE("FILE")
const char * table_name
Definition: rules_table_service.cc:55
mode
Definition: file_handle.h:59
required string key
Definition: replication_asynchronous_connection_failover.proto:59
case opt name
Definition: sslopt-case.h:32
InnoDB column meta data.
Definition: api0api.h:252
ib_col_type_t type
Type of the column.
Definition: api0api.h:253
ib_charset_t * charset
Column charset.
Definition: api0api.h:262
uint32_t type_len
Length of type.
Definition: api0api.h:257
ib_col_attr_t attr
Column attributes.
Definition: api0api.h:255
uint16_t client_type
16 bits of data relevant only to the client.
Definition: api0api.h:259
Cursor instance for traversing tables/indexes.
Definition: api0api.cc:123
ib_match_mode_t match_mode
ib_cursor_moveto match mode
Definition: api0api.cc:130
Definition: api0misc.h:60
Definition: api0misc.h:64
InnoDB tuple used for key operations.
Definition: api0api.cc:199
Definition: trx0trx.h:680