2007-11-29 14:27:03 +00:00
/* -*- mode: C; c-basic-offset: 4 -*- */
2008-01-24 15:10:32 +00:00
# ident "Copyright (c) 2007, 2008 Tokutek Inc. All rights reserved."
2007-11-29 14:27:03 +00:00
/* LICENSE: This file is licensed under the GPL or from Tokutek. */
2007-09-04 20:59:50 +00:00
/* Make a db.h that will be link-time compatible with Sleepycat's Berkeley DB. */
# include <db.h>
# include <stdio.h>
# include <stdlib.h>
2007-09-04 21:39:03 +00:00
# include <assert.h>
# include <string.h>
2013-04-16 23:58:56 -04:00
# include <stdint.h>
2007-09-04 20:59:50 +00:00
2008-03-05 11:54:58 +00:00
# define VISIBLE "__attribute__((__visibility__(\"default\")))"
2007-09-04 20:59:50 +00:00
2013-04-16 23:59:01 -04:00
static void print_dbtype ( void ) {
2007-09-04 20:59:50 +00:00
/* DBTYPE is mentioned by db_open.html */
printf ( " typedef enum { \n " ) ;
2007-12-11 19:34:21 +00:00
printf ( " DB_BTREE=%d, \n " , DB_BTREE ) ;
printf ( " DB_UNKNOWN=%d \n " , DB_UNKNOWN ) ;
2007-09-04 20:59:50 +00:00
printf ( " } DBTYPE; \n " ) ;
}
2007-10-09 22:00:34 +00:00
#if 0
2007-09-06 14:18:08 +00:00
void print_db_notices ( void ) {
printf ( " typedef enum { /* This appears to be a mysql-specific addition to the api. */ \n " ) ;
printf ( " DB_NOTICE_LOGFILE_CHANGED=%d \n " , DB_NOTICE_LOGFILE_CHANGED ) ;
printf ( " } db_notices; \n " ) ;
}
2007-10-09 22:00:34 +00:00
# endif
2007-09-06 14:18:08 +00:00
# define dodefine(name) printf("#define %s %d\n", #name, name)
2013-04-16 23:58:56 -04:00
# define dodefine_track(flags, name) do {assert((flags & name) != name); \
flags | = ( name ) ; \
printf ( " #define %s %d \n " , # name , name ) ; } while ( 0 )
# define dodefine_from_track(flags, name) do { \
uint32_t which ; \
uint32_t bit ; \
for ( which = 0 ; which < 32 ; which + + ) { \
bit = 1U < < which ; \
if ( ! ( flags & bit ) ) break ; \
} \
assert ( which < 32 ) ; \
printf ( " #define %s %d \n " , # name , bit ) ; \
2013-04-16 23:59:22 -04:00
flags | = bit ; \
2013-04-16 23:58:56 -04:00
} while ( 0 )
2007-09-06 14:18:08 +00:00
2013-04-16 23:59:00 -04:00
# define dodefine_track_enum(flags, name) do {assert(name>=0 && name<256); \
assert ( ! ( flags [ name ] ) ) ; \
2013-04-16 23:59:00 -04:00
flags [ name ] = 1 ; \
2013-04-16 23:59:00 -04:00
printf ( " #define %s %d \n " , # name , name ) ; } while ( 0 )
2013-04-16 23:59:00 -04:00
# define dodefine_from_track_enum(flags, name) do { \
uint32_t which ; \
/* don't use 0 */ \
for ( which = 1 ; which < 256 ; which + + ) { \
if ( ! ( flags [ which ] ) ) break ; \
} \
assert ( which < 256 ) ; \
flags [ which ] = 1 ; \
printf ( " #define %s %d \n " , # name , which ) ; \
} while ( 0 )
2008-03-19 14:33:39 +00:00
enum {
2013-04-16 23:59:22 -04:00
TOKUDB_OUT_OF_LOCKS = - 100000 ,
TOKUDB_SUCCEEDED_EARLY = - 100001 ,
TOKUDB_FOUND_BUT_REJECTED = - 100002 ,
TOKUDB_USER_CALLBACK_ERROR = - 100003 ,
TOKUDB_DICTIONARY_TOO_OLD = - 100004 ,
TOKUDB_DICTIONARY_TOO_NEW = - 100005 ,
TOKUDB_DICTIONARY_NO_HEADER = - 100006 ,
TOKUDB_CANCELED = - 100007 ,
TOKUDB_NO_DATA = - 100008 ,
TOKUDB_ACCEPT = - 100009 ,
TOKUDB_MVCC_DICTIONARY_TOO_NEW = - 100010 ,
2013-04-16 23:59:25 -04:00
TOKUDB_UPGRADE_FAILURE = - 100011 ,
2008-03-19 14:33:39 +00:00
} ;
2013-04-16 23:59:01 -04:00
static void print_defines ( void ) {
2007-10-19 17:05:10 +00:00
printf ( " #ifndef _TOKUDB_WRAP_H \n " ) ;
2007-09-06 14:18:08 +00:00
dodefine ( DB_VERB_DEADLOCK ) ;
dodefine ( DB_VERB_RECOVERY ) ;
dodefine ( DB_VERB_REPLICATION ) ;
dodefine ( DB_VERB_WAITSFOR ) ;
dodefine ( DB_ARCH_ABS ) ;
dodefine ( DB_ARCH_LOG ) ;
dodefine ( DB_CREATE ) ;
2007-12-18 16:22:21 +00:00
dodefine ( DB_CXX_NO_EXCEPTIONS ) ;
2007-11-19 16:30:50 +00:00
dodefine ( DB_EXCL ) ;
2007-09-06 14:18:08 +00:00
dodefine ( DB_PRIVATE ) ;
dodefine ( DB_RDONLY ) ;
dodefine ( DB_RECOVER ) ;
2013-04-16 23:57:59 -04:00
dodefine ( DB_RUNRECOVERY ) ;
2007-09-06 14:18:08 +00:00
dodefine ( DB_THREAD ) ;
dodefine ( DB_TXN_NOSYNC ) ;
dodefine ( DB_LOCK_DEFAULT ) ;
dodefine ( DB_LOCK_OLDEST ) ;
dodefine ( DB_LOCK_RANDOM ) ;
2013-04-16 23:59:21 -04:00
//dodefine(DB_DUP); No longer supported #2862
//dodefine(DB_DUPSORT); No longer supported #2862
2007-09-04 20:59:50 +00:00
2007-12-13 23:32:51 +00:00
dodefine ( DB_KEYFIRST ) ;
dodefine ( DB_KEYLAST ) ;
2013-04-16 23:59:00 -04:00
{
static uint8_t insert_flags [ 256 ] ;
dodefine_track_enum ( insert_flags , DB_NOOVERWRITE ) ;
dodefine_track_enum ( insert_flags , DB_NODUPDATA ) ;
dodefine_from_track_enum ( insert_flags , DB_YESOVERWRITE ) ;
dodefine_from_track_enum ( insert_flags , DB_NOOVERWRITE_NO_ERROR ) ;
}
2007-12-14 14:26:22 +00:00
dodefine ( DB_OPFLAGS_MASK ) ;
2007-09-06 14:18:08 +00:00
2008-02-11 19:55:37 +00:00
dodefine ( DB_AUTO_COMMIT ) ;
2007-09-06 14:18:08 +00:00
dodefine ( DB_INIT_LOCK ) ;
dodefine ( DB_INIT_LOG ) ;
dodefine ( DB_INIT_MPOOL ) ;
2013-04-16 23:58:02 -04:00
printf ( " #define DB_CLOSE_DONT_TRIM_LOG 1048576 \n " ) ; // tokudb
2007-09-06 14:18:08 +00:00
dodefine ( DB_INIT_TXN ) ;
2007-09-06 20:13:56 +00:00
2013-04-16 23:57:41 -04:00
//dodefine(DB_KEYEMPTY); /// KEYEMPTY is no longer used. We just use DB_NOTFOUND
2007-09-06 20:13:56 +00:00
dodefine ( DB_KEYEXIST ) ;
dodefine ( DB_LOCK_DEADLOCK ) ;
2008-01-21 23:59:04 +00:00
dodefine ( DB_LOCK_NOTGRANTED ) ;
2007-09-06 20:13:56 +00:00
dodefine ( DB_NOTFOUND ) ;
2007-12-03 05:01:43 +00:00
dodefine ( DB_SECONDARY_BAD ) ;
2007-11-30 05:04:06 +00:00
dodefine ( DB_DONOTINDEX ) ;
2007-12-11 14:53:18 +00:00
# ifdef DB_BUFFER_SMALL
2007-12-10 17:04:02 +00:00
dodefine ( DB_BUFFER_SMALL ) ;
2007-12-11 14:53:18 +00:00
# endif
2007-09-06 20:13:56 +00:00
printf ( " #define DB_BADFORMAT -30500 \n " ) ; // private tokudb
2007-11-28 20:04:35 +00:00
printf ( " #define DB_DELETE_ANY %d \n " , 1 < < 16 ) ; // private tokudb
2013-04-16 23:57:55 -04:00
printf ( " #define DB_TRUNCATE_WITHCURSORS %d \n " , 1 < < 17 ) ; // private tokudb
2007-09-06 20:13:56 +00:00
dodefine ( DB_FIRST ) ;
2013-04-16 23:59:21 -04:00
//dodefine(DB_GET_BOTH); No longer supported #2862.
//dodefine(DB_GET_BOTH_RANGE); No longer supported because we only support NODUP. #2862.
2007-09-06 20:13:56 +00:00
dodefine ( DB_LAST ) ;
2007-12-03 05:01:43 +00:00
dodefine ( DB_CURRENT ) ;
2007-09-06 20:13:56 +00:00
dodefine ( DB_NEXT ) ;
2013-04-16 23:59:21 -04:00
//dodefine(DB_NEXT_DUP); No longer supported #2862
2008-01-10 12:51:09 +00:00
dodefine ( DB_NEXT_NODUP ) ;
2007-09-06 20:13:56 +00:00
dodefine ( DB_PREV ) ;
2013-04-16 23:57:41 -04:00
# if defined(DB_PREV_DUP)
2013-04-16 23:59:21 -04:00
//dodefine(DB_PREV_DUP);
2008-01-10 12:51:09 +00:00
# endif
dodefine ( DB_PREV_NODUP ) ;
2007-09-06 20:13:56 +00:00
dodefine ( DB_SET ) ;
dodefine ( DB_SET_RANGE ) ;
2008-02-03 18:26:01 +00:00
printf ( " #define DB_CURRENT_BINDING 253 \n " ) ; // private tokudb
2013-04-16 23:57:59 -04:00
printf ( " #define DB_SET_RANGE_REVERSE 252 \n " ) ; // private tokudb
2013-04-16 23:59:21 -04:00
//printf("#define DB_GET_BOTH_RANGE_REVERSE 251\n"); // private tokudb. No longer supported #2862.
2007-09-06 20:13:56 +00:00
dodefine ( DB_RMW ) ;
2008-06-10 15:39:31 +00:00
printf ( " #define DB_PRELOCKED 0x00800000 \n " ) ; // private tokudb
2008-06-10 19:46:00 +00:00
printf ( " #define DB_PRELOCKED_WRITE 0x00400000 \n " ) ; // private tokudb
2007-11-30 05:04:06 +00:00
2013-04-16 23:58:59 -04:00
{
//dbt flags
uint32_t dbt_flags = 0 ;
dodefine_track ( dbt_flags , DB_DBT_APPMALLOC ) ;
dodefine_track ( dbt_flags , DB_DBT_DUPOK ) ;
dodefine_track ( dbt_flags , DB_DBT_MALLOC ) ;
2007-11-30 05:04:06 +00:00
# ifdef DB_DBT_MULTIPLE
2013-04-16 23:58:59 -04:00
dodefine_track ( dbt_flags , DB_DBT_MULTIPLE ) ;
2007-11-30 05:04:06 +00:00
# endif
2013-04-16 23:58:59 -04:00
dodefine_track ( dbt_flags , DB_DBT_REALLOC ) ;
dodefine_track ( dbt_flags , DB_DBT_USERMEM ) ;
}
2008-01-02 15:54:00 +00:00
// flags for the env->set_flags function
# if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
dodefine ( DB_LOG_AUTOREMOVE ) ;
# endif
2013-04-16 23:58:56 -04:00
{
//Txn begin/commit flags
uint32_t txn_flags = 0 ;
dodefine_track ( txn_flags , DB_TXN_WRITE_NOSYNC ) ;
dodefine_track ( txn_flags , DB_TXN_NOWAIT ) ;
dodefine_track ( txn_flags , DB_TXN_SYNC ) ;
2013-04-16 23:59:22 -04:00
# ifdef DB_TXN_SNAPSHOT
dodefine_track ( txn_flags , DB_TXN_SNAPSHOT ) ;
# endif
2013-04-16 23:58:56 -04:00
# ifdef DB_READ_UNCOMMITTED
dodefine_track ( txn_flags , DB_READ_UNCOMMITTED ) ;
2013-04-16 23:59:05 -04:00
# endif
# ifdef DB_READ_COMMITTED
dodefine_track ( txn_flags , DB_READ_COMMITTED ) ;
2013-04-16 23:59:22 -04:00
# endif
//Add them if they didn't exist
# ifndef DB_TXN_SNAPSHOT
dodefine_from_track ( txn_flags , DB_TXN_SNAPSHOT ) ;
# endif
# ifndef DB_READ_UNCOMMITTED
dodefine_from_track ( txn_flags , DB_READ_UNCOMMITTED ) ;
# endif
# ifndef DB_READ_COMMITTED
dodefine_from_track ( txn_flags , DB_READ_COMMITTED ) ;
2013-04-16 23:58:56 -04:00
# endif
dodefine_from_track ( txn_flags , DB_INHERIT_ISOLATION ) ;
2013-04-16 23:59:22 -04:00
dodefine_from_track ( txn_flags , DB_SERIALIZABLE ) ;
2013-04-16 23:58:56 -04:00
}
2008-03-19 14:33:39 +00:00
2007-10-19 17:05:10 +00:00
printf ( " #endif \n " ) ;
2008-03-19 14:33:39 +00:00
/* TOKUDB specific error codes*/
printf ( " /* TOKUDB specific error codes */ \n " ) ;
dodefine ( TOKUDB_OUT_OF_LOCKS ) ;
2008-05-16 20:09:13 +00:00
dodefine ( TOKUDB_SUCCEEDED_EARLY ) ;
2013-04-16 23:59:10 -04:00
dodefine ( TOKUDB_FOUND_BUT_REJECTED ) ;
dodefine ( TOKUDB_USER_CALLBACK_ERROR ) ;
2013-04-16 23:57:47 -04:00
dodefine ( TOKUDB_DICTIONARY_TOO_OLD ) ;
2013-04-16 23:57:49 -04:00
dodefine ( TOKUDB_DICTIONARY_TOO_NEW ) ;
dodefine ( TOKUDB_DICTIONARY_NO_HEADER ) ;
2013-04-16 23:59:10 -04:00
dodefine ( TOKUDB_CANCELED ) ;
2013-04-16 23:59:13 -04:00
dodefine ( TOKUDB_NO_DATA ) ;
2013-04-16 23:59:22 -04:00
dodefine ( TOKUDB_ACCEPT ) ;
dodefine ( TOKUDB_MVCC_DICTIONARY_TOO_NEW ) ;
2013-04-16 23:59:25 -04:00
dodefine ( TOKUDB_UPGRADE_FAILURE ) ;
2013-04-16 23:59:01 -04:00
/* LOADER flags */
printf ( " /* LOADER flags */ \n " ) ;
printf ( " #define LOADER_USE_PUTS 1 \n " ) ; // minimize space usage
2007-09-06 14:18:08 +00:00
}
2007-09-04 20:59:50 +00:00
2007-09-05 18:59:12 +00:00
//#define DECL_LIMIT 100
2007-09-04 20:59:50 +00:00
struct fieldinfo {
2007-09-05 18:59:12 +00:00
char * decl ;
2007-09-04 20:59:50 +00:00
unsigned int off ;
unsigned int size ;
2007-09-04 21:39:03 +00:00
} ;
2007-09-04 20:59:50 +00:00
2007-10-14 13:56:25 +00:00
# if USE_MAJOR==4 && USE_MINOR==1
# include "sample_offsets_32_4_1.h"
# include "sample_offsets_64_4_1.h"
# elif USE_MAJOR==4 && USE_MINOR==3
# include "sample_offsets_32_4_3.h"
# include "sample_offsets_64_4_3.h"
2007-11-15 14:09:40 +00:00
# elif USE_MAJOR==4 && USE_MINOR==4
# include "sample_offsets_32_4_4.h"
# include "sample_offsets_64_4_4.h"
2007-12-03 18:44:41 +00:00
# elif USE_MAJOR==4 && USE_MINOR==5
# include "sample_offsets_32_4_5.h"
# include "sample_offsets_64_4_5.h"
2007-11-15 14:09:40 +00:00
# elif USE_MAJOR==4 && USE_MINOR==6
# include "sample_offsets_32_4_6.h"
# include "sample_offsets_64_4_6.h"
2007-10-14 13:56:25 +00:00
# else
# error
# endif
2007-09-04 20:59:50 +00:00
2013-04-16 23:58:57 -04:00
enum need_internal_type { NO_INTERNAL = 0 , INTERNAL_NAMED = 1 , INTERNAL_AT_END = 2 } ;
2013-04-16 23:59:01 -04:00
static void print_struct ( const char * structname , enum need_internal_type need_internal , struct fieldinfo * fields32 , struct fieldinfo * fields64 , unsigned int N , const char * extra_decls [ ] ) {
2007-09-04 21:39:03 +00:00
unsigned int i ;
unsigned int current_32 = 0 ;
unsigned int current_64 = 0 ;
2007-09-04 20:59:50 +00:00
int dummy_counter = 0 ;
2007-09-05 18:59:12 +00:00
int did_toku_internal = 0 ;
2007-09-05 19:08:41 +00:00
// int total32 = fields32[N-1].size;
// int total64 = fields32[N-1].size;
2013-04-16 23:58:57 -04:00
assert ( need_internal = = NO_INTERNAL | | need_internal = = INTERNAL_NAMED | | need_internal = = INTERNAL_AT_END ) ;
2007-09-05 17:52:04 +00:00
printf ( " struct __toku_%s { \n " , structname ) ;
2007-09-05 20:16:26 +00:00
for ( i = 0 ; i < N - 1 ; i + + ) {
2007-09-04 21:39:03 +00:00
unsigned int this_32 = fields32 [ i ] . off ;
unsigned int this_64 = fields64 [ i ] . off ;
2007-09-05 18:59:12 +00:00
//fprintf(stderr, "this32=%d current32=%d this64=%d current64=%d\n", this_32, current_32, this_64, current_64);
2007-09-04 21:39:03 +00:00
if ( this_32 > current_32 | | this_64 > current_64 ) {
unsigned int diff32 = this_32 - current_32 ;
unsigned int diff64 = this_64 - current_64 ;
assert ( this_32 > current_32 & & this_64 > current_64 ) ;
if ( diff32 ! = diff64 ) {
unsigned int diff = diff64 - diff32 ;
2007-09-05 18:59:12 +00:00
unsigned int n_dummys = diff / 4 ;
2013-04-16 23:58:57 -04:00
if ( need_internal = = INTERNAL_NAMED & & ! did_toku_internal ) {
2013-04-16 23:57:48 -04:00
if ( TDB_NATIVE & &
( strcmp ( structname , " dbc " ) = = 0 | |
strcmp ( structname , " db_txn " ) = = 0 ) ) {
printf ( " struct __toku_%s_internal ii; \n " , structname ) ;
printf ( " #define %s_struct_i(x) (&(x)->ii) \n " , structname ) ;
} else {
printf ( " struct __toku_%s_internal *i; \n " , structname ) ;
printf ( " #define %s_struct_i(x) ((x)->i) \n " , structname ) ;
}
2007-09-05 18:59:12 +00:00
n_dummys - - ;
did_toku_internal = 1 ;
}
2008-07-09 16:55:59 +00:00
while ( n_dummys > 0 & & extra_decls & & * extra_decls ) {
printf ( " %s; \n " , * extra_decls ) ;
extra_decls + + ;
n_dummys - - ;
}
2008-05-13 13:07:25 +00:00
if ( n_dummys > 0 ) {
2013-04-16 23:57:48 -04:00
if ( ! TDB_NATIVE )
printf ( " void* __toku_dummy%d[%d]; \n " , dummy_counter , n_dummys ) ;
dummy_counter + + ;
2008-05-13 13:07:25 +00:00
}
2007-09-04 21:39:03 +00:00
diff64 - = diff * 2 ;
diff32 - = diff ;
}
assert ( diff32 = = diff64 ) ;
if ( diff32 > 0 ) {
2013-04-16 23:57:48 -04:00
if ( ! TDB_NATIVE )
printf ( " char __toku_dummy%d[%d]; \n " , dummy_counter , diff32 ) ;
dummy_counter + + ;
2007-09-04 21:39:03 +00:00
}
current_32 = this_32 ;
current_64 = this_64 ;
2007-09-04 20:59:50 +00:00
}
2007-09-04 21:39:03 +00:00
if ( this_32 < current_32 | | this_64 < current_64 ) {
2007-09-05 19:20:25 +00:00
printf ( " Whoops this_32=%d this_64=%d \n " , this_32 , this_64 ) ;
}
if ( i + 1 < N ) {
assert ( strcmp ( fields32 [ i ] . decl , fields64 [ i ] . decl ) = = 0 ) ;
2013-04-16 23:57:48 -04:00
printf ( " %s; " , fields32 [ i ] . decl ) ;
if ( ! TDB_NATIVE )
printf ( " /* 32-bit offset=%d size=%d, 64=bit offset=%d size=%d */ " , fields32 [ i ] . off , fields32 [ i ] . size , fields64 [ i ] . off , fields64 [ i ] . size ) ;
printf ( " \n " ) ;
2007-09-05 19:20:25 +00:00
} else {
assert ( fields32 [ i ] . decl = = 0 ) ;
assert ( fields64 [ i ] . decl = = 0 ) ;
2007-09-04 20:59:50 +00:00
}
2007-09-04 21:39:03 +00:00
current_32 + = fields32 [ i ] . size ;
current_64 + = fields64 [ i ] . size ;
2007-09-04 20:59:50 +00:00
}
2008-07-09 16:55:59 +00:00
if ( extra_decls ) assert ( NULL = = * extra_decls ) ; // make sure that the extra decls all got used up.
2007-09-05 20:16:26 +00:00
{
unsigned int this_32 = fields32 [ N - 1 ] . off ;
unsigned int this_64 = fields64 [ N - 1 ] . off ;
unsigned int diff32 = this_32 - current_32 ;
unsigned int diff64 = this_64 - current_64 ;
if ( diff32 > 0 & & diff32 < diff64 ) {
unsigned int diff = diff64 - diff32 ;
2013-04-16 23:57:48 -04:00
if ( ! TDB_NATIVE )
printf ( " void* __toku_dummy%d[%d]; /* Padding at the end */ \n " , dummy_counter , diff / 4 ) ;
dummy_counter + + ;
2007-09-05 20:16:26 +00:00
diff64 - = diff * 2 ;
diff32 - = diff ;
}
if ( diff32 > 0 ) {
2013-04-16 23:57:48 -04:00
if ( ! TDB_NATIVE )
printf ( " char __toku_dummy%d[%d]; /* Padding at the end */ \n " , dummy_counter , diff32 ) ;
dummy_counter + + ;
2007-09-05 20:16:26 +00:00
diff64 - = diff32 ;
diff32 = 0 ;
}
2013-04-16 23:57:48 -04:00
if ( diff64 > 0 )
if ( ! TDB_NATIVE )
printf ( " /* %d more bytes of alignment in the 64-bit case. */ \n " , diff64 ) ;
2007-09-05 20:16:26 +00:00
assert ( diff64 < 8 ) ; /* there could be a few left from alignment. */
}
2013-04-16 23:58:57 -04:00
if ( need_internal = = INTERNAL_AT_END ) {
printf ( " char iic[0] __attribute__((aligned(__BIGGEST_ALIGNMENT__))); \n " ) ;
printf ( " #define %s_struct_i(x) ((struct __toku_%s_internal *)(&(x)->iic)) \n " , structname , structname ) ;
did_toku_internal = 1 ;
}
2007-09-04 21:39:03 +00:00
printf ( " }; \n " ) ;
2007-09-05 20:16:26 +00:00
assert ( did_toku_internal | | ! need_internal ) ;
2007-09-04 20:59:50 +00:00
}
2007-09-04 21:39:03 +00:00
2013-04-16 23:59:01 -04:00
int main ( int argc __attribute__ ( ( __unused__ ) ) , char * const argv [ ] __attribute__ ( ( __unused__ ) ) ) {
2007-09-04 20:59:50 +00:00
printf ( " #ifndef _DB_H \n " ) ;
printf ( " #define _DB_H \n " ) ;
2008-01-24 15:10:32 +00:00
printf ( " /* This code generated by make_db_h. Copyright (c) 2007, 2008 Tokutek */ \n " ) ;
printf ( " #ident \" Copyright (c) 2007, 2008 Tokutek Inc. All rights reserved. \" \n " ) ;
2007-09-06 14:18:08 +00:00
printf ( " #include <sys/types.h> \n " ) ;
2007-10-15 02:08:49 +00:00
printf ( " /*stdio is needed for the FILE* in db->verify*/ \n " ) ;
printf ( " #include <stdio.h> \n " ) ;
2013-04-16 23:58:56 -04:00
printf ( " #include <stdint.h> \n " ) ;
2007-09-06 14:18:08 +00:00
//printf("#include <inttypes.h>\n");
2007-09-04 20:59:50 +00:00
printf ( " #if defined(__cplusplus) \n extern \" C \" { \n #endif \n " ) ;
2007-09-06 14:18:08 +00:00
2007-10-14 13:56:25 +00:00
assert ( DB_VERSION_MAJOR = = DB_VERSION_MAJOR_32 ) ;
assert ( DB_VERSION_MINOR = = DB_VERSION_MINOR_32 ) ;
2007-11-28 20:04:35 +00:00
printf ( " #define TOKUDB 1 \n " ) ;
2013-04-16 23:57:48 -04:00
printf ( " #define TOKUDB_NATIVE_H %d \n " , TDB_NATIVE ) ;
2007-09-19 18:34:17 +00:00
dodefine ( DB_VERSION_MAJOR ) ;
dodefine ( DB_VERSION_MINOR ) ;
dodefine ( DB_VERSION_PATCH ) ;
2007-09-06 14:18:08 +00:00
printf ( " #ifndef _TOKUDB_WRAP_H \n " ) ;
2007-10-14 13:56:25 +00:00
printf ( " #define DB_VERSION_STRING \" Tokutek: TokuDB %d.%d.%d \" \n " , DB_VERSION_MAJOR , DB_VERSION_MINOR , DB_VERSION_PATCH ) ;
2007-09-06 14:18:08 +00:00
printf ( " #else \n " ) ;
2007-10-19 17:05:10 +00:00
printf ( " #define DB_VERSION_STRING_ydb \" Tokutek: TokuDB (wrapped bdb) \" \n " ) ;
2007-09-06 14:18:08 +00:00
printf ( " #endif \n " ) ;
2013-04-16 23:57:48 -04:00
2007-09-06 14:18:08 +00:00
if ( 0 ) {
printf ( " #ifndef __BIT_TYPES_DEFINED__ \n " ) ;
printf ( " /* Define some int types if not provided by the system. BIND does this, so we do it too. */ \n " ) ;
printf ( " typedef unsigned int u_int32_t; \n " ) ;
printf ( " #endif \n " ) ;
}
2013-04-16 23:57:43 -04:00
//Typedef toku_off_t
printf ( " #ifndef TOKU_OFF_T_DEFINED \n "
" #define TOKU_OFF_T_DEFINED \n "
" typedef int64_t toku_off_t; \n "
" #endif \n " ) ;
2013-04-16 23:57:47 -04:00
//printf("typedef struct __toku_db_btree_stat DB_BTREE_STAT;\n");
2007-09-06 14:18:08 +00:00
printf ( " typedef struct __toku_db_env DB_ENV; \n " ) ;
2007-09-05 20:32:12 +00:00
printf ( " typedef struct __toku_db_key_range DB_KEY_RANGE; \n " ) ;
printf ( " typedef struct __toku_db_lsn DB_LSN; \n " ) ;
2007-09-04 20:59:50 +00:00
printf ( " typedef struct __toku_db DB; \n " ) ;
2007-09-05 20:32:12 +00:00
printf ( " typedef struct __toku_db_txn DB_TXN; \n " ) ;
2007-09-06 14:18:08 +00:00
printf ( " typedef struct __toku_db_txn_active DB_TXN_ACTIVE; \n " ) ;
2007-09-05 20:32:12 +00:00
printf ( " typedef struct __toku_db_txn_stat DB_TXN_STAT; \n " ) ;
printf ( " typedef struct __toku_dbc DBC; \n " ) ;
printf ( " typedef struct __toku_dbt DBT; \n " ) ;
2008-01-10 16:29:45 +00:00
printf ( " typedef u_int32_t db_recno_t; \n " ) ;
2013-04-16 23:57:41 -04:00
printf ( " typedef int(*YDB_CALLBACK_FUNCTION)(DBT const*, DBT const*, void*); \n " ) ;
2013-04-16 23:57:47 -04:00
2013-04-16 23:57:48 -04:00
printf ( " #include <tdb-internal.h> \n " ) ;
2013-04-16 23:58:57 -04:00
printf ( " #ifndef __BIGGEST_ALIGNMENT__ \n #define __BIGGEST_ALIGNMENT__ 16 \n #endif \n " ) ;
2013-04-16 23:57:47 -04:00
//stat64
2013-04-16 23:57:47 -04:00
printf ( " typedef struct __toku_db_btree_stat64 { \n " ) ;
printf ( " u_int64_t bt_nkeys; /* how many unique keys (guaranteed only to be an estimate, even when flattened) */ \n " ) ;
printf ( " u_int64_t bt_ndata; /* how many key-value pairs (an estimate, but exact when flattened) */ \n " ) ;
printf ( " u_int64_t bt_dsize; /* how big are the keys+values (not counting the lengths) (an estimate, unless flattened) */ \n " ) ;
printf ( " u_int64_t bt_fsize; /* how big is the underlying file */ \n " ) ;
printf ( " } DB_BTREE_STAT64; \n " ) ;
2013-04-16 23:57:47 -04:00
2013-04-16 23:58:59 -04:00
//bulk loader
printf ( " typedef struct __toku_loader DB_LOADER; \n " ) ;
printf ( " struct __toku_loader_internal; \n " ) ;
printf ( " struct __toku_loader { \n " ) ;
printf ( " struct __toku_loader_internal *i; \n " ) ;
2013-04-16 23:59:03 -04:00
printf ( " int (*set_error_callback)(DB_LOADER *loader, void (*error_cb)(DB *db, int i, int err, DBT *key, DBT *val, void *error_extra), void *error_extra); /* set the error callback */ \n " ) ;
2013-04-16 23:59:03 -04:00
printf ( " int (*set_poll_function)(DB_LOADER *loader, int (*poll_func)(void *extra, float progress), void *poll_extra); /* set the polling function */ \n " ) ;
2013-04-16 23:59:01 -04:00
printf ( " int (*put)(DB_LOADER *loader, DBT *key, DBT* val); /* give a row to the loader */ \n " ) ;
printf ( " int (*close)(DB_LOADER *loader); /* finish loading, free memory */ \n " ) ;
printf ( " int (*abort)(DB_LOADER *loader); /* abort loading, free memory */ \n " ) ;
2013-04-16 23:58:59 -04:00
printf ( " }; \n " ) ;
2013-04-16 23:59:29 -04:00
//indexer
printf ( " typedef struct __toku_indexer DB_INDEXER; \n " ) ;
printf ( " struct __toku_indexer_internal; \n " ) ;
printf ( " struct __toku_indexer { \n " ) ;
printf ( " struct __toku_indexer_internal *i; \n " ) ;
printf ( " int (*set_error_callback)(DB_INDEXER *indexer, void (*error_cb)(DB *db, int i, int err, DBT *key, DBT *val, void *error_extra), void *error_extra); /* set the error callback */ \n " ) ;
printf ( " int (*set_poll_function)(DB_INDEXER *indexer, int (*poll_func)(void *extra, float progress), void *poll_extra); /* set the polling function */ \n " ) ;
printf ( " int (*build)(DB_INDEXER *indexer); /* build the indexes */ \n " ) ;
printf ( " int (*close)(DB_INDEXER *indexer); /* finish indexing, free memory */ \n " ) ;
printf ( " int (*abort)(DB_INDEXER *indexer); /* abort indexing, free memory */ \n " ) ;
printf ( " }; \n " ) ;
2013-04-16 23:58:02 -04:00
//engine status info
printf ( " typedef struct __toku_engine_status { \n " ) ;
2013-04-16 23:59:26 -04:00
printf ( " char creationtime[26]; /* time of environment creation */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " char startuptime[26]; /* time of engine startup */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " char now[26]; /* time of engine status query (i.e. now) */ \n " ) ;
2013-04-16 23:58:06 -04:00
printf ( " u_int64_t ydb_lock_ctr; /* how many times has ydb lock been taken/released */ \n " ) ;
printf ( " u_int64_t max_possible_sleep; /* max possible sleep time for ydb lock scheduling (constant) */ \n " ) ;
printf ( " u_int64_t processor_freq_mhz; /* clock frequency in MHz */ \n " ) ;
printf ( " u_int64_t max_requested_sleep; /* max sleep time requested, can be larger than max possible */ \n " ) ;
printf ( " u_int64_t times_max_sleep_used; /* number of times the max_possible_sleep was used to sleep */ \n " ) ;
printf ( " u_int64_t total_sleepers; /* total number of times a client slept for ydb lock scheduling */ \n " ) ;
printf ( " u_int64_t total_sleep_time; /* total time spent sleeping for ydb lock scheduling */ \n " ) ;
printf ( " u_int64_t max_waiters; /* max number of simultaneous client threads kept waiting for ydb lock */ \n " ) ;
printf ( " u_int64_t total_waiters; /* total number of times a client thread waited for ydb lock */ \n " ) ;
printf ( " u_int64_t total_clients; /* total number of separate client threads that use ydb lock */ \n " ) ;
printf ( " u_int64_t time_ydb_lock_held_unavailable; /* number of times a thread migrated and theld is unavailable */ \n " ) ;
printf ( " u_int64_t max_time_ydb_lock_held; /* max time a client thread held the ydb lock */ \n " ) ;
printf ( " u_int64_t total_time_ydb_lock_held;/* total time client threads held the ydb lock */ \n " ) ;
2013-04-16 23:58:02 -04:00
printf ( " u_int32_t checkpoint_period; /* delay between automatic checkpoints */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int32_t checkpoint_footprint; /* state of checkpoint procedure */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " char checkpoint_time_begin[26]; /* time of last checkpoint begin */ \n " ) ;
printf ( " char checkpoint_time_begin_complete[26]; /* time of last complete checkpoint begin */ \n " ) ;
printf ( " char checkpoint_time_end[26]; /* time of last checkpoint end */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " u_int64_t checkpoint_last_lsn; /* LSN of last complete checkpoint */ \n " ) ;
printf ( " u_int32_t checkpoint_count; /* number of checkpoints taken */ \n " ) ;
printf ( " u_int32_t checkpoint_count_fail; /* number of checkpoints failed */ \n " ) ;
printf ( " u_int64_t txn_begin; /* number of transactions ever begun */ \n " ) ;
printf ( " u_int64_t txn_commit; /* txn commit operations */ \n " ) ;
printf ( " u_int64_t txn_abort; /* txn abort operations */ \n " ) ;
printf ( " u_int64_t txn_close; /* txn completions (should equal commit+abort) */ \n " ) ;
printf ( " u_int64_t txn_oldest_live; /* oldest extant txn */ \n " ) ;
printf ( " u_int64_t next_lsn; /* lsn that will be assigned to next log entry */ \n " ) ;
2013-04-16 23:58:06 -04:00
printf ( " u_int64_t cachetable_lock_taken; /* how many times has cachetable lock been taken */ \n " ) ;
printf ( " u_int64_t cachetable_lock_released;/* how many times has cachetable lock been released */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int64_t cachetable_hit; /* how many cache hits */ \n " ) ;
printf ( " u_int64_t cachetable_miss; /* how many cache misses */ \n " ) ;
2013-04-16 23:58:06 -04:00
printf ( " u_int64_t cachetable_misstime; /* how many usec spent waiting for disk read because of cache miss */ \n " ) ;
printf ( " u_int64_t cachetable_waittime; /* how many usec spent waiting for another thread to release cache line */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int64_t cachetable_wait_reading; /* how many times get_and_pin waits for a node to be read */ \n " ) ;
printf ( " u_int64_t cachetable_wait_writing; /* how many times get_and_pin waits for a node to be written */ \n " ) ;
2013-04-16 23:59:04 -04:00
printf ( " u_int64_t cachetable_wait_checkpoint; /* how many times get_and_pin waits for a node to be written for a checkpoint*/ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int64_t puts; /* how many times has a newly created node been put into the cachetable */ \n " ) ;
printf ( " u_int64_t prefetches; /* how many times has a block been prefetched into the cachetable */ \n " ) ;
2013-04-16 23:58:06 -04:00
printf ( " u_int64_t maybe_get_and_pins; /* how many times has maybe_get_and_pin(_clean) been called */ \n " ) ;
printf ( " u_int64_t maybe_get_and_pin_hits; /* how many times has get_and_pin(_clean) returned with a node */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " int64_t cachetable_size_current; /* sum of the sizes of the nodes represented in the cachetable */ \n " ) ;
printf ( " int64_t cachetable_size_limit; /* the limit to the sum of the node sizes */ \n " ) ;
printf ( " int64_t cachetable_size_writing; /* the sum of the sizes of the nodes being written */ \n " ) ;
2013-04-16 23:58:06 -04:00
printf ( " int64_t get_and_pin_footprint; /* state of get_and_pin procedure */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " int64_t local_checkpoint; /* number of times a local checkpoint is taken for commit */ \n " ) ;
printf ( " int64_t local_checkpoint_files; /* number of files subjec to local checkpoint is taken for commit */ \n " ) ;
printf ( " int64_t local_checkpoint_during_checkpoint; /* number of times a local checkpoint happens during normal checkpoint */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int32_t range_locks_max; /* max total number of range locks */ \n " ) ;
2013-04-16 23:58:03 -04:00
printf ( " u_int32_t range_locks_curr; /* total range locks currently in use */ \n " ) ;
2013-04-16 23:59:22 -04:00
printf ( " u_int64_t range_locks_max_memory; /* max total bytes of range locks */ \n " ) ;
printf ( " u_int64_t range_locks_curr_memory; /* total bytes of range locks currently in use */ \n " ) ;
2013-04-16 23:59:06 -04:00
printf ( " u_int32_t range_lock_escalation_successes; /* number of times range locks escalation succeeded */ \n " ) ;
printf ( " u_int32_t range_lock_escalation_failures; /* number of times range locks escalation failed */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " u_int64_t range_read_locks; /* total range read locks taken */ \n " ) ;
printf ( " u_int64_t range_read_locks_fail; /* total range read locks unable to be taken */ \n " ) ;
printf ( " u_int64_t range_out_of_read_locks; /* total times range read locks exhausted */ \n " ) ;
printf ( " u_int64_t range_write_locks; /* total range write locks taken */ \n " ) ;
printf ( " u_int64_t range_write_locks_fail; /* total range write locks unable to be taken */ \n " ) ;
printf ( " u_int64_t range_out_of_write_locks; /* total times range write locks exhausted */ \n " ) ;
printf ( " u_int64_t inserts; /* ydb row insert operations */ \n " ) ;
printf ( " u_int64_t inserts_fail; /* ydb row insert operations that failed */ \n " ) ;
printf ( " u_int64_t deletes; /* ydb row delete operations */ \n " ) ;
printf ( " u_int64_t deletes_fail; /* ydb row delete operations that failed */ \n " ) ;
2013-04-16 23:59:26 -04:00
printf ( " u_int64_t updates; /* ydb row update operations */ \n " ) ;
printf ( " u_int64_t updates_fail; /* ydb row update operations that failed */ \n " ) ;
printf ( " u_int64_t multi_inserts; /* ydb multi_row insert operations, dictionaray count */ \n " ) ;
printf ( " u_int64_t multi_inserts_fail; /* ydb multi_row insert operations that failed, dictionary count */ \n " ) ;
printf ( " u_int64_t multi_deletes; /* ydb multi_row delete operations, dictionary count */ \n " ) ;
printf ( " u_int64_t multi_deletes_fail; /* ydb multi_row delete operations that failed, dictionary count */ \n " ) ;
printf ( " u_int64_t multi_updates; /* ydb row update operations, dictionary count */ \n " ) ;
printf ( " u_int64_t multi_updates_fail; /* ydb row update operations that failed, dictionary count */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " u_int64_t point_queries; /* ydb point queries */ \n " ) ;
printf ( " u_int64_t sequential_queries; /* ydb sequential queries */ \n " ) ;
printf ( " u_int64_t fsync_count; /* number of times fsync performed */ \n " ) ;
printf ( " u_int64_t fsync_time; /* total time required to fsync */ \n " ) ;
2013-04-16 23:59:03 -04:00
printf ( " u_int64_t logger_ilock_ctr; /* how many times has logger input lock been taken or released */ \n " ) ;
printf ( " u_int64_t logger_olock_ctr; /* how many times has logger output condition lock been taken or released */ \n " ) ;
printf ( " u_int64_t logger_swap_ctr; /* how many times have logger buffers been swapped */ \n " ) ;
printf ( " char enospc_most_recent[26]; /* time of most recent ENOSPC error return from disk write */ \n " ) ;
printf ( " u_int64_t enospc_threads_blocked; /* how many threads are currently blocked by ENOSPC */ \n " ) ;
2013-04-16 23:59:11 -04:00
printf ( " u_int64_t enospc_ctr; /* how many times has ENOSPC been returned by disk write */ \n " ) ;
printf ( " u_int64_t enospc_redzone_ctr; /* how many times has ENOSPC been returned to user (red zone) */ \n " ) ;
printf ( " u_int64_t enospc_state; /* state of ydb-level ENOSPC prevention (0 = green, 1 = yellow, 2 = red) */ \n " ) ;
printf ( " u_int64_t loader_create; /* number of loaders created */ \n " ) ;
printf ( " u_int64_t loader_create_fail; /* number of failed loader creations */ \n " ) ;
printf ( " u_int64_t loader_put; /* number of loader puts */ \n " ) ;
printf ( " u_int64_t loader_close; /* number of loaders closed (succeed or fail) */ \n " ) ;
printf ( " u_int64_t loader_close_fail; /* number of loaders closed with error return */ \n " ) ;
printf ( " u_int64_t loader_abort; /* number of loaders aborted */ \n " ) ;
printf ( " u_int32_t loader_current; /* number of loaders currently existing */ \n " ) ;
printf ( " u_int32_t loader_max; /* max number of loaders extant simultaneously */ \n " ) ;
printf ( " u_int64_t logsuppress; /* number of times logging is suppressed */ \n " ) ;
printf ( " u_int64_t logsuppressfail; /* number of times logging cannot be suppressed */ \n " ) ;
2013-04-16 23:59:29 -04:00
printf ( " u_int64_t indexer_create; /* number of indexers created successfully */ \n " ) ;
printf ( " u_int64_t indexer_create_fail; /* number of failed indexer creations */ \n " ) ;
printf ( " u_int64_t indexer_build; /* number of indexer build calls (succeeded) */ \n " ) ;
printf ( " u_int64_t indexer_build_fail; /* number of indexers build calls with error return */ \n " ) ;
printf ( " u_int64_t indexer_close; /* number of indexers closed successfully) */ \n " ) ;
printf ( " u_int64_t indexer_close_fail; /* number of indexers closed with error return */ \n " ) ;
printf ( " u_int64_t indexer_abort; /* number of indexers aborted */ \n " ) ;
printf ( " u_int32_t indexer_current; /* number of indexers currently existing */ \n " ) ;
printf ( " u_int32_t indexer_max; /* max number of indexers extant simultaneously */ \n " ) ;
2013-04-16 23:59:15 -04:00
printf ( " u_int64_t upgrade_env_status; /* Was an environment upgrade done? What was done? */ \n " ) ;
printf ( " u_int64_t upgrade_header; /* how many brt headers were upgraded? */ \n " ) ;
printf ( " u_int64_t upgrade_nonleaf; /* how many brt nonleaf nodes were upgraded? */ \n " ) ;
printf ( " u_int64_t upgrade_leaf; /* how many brt leaf nodes were upgraded? */ \n " ) ;
2013-04-16 23:59:26 -04:00
printf ( " u_int64_t original_ver; /* original environment version */ \n " ) ;
printf ( " u_int64_t ver_at_startup; /* environment version at startup */ \n " ) ;
printf ( " u_int64_t last_lsn_v12; /* last lsn of version 12 environment */ \n " ) ;
2013-04-16 23:59:26 -04:00
printf ( " char upgrade_v13_time[26]; /* timestamp of when upgrade to version 13 environment was done */ \n " ) ;
printf ( " u_int64_t env_panic; /* non-zero if environment is panicked */ \n " ) ;
printf ( " u_int64_t logger_panic; /* non-zero if logger is panicked */ \n " ) ;
printf ( " u_int64_t logger_panic_errno; /* non-zero if environment is panicked */ \n " ) ;
2013-04-16 23:58:02 -04:00
printf ( " } ENGINE_STATUS; \n " ) ;
2007-09-04 20:59:50 +00:00
print_dbtype ( ) ;
2007-10-09 22:00:34 +00:00
// print_db_notices();
2007-09-06 14:18:08 +00:00
print_defines ( ) ;
2007-09-05 17:52:04 +00:00
2013-04-16 23:59:30 -04:00
printf ( " typedef int (*generate_row_for_put_func)(DB *dest_db, DB *src_db, DBT *dest_key, DBT *dest_val, const DBT *src_key, const DBT *src_val); \n " ) ;
printf ( " typedef int (*generate_row_for_del_func)(DB *dest_db, DB *src_db, DBT *dest_val, const DBT *src_key, const DBT *src_val); \n " ) ;
2007-09-06 14:18:08 +00:00
printf ( " /* in wrap mode, top-level function txn_begin is renamed, but the field isn't renamed, so we have to hack it here.*/ \n " ) ;
printf ( " #ifdef _TOKUDB_WRAP_H \n #undef txn_begin \n #endif \n " ) ;
2007-09-05 20:28:58 +00:00
assert ( sizeof ( db_btree_stat_fields32 ) = = sizeof ( db_btree_stat_fields64 ) ) ;
2013-04-16 23:57:47 -04:00
// Don't produce db_btree_stat records.
//print_struct("db_btree_stat", 0, db_btree_stat_fields32, db_btree_stat_fields64, sizeof(db_btree_stat_fields32)/sizeof(db_btree_stat_fields32[0]), 0);
2007-09-05 19:20:25 +00:00
assert ( sizeof ( db_env_fields32 ) = = sizeof ( db_env_fields64 ) ) ;
2013-04-16 23:57:47 -04:00
{
const char * extra [ ] = {
2013-04-16 23:57:49 -04:00
" int (*checkpointing_set_period) (DB_ENV*, u_int32_t) /* Change the delay between automatic checkpoints. 0 means disabled. */ " ,
" int (*checkpointing_get_period) (DB_ENV*, u_int32_t*) /* Retrieve the delay between automatic checkpoints. 0 means disabled. */ " ,
2013-04-16 23:57:47 -04:00
" int (*checkpointing_postpone) (DB_ENV*) /* Use for 'rename table' or any other operation that must be disjoint from a checkpoint */ " ,
" int (*checkpointing_resume) (DB_ENV*) /* Alert tokudb 'postpone' is no longer necessary */ " ,
" int (*checkpointing_begin_atomic_operation) (DB_ENV*) /* Begin a set of operations (that must be atomic as far as checkpoints are concerned). i.e. inserting into every index in one table */ " ,
" int (*checkpointing_end_atomic_operation) (DB_ENV*) /* End a set of operations (that must be atomic as far as checkpoints are concerned). */ " ,
" int (*set_default_bt_compare) (DB_ENV*,int (*bt_compare) (DB *, const DBT *, const DBT *)) /* Set default (key) comparison function for all DBs in this environment. Required for RECOVERY since you cannot open the DBs manually. */ " ,
2013-04-16 23:59:26 -04:00
" int (*get_engine_status) (DB_ENV*, ENGINE_STATUS*, char*, int) /* Fill in status struct, possibly env panic string */ " ,
2013-04-16 23:58:06 -04:00
" int (*get_engine_status_text) (DB_ENV*, char*, int) /* Fill in status text */ " ,
2013-04-16 23:59:01 -04:00
" int (*get_iname) (DB_ENV* env, DBT* dname_dbt, DBT* iname_dbt) /* FOR TEST ONLY: lookup existing iname */ " ,
2013-04-16 23:59:29 -04:00
" int (*create_loader) (DB_ENV *env, DB_TXN *txn, DB_LOADER **blp, DB *src_db, int N, DB *dbs[/*N*/], uint32_t db_flags[/*N*/], uint32_t dbt_flags[/*N*/], uint32_t loader_flags) " ,
" int (*create_indexer) (DB_ENV *env, DB_TXN *txn, DB_INDEXER **idxrp, DB *src_db, int N, DB *dbs[/*N*/], uint32_t db_flags[/*N*/], uint32_t indexer_flags) " ,
2013-04-16 23:58:59 -04:00
" int (*put_multiple) (DB_ENV *env, DB *src_db, DB_TXN *txn, \n "
" const DBT *key, const DBT *val, \n "
2013-04-16 23:59:30 -04:00
" uint32_t num_dbs, DB **db_array, DBT *keys, DBT *vals, uint32_t *flags_array \n "
" ) /* insert into multiple DBs */ " ,
" int (*set_generate_row_callback_for_put) (DB_ENV *env, generate_row_for_put_func generate_row_for_put) " ,
2013-04-16 23:58:59 -04:00
" int (*del_multiple) (DB_ENV *env, DB *src_db, DB_TXN *txn, \n "
" const DBT *key, const DBT *val, \n "
2013-04-16 23:59:30 -04:00
" uint32_t num_dbs, DB **db_array, DBT *keys, uint32_t *flags_array \n "
" ) /* delete from multiple DBs */ " ,
" int (*set_generate_row_callback_for_del) (DB_ENV *env, generate_row_for_del_func generate_row_for_del) " ,
2013-04-16 23:59:24 -04:00
" int (*update_multiple) (DB_ENV *env, DB *src_db, DB_TXN *txn, \n "
2013-04-16 23:59:26 -04:00
" DBT *old_src_key, DBT *old_src_data, \n "
" DBT *new_src_key, DBT *new_src_data, \n "
" uint32_t num_dbs, DB **db_array, uint32_t *flags_array, \n "
2013-04-16 23:59:26 -04:00
" uint32_t num_keys, DBT *keys, \n "
2013-04-16 23:59:30 -04:00
" uint32_t num_vals, DBT *vals \n "
" ) /* update multiple DBs */ " ,
2013-04-16 23:59:04 -04:00
" int (*get_redzone) (DB_ENV *env, int *redzone) /* get the redzone limit */ " ,
" int (*set_redzone) (DB_ENV *env, int redzone) /* set the redzone limit in percent of total space */ " ,
2013-04-16 23:59:22 -04:00
" int (*set_lk_max_memory) (DB_ENV *env, uint64_t max) " ,
" int (*get_lk_max_memory) (DB_ENV *env, uint64_t *max) " ,
2013-04-16 23:57:47 -04:00
NULL } ;
print_struct ( " db_env " , 1 , db_env_fields32 , db_env_fields64 , sizeof ( db_env_fields32 ) / sizeof ( db_env_fields32 [ 0 ] ) , extra ) ;
}
2007-09-05 19:20:25 +00:00
2007-09-05 20:24:17 +00:00
assert ( sizeof ( db_key_range_fields32 ) = = sizeof ( db_key_range_fields64 ) ) ;
2008-05-13 13:07:25 +00:00
print_struct ( " db_key_range " , 0 , db_key_range_fields32 , db_key_range_fields64 , sizeof ( db_key_range_fields32 ) / sizeof ( db_key_range_fields32 [ 0 ] ) , 0 ) ;
2007-09-05 20:24:17 +00:00
assert ( sizeof ( db_lsn_fields32 ) = = sizeof ( db_lsn_fields64 ) ) ;
2013-04-16 23:58:03 -04:00
{
//const char *extra[] = {"u_int64_t lsn", NULL};
print_struct ( " db_lsn " , 0 , db_lsn_fields32 , db_lsn_fields64 , sizeof ( db_lsn_fields32 ) / sizeof ( db_lsn_fields32 [ 0 ] ) , 0 ) ;
}
2007-09-05 20:24:17 +00:00
2013-04-16 23:57:47 -04:00
assert ( sizeof ( dbt_fields32 ) = = sizeof ( dbt_fields64 ) ) ;
print_struct ( " dbt " , 0 , dbt_fields32 , dbt_fields64 , sizeof ( dbt_fields32 ) / sizeof ( dbt_fields32 [ 0 ] ) , 0 ) ;
2013-04-16 23:59:17 -04:00
//descriptor
printf ( " typedef struct __toku_descriptor { \n " ) ;
printf ( " u_int32_t version; \n " ) ;
printf ( " DBT dbt; \n " ) ;
printf ( " } *DESCRIPTOR, DESCRIPTOR_S; \n " ) ;
2013-04-16 23:57:48 -04:00
2007-09-05 20:28:58 +00:00
assert ( sizeof ( db_fields32 ) = = sizeof ( db_fields64 ) ) ;
2008-06-10 15:39:31 +00:00
{
2013-04-16 23:59:01 -04:00
//file fragmentation info
//a block is just a contiguous region in a file.
printf ( " //One header is included in 'data' \n " ) ;
printf ( " //One header is included in 'additional for checkpoint' \n " ) ;
printf ( " typedef struct __toku_db_fragmentation { \n " ) ;
printf ( " uint64_t file_size_bytes; //Total file size in bytes \n " ) ;
printf ( " uint64_t data_bytes; //Compressed User Data in bytes \n " ) ;
printf ( " uint64_t data_blocks; //Number of blocks of compressed User Data \n " ) ;
printf ( " uint64_t checkpoint_bytes_additional; //Additional bytes used for checkpoint system \n " ) ;
printf ( " uint64_t checkpoint_blocks_additional; //Additional blocks used for checkpoint system \n " ) ;
printf ( " uint64_t unused_bytes; //Unused space in file \n " ) ;
printf ( " uint64_t unused_blocks; //Number of contiguous regions of unused space \n " ) ;
printf ( " uint64_t largest_unused_block; //Size of largest contiguous unused space \n " ) ;
printf ( " } *TOKU_DB_FRAGMENTATION, TOKU_DB_FRAGMENTATION_S; \n " ) ;
2008-06-10 15:39:31 +00:00
const char * extra [ ] = { " int (*key_range64)(DB*, DB_TXN *, DBT *, u_int64_t *less, u_int64_t *equal, u_int64_t *greater, int *is_exact) " ,
2013-04-16 23:57:47 -04:00
" int (*stat64)(DB *, DB_TXN *, DB_BTREE_STAT64 *) " ,
2008-06-11 19:38:51 +00:00
" int (*pre_acquire_table_lock)(DB*, DB_TXN*) " ,
2013-04-16 23:59:24 -04:00
" int (*pre_acquire_fileops_lock)(DB*, DB_TXN*) " ,
2008-06-10 15:39:31 +00:00
" const DBT* (*dbt_pos_infty)(void) /* Return the special DBT that refers to positive infinity in the lock table.*/ " ,
" const DBT* (*dbt_neg_infty)(void)/* Return the special DBT that refers to negative infinity in the lock table.*/ " ,
2013-04-16 23:57:42 -04:00
" int (*row_size_supported) (DB*, u_int32_t) /* Test whether a row size is supported. */ " ,
2013-04-16 23:59:17 -04:00
" DESCRIPTOR descriptor /* saved row/dictionary descriptor for aiding in comparisons */ " ,
" int (*set_descriptor) (DB*, u_int32_t version, const DBT* descriptor) /* set row/dictionary descriptor for a db. Available only while db is open */ " ,
2013-04-16 23:57:58 -04:00
" int (*getf_set)(DB*, DB_TXN*, u_int32_t, DBT*, YDB_CALLBACK_FUNCTION, void*) /* same as DBC->c_getf_set without a persistent cursor) */ " ,
2013-04-16 23:57:59 -04:00
" int (*flatten)(DB*, DB_TXN*) /* Flatten a dictionary, similar to (but faster than) a table scan */ " ,
2013-04-16 23:59:22 -04:00
" int (*optimize)(DB*) /* Run garbage collecion and promote all transactions older than oldest. Amortized (happens during flattening) */ " ,
2013-04-16 23:59:01 -04:00
" int (*get_fragmentation)(DB*,TOKU_DB_FRAGMENTATION) " ,
2013-04-16 23:59:29 -04:00
" int (*set_indexer)(DB*, DB_INDEXER*) " ,
" void (*get_indexer)(DB*, DB_INDEXER**) " ,
2008-06-10 15:39:31 +00:00
NULL } ;
print_struct ( " db " , 1 , db_fields32 , db_fields64 , sizeof ( db_fields32 ) / sizeof ( db_fields32 [ 0 ] ) , extra ) ;
}
2007-09-05 20:28:58 +00:00
2007-09-05 20:24:17 +00:00
assert ( sizeof ( db_txn_active_fields32 ) = = sizeof ( db_txn_active_fields64 ) ) ;
2008-05-13 13:07:25 +00:00
print_struct ( " db_txn_active " , 0 , db_txn_active_fields32 , db_txn_active_fields64 , sizeof ( db_txn_active_fields32 ) / sizeof ( db_txn_active_fields32 [ 0 ] ) , 0 ) ;
2007-09-05 20:28:58 +00:00
assert ( sizeof ( db_txn_fields32 ) = = sizeof ( db_txn_fields64 ) ) ;
2013-04-16 23:57:38 -04:00
{
2013-04-16 23:59:01 -04:00
//txn progress info
printf ( " typedef struct __toku_txn_progress { \n " ) ;
printf ( " uint64_t entries_total; \n " ) ;
printf ( " uint64_t entries_processed; \n " ) ;
printf ( " uint8_t is_commit; \n " ) ;
printf ( " uint8_t stalled_on_checkpoint; \n " ) ;
printf ( " } *TOKU_TXN_PROGRESS, TOKU_TXN_PROGRESS_S; \n " ) ;
printf ( " typedef void(*TXN_PROGRESS_POLL_FUNCTION)(TOKU_TXN_PROGRESS, void*); \n " ) ;
2013-04-16 23:59:05 -04:00
printf ( " struct txn_stat { \n u_int64_t rollback_raw_count; \n }; \n " ) ;
2013-04-16 23:58:03 -04:00
const char * extra [ ] = {
" int (*txn_stat)(DB_TXN *, struct txn_stat **) " ,
" struct { void *next, *prev; } open_txns " ,
2013-04-16 23:59:01 -04:00
" int (*commit_with_progress)(DB_TXN*, uint32_t, TXN_PROGRESS_POLL_FUNCTION, void*) " ,
" int (*abort_with_progress)(DB_TXN*, TXN_PROGRESS_POLL_FUNCTION, void*) " ,
2013-04-16 23:58:03 -04:00
NULL ,
} ;
2013-04-16 23:58:57 -04:00
print_struct ( " db_txn " , INTERNAL_AT_END , db_txn_fields32 , db_txn_fields64 , sizeof ( db_txn_fields32 ) / sizeof ( db_txn_fields32 [ 0 ] ) , extra ) ;
2013-04-16 23:57:38 -04:00
}
2007-09-05 20:28:58 +00:00
2007-09-05 20:24:17 +00:00
assert ( sizeof ( db_txn_stat_fields32 ) = = sizeof ( db_txn_stat_fields64 ) ) ;
2008-05-13 13:07:25 +00:00
print_struct ( " db_txn_stat " , 0 , db_txn_stat_fields32 , db_txn_stat_fields64 , sizeof ( db_txn_stat_fields32 ) / sizeof ( db_txn_stat_fields32 [ 0 ] ) , 0 ) ;
2007-09-05 20:24:17 +00:00
2008-06-10 15:39:31 +00:00
{
2013-04-16 23:57:41 -04:00
const char * extra [ ] = {
" int (*c_getf_first)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_last)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_next)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_prev)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_current)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_current_binding)(DBC *, u_int32_t, YDB_CALLBACK_FUNCTION, void *) " ,
2013-04-16 23:59:21 -04:00
2013-04-16 23:57:41 -04:00
" int (*c_getf_set)(DBC *, u_int32_t, DBT *, YDB_CALLBACK_FUNCTION, void *) " ,
" int (*c_getf_set_range)(DBC *, u_int32_t, DBT *, YDB_CALLBACK_FUNCTION, void *) " ,
2013-04-16 23:57:59 -04:00
" int (*c_getf_set_range_reverse)(DBC *, u_int32_t, DBT *, YDB_CALLBACK_FUNCTION, void *) " ,
2013-04-16 23:59:22 -04:00
" int (*c_pre_acquire_read_lock)(DBC*, const DBT*, const DBT*) " ,
2008-06-10 15:39:31 +00:00
NULL } ;
assert ( sizeof ( dbc_fields32 ) = = sizeof ( dbc_fields64 ) ) ;
2013-04-16 23:58:57 -04:00
print_struct ( " dbc " , INTERNAL_AT_END , dbc_fields32 , dbc_fields64 , sizeof ( dbc_fields32 ) / sizeof ( dbc_fields32 [ 0 ] ) , extra ) ;
2008-06-10 15:39:31 +00:00
}
2007-09-05 20:28:58 +00:00
2007-09-06 14:18:08 +00:00
printf ( " #ifdef _TOKUDB_WRAP_H \n #define txn_begin txn_begin_tokudb \n #endif \n " ) ;
2008-03-05 11:54:58 +00:00
printf ( " int db_env_create(DB_ENV **, u_int32_t) %s; \n " , VISIBLE ) ;
printf ( " int db_create(DB **, DB_ENV *, u_int32_t) %s; \n " , VISIBLE ) ;
printf ( " char *db_strerror(int) %s; \n " , VISIBLE ) ;
printf ( " const char *db_version(int*,int *,int *) %s; \n " , VISIBLE ) ;
printf ( " int log_compare (const DB_LSN*, const DB_LSN *) %s; \n " , VISIBLE ) ;
2008-03-08 21:29:27 +00:00
printf ( " int db_env_set_func_fsync (int (*)(int)) %s; \n " , VISIBLE ) ;
2008-04-12 09:12:22 +00:00
printf ( " int toku_set_trace_file (char *fname) %s; \n " , VISIBLE ) ;
printf ( " int toku_close_trace_file (void) %s; \n " , VISIBLE ) ;
2013-04-16 23:57:38 -04:00
printf ( " int db_env_set_func_free (void (*)(void*)) %s; \n " , VISIBLE ) ;
2013-04-16 23:57:34 -04:00
printf ( " int db_env_set_func_malloc (void *(*)(size_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:13 -04:00
printf ( " int db_env_set_func_realloc (void *(*)(void*, size_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:57:42 -04:00
printf ( " int db_env_set_func_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:11 -04:00
printf ( " int db_env_set_func_full_pwrite (ssize_t (*)(int, const void *, size_t, toku_off_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:57:38 -04:00
printf ( " int db_env_set_func_write (ssize_t (*)(int, const void *, size_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:11 -04:00
printf ( " int db_env_set_func_full_write (ssize_t (*)(int, const void *, size_t)) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:13 -04:00
printf ( " int db_env_set_func_fdopen (FILE* (*)(int, const char *)) %s; \n " , VISIBLE ) ;
printf ( " int db_env_set_func_fopen (FILE* (*)(const char *, const char *)) %s; \n " , VISIBLE ) ;
printf ( " int db_env_set_func_open (int (*)(const char *, int, int)) %s; \n " , VISIBLE ) ;
printf ( " int db_env_set_func_fclose (int (*)(FILE*)) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:08 -04:00
printf ( " void db_env_set_func_loader_fwrite (size_t (*fwrite_fun)(const void*,size_t,size_t,FILE*)) %s; \n " , VISIBLE ) ;
2013-04-16 23:57:49 -04:00
printf ( " void db_env_set_checkpoint_callback (void (*)(void*), void*) %s; \n " , VISIBLE ) ;
2013-04-16 23:58:00 -04:00
printf ( " void db_env_set_checkpoint_callback2 (void (*)(void*), void*) %s; \n " , VISIBLE ) ;
2013-04-16 23:58:56 -04:00
printf ( " void db_env_set_recover_callback (void (*)(void*), void*) %s; \n " , VISIBLE ) ;
printf ( " void db_env_set_recover_callback2 (void (*)(void*), void*) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:11 -04:00
printf ( " void db_env_set_loader_size_factor (uint32_t) %s; \n " , VISIBLE ) ;
2013-04-16 23:59:23 -04:00
printf ( " void db_env_set_mvcc_garbage_collection_verification(u_int32_t) %s; \n " , VISIBLE ) ;
2007-09-04 21:40:11 +00:00
printf ( " #if defined(__cplusplus) \n } \n #endif \n " ) ;
2007-09-04 20:59:50 +00:00
printf ( " #endif \n " ) ;
return 0 ;
}
2007-09-28 17:11:22 +00:00