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