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