void convert_table(char *in,char *out) { TABLE src,dst; int i; if (open_table(&src,in,"I")<0) { print_error("Cannot open input file %s",in); exit_session(ERR_OPEN); } else handle_select_flag(&src,'Q',NULL); if (create_table(&dst,out,src.row,src.col,'W',src.ident)<0) { close_table(&src); print_error("Cannot create output file %s",out); exit_session(ERR_CREAT); } else { reset_print_progress(); for (i=1;i<=src.col;i++) { print_progress("Convert table: ", (int)((100*i)/src.col),1); copy_col(&src,&dst,i); } CP_non_std_desc(&src,&dst); close_table(&dst); close_table(&src); } }
int main(int argc, char* argv[]) { int i; ib_err_t err; ib_crsr_t crsr; ib_trx_t ib_trx; (void) argc; (void) argv; err = ib_init(); assert(err == DB_SUCCESS); test_configure(); err = ib_startup("barracuda"); assert(err == DB_SUCCESS); err = create_database(DATABASE); assert(err == DB_SUCCESS); /* Create the tables. */ for (i = 0; i < 10; i++) { err = create_table(DATABASE, TABLE, i); assert(err == DB_SUCCESS); } ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ); assert(ib_trx != NULL); /* Open and close the cursor. */ for (i = 0; i < 10; i++) { err = open_table(DATABASE, TABLE, i, ib_trx, &crsr); assert(err == DB_SUCCESS); err = ib_cursor_close(crsr); assert(err == DB_SUCCESS); crsr = NULL; } err = ib_trx_commit(ib_trx); assert(err == DB_SUCCESS); err = ib_database_drop(DATABASE); assert(err == DB_SUCCESS); err = ib_shutdown(IB_SHUTDOWN_NORMAL); assert(err == DB_SUCCESS); #ifdef UNIV_DEBUG_VALGRIND VALGRIND_DO_LEAK_CHECK; #endif return(EXIT_SUCCESS); }
static ib_err_t test_phase_I(void) /*==============*/ { int i; ib_err_t err; int dups = 0; err = create_database(DATABASE); assert(err == DB_SUCCESS); err = create_table(DATABASE, TABLE); assert(err == DB_SUCCESS); for (i = 0; i < N_TRX; ++i) { ib_crsr_t crsr; ib_trx_t ib_trx; ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ); assert(ib_trx != NULL); err = open_table(DATABASE, TABLE, ib_trx, &crsr); assert(err == DB_SUCCESS); err = ib_cursor_lock(crsr, IB_LOCK_IX); assert(err == DB_SUCCESS); err = insert_rows(crsr, i * N_RECS, N_RECS); assert(err == DB_SUCCESS || err == DB_DUPLICATE_KEY); if (err == DB_DUPLICATE_KEY) { ++dups; } err = ib_cursor_close(crsr); assert(err == DB_SUCCESS); crsr = NULL; err = ib_trx_commit(ib_trx); assert(err == DB_SUCCESS); } assert(dups == 0 || dups == N_TRX); return(dups == N_TRX ? DB_DUPLICATE_KEY : DB_SUCCESS); }
int main(int argc, char* argv[]) { int i; ib_err_t err; ib_crsr_t crsr; ib_trx_t ib_trx; #ifdef __WIN__ srand((int) time(NULL)); #else srandom(time(NULL)); #endif err = ib_init(); assert(err == DB_SUCCESS); test_configure(); #ifndef __WIN__ set_options(argc, argv); #endif /* __WIN__ */ err = ib_startup("barracuda"); assert(err == DB_SUCCESS); err = create_database(DATABASE); assert(err == DB_SUCCESS); for (i = 0; i < 10; ++i) { int j; printf("Create table\n"); err = create_table(DATABASE, TABLE); assert(err == DB_SUCCESS); for (j = 0; j < 10; ++j) { ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ); assert(ib_trx != NULL); err = open_table(DATABASE, TABLE, ib_trx, &crsr); assert(err == DB_SUCCESS); err = ib_cursor_lock(crsr, IB_LOCK_IX); assert(err == DB_SUCCESS); insert_random_rows(crsr); update_random_rows(crsr); err = ib_cursor_close(crsr); assert(err == DB_SUCCESS); crsr = NULL; err = ib_trx_commit(ib_trx); assert(err == DB_SUCCESS); } printf("Drop table\n"); err = drop_table(DATABASE, TABLE); assert(err == DB_SUCCESS); } err = ib_shutdown(IB_SHUTDOWN_NORMAL); assert(err == DB_SUCCESS); #ifdef UNIV_DEBUG_VALGRIND VALGRIND_DO_LEAK_CHECK; #endif return(EXIT_SUCCESS); }
/******************** TABLE END ********************/ void open_additional_libs(lua_State *L){ open_bit(L); open_string(L); // open_math(L); open_table(L); }
int main(int argc, char **argv) { int nocol_short, nocol_long, nocol_float, nocol_double; int status; char **argval, **arglabel; int i, nbrow = NBROW, nbcol=NBCOL, sel[NBROW]; short sval, s_colbuf[NBROW], s_key; long lval, l_colbuf[NBROW]; float fval, f_colbuf[NBROW]; double dval, d_colbuf[NBROW]; char ident[20]; char selection[30]; TABLE table; /* init_session() checking */ printf("IOLIB environment routines :\n\n"); fflush(stdout); init_session(argv,argc,&arglabel,&argval); /* set_control_level(WARNING); */ printf("Table creation ..."); fflush(stdout); strcpy(ident,"Dummy table"); create_table(&table,"chk_tbl_io",nbrow,nbcol,'W',ident); printf("Ok\n"); fflush(stdout); /* printf("Column creation ...(format Characters) "); fflush(stdout); nocol_char = create_col(&table,":TEXT",CHAR,'N',"A20",NULL); if (nocol_char < 0) { printf("Problem creating column TEXT, status returned = %d\n", nocol_char); exit (-1); } printf("Ok\n"); fflush(stdout); printf("Writing into created column ..."); fflush(stdout); for (i=0; i<nbrow; i++) { sprintf(text,"String no %2d",i); WR_tbl(&table,i,nocol_char,text); } printf("Ok\n"); fflush(stdout); */ printf("Column creation ...(format Short) "); fflush(stdout); nocol_short = create_col(&table,":SHORT",SHORT,'N',"I2",NULL); if (nocol_short < 0) { printf("Problem creating column SHORT, status returned = %d\n", nocol_short); exit (-1); } printf("Ok\n"); fflush(stdout); printf("Writing into created column ..."); fflush(stdout); for (i=0; i<nbrow; i++) { sval = (short)i; WR_tbl(&table,i,nocol_short,&sval); } printf("Ok\n"); fflush(stdout); printf("Column creation ...(format Long) "); fflush(stdout); nocol_long = create_col(&table,":LONG",LONG,'N',"I4",NULL); if (nocol_long < 0) { printf("Problem creating column LONG, status returned = %d\n", nocol_long); exit (-1); } printf("Ok\n"); fflush(stdout); printf("Writing into created column ..."); fflush(stdout); for (i=0; i<nbrow; i++) { lval = (long)i; WR_tbl(&table,i,nocol_long,&lval); } printf("Ok\n"); fflush(stdout); printf("Column creation ...(format Float) "); fflush(stdout); nocol_float = create_col(&table,":FLOAT",FLOAT,'N',"F9.6",NULL); if (nocol_float < 0) { printf("Problem creating column FLOAT, status returned = %d\n", nocol_float); exit (-1); } printf("Ok\n"); fflush(stdout); printf("Writing into created column ..."); fflush(stdout); for (i=0; i<nbrow; i++) { fval = (float)i; WR_tbl(&table,i,nocol_float,&fval); } printf("Ok\n"); fflush(stdout); printf("Column creation ...(format Double) "); fflush(stdout); nocol_double = create_col(&table,":DOUBLE",DOUBLE,'N',"E15.5",NULL); if (nocol_double < 0) { printf("Problem creating column DOUBLE, status returned = %d\n", nocol_double); exit (-1); } printf("Ok\n"); fflush(stdout); printf("Writing into created column ..."); fflush(stdout); for (i=0; i<nbrow; i++) { dval = (double)i; WR_tbl(&table,i,nocol_double,&dval); } printf("Ok\n\n"); fflush(stdout); for (i=0; i<nbrow; i++) { if (i%2 == 0) sel[i] = 0; else sel[i] = 1; } write_selection(&table,sel,"check_selection"); printf("Saving created table ..."); fflush(stdout); close_table(&table); printf("Ok\n"); fflush(stdout); printf("Opening previous table ..."); fflush(stdout); open_table(&table,"chk_tbl_io","I"); printf("Ok\n"); fflush(stdout); printf("Handling selection ..."); fflush(stdout); handle_select_flag(&table,'W',selection); printf("Ok\n"); fflush(stdout); printf("Reading columns info ..."); fflush(stdout); /* nocol_char = get_col_ref(&table,":TEXT"); */ nocol_short = get_col_ref(&table,":SHORT"); nocol_long = get_col_ref(&table,":LONG"); nocol_float = get_col_ref(&table,":FLOAT"); nocol_double = get_col_ref(&table,":DOUBLE"); printf("Ok\n"); nbrow = table.row; /* printf("Reading previous column ...(format Characters) "); fflush(stdout); RD_col(&table,nocol_char,c_colbuf); for (i=0; i<nbrow; i++) { sprintf(text,"String no %2d",i); if (strcmp(text,(c_colbuf+i*21)) != 0) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column item by item ...(format Characters) "); fflush(stdout); for (i=0; i<nbrow; i++) { RD_tbl(&table,i,nocol_char,Rtext); sprintf(text,"String no %2d",i); if (strcmp(text,Rtext) != 0) { printf("FATAL : Unexpected values in table, line %d\n",i); printf("*%s* is not *%s*\n", Rtext, text); return(-1); } } printf("Ok\n"); */ printf("Reading previous column ...(format Short) "); fflush(stdout); s_colbuf[0] = 0; RD_col(&table,nocol_short,s_colbuf); printf("Ok\n"); printf("Searching for no 501 ... "); fflush(stdout); s_key = 501; status = search_in_col(&table,nocol_short,&s_key); if (status >= 0) printf("Found in line %d\n",status); else { printf("Unable to find it\n"); return(-1); } printf("Searching for no 500 ... "); fflush(stdout); s_key = 500; status = search_in_col(&table,nocol_short,&s_key); if (status >= 0) printf("Found in line %d\n",status); else { printf("Unable to find it (not selected)\n"); } for (i=0; i<nbrow; i++) { if (s_colbuf[i] != (short)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); printf("Read %d, Expected %d\n",s_colbuf[i],2*i+1); return(-1); } } printf("Ok\n"); printf("Reading previous column item by item ...(format Short) "); fflush(stdout); for (i=0; i<nbrow; i++) { RD_tbl(&table,i,nocol_short,&sval); if (sval != (short)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column ..(format Long) "); fflush(stdout); RD_col(&table,nocol_long,l_colbuf); for (i=0; i<nbrow; i++) { if (l_colbuf[i] != (long)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column item by item ...(format Long) "); fflush(stdout); for (i=0; i<nbrow; i++) { RD_tbl(&table,i,nocol_long,&lval); if (lval != (long)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column ...(format Float) "); fflush(stdout); RD_col(&table,nocol_float,f_colbuf); for (i=0; i<nbrow; i++) { if (f_colbuf[i] != (float)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column item by item ...(format Float) "); fflush(stdout); for (i=0; i<nbrow; i++) { RD_tbl(&table,i,nocol_float,&fval); if (fval != (float)(2*i+1)) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column ..(format Double) "); fflush(stdout); RD_col(&table,nocol_double,d_colbuf); for (i=0; i<nbrow; i++) { if (ABS(d_colbuf[i] - (double)(2*i+1)) > 1e-8) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); printf("Reading previous column item by item ...(format Double) "); fflush(stdout); for (i=0; i<nbrow; i++) { RD_tbl(&table,i,nocol_double,&dval); if (ABS(dval - (double)(2*i+1)) > 1e-8) { printf("FATAL : Unexpected values in table, line %d\n",i); return(-1); } } printf("Ok\n"); fflush(stdout); printf("Deleting previous table ..."); fflush(stdout); delete_table(&table); printf("Ok\n"); fflush(stdout); exit_session(0); return(0); }
rc_t run_tests (void) { VDBManager * mgr; rc_t rc; if (verbose) printf("%s call VDBManagerMakeUpdate\n", __func__); rc = VDBManagerMakeUpdate (&mgr, NULL); if (rc) { LOGERR (klogInt, rc, "Failed to open VDBManager"); return rc; } else { VSchema * schema; if (verbose) printf("%s call VDBManagerMakeSchema\n", __func__); rc = VDBManagerMakeSchema (mgr, &schema); printf("%s schema == %p\n", __func__, (void*)schema); if (rc) LOGERR (klogInt, rc, "Failed to make empty schema"); else { if(verbose) printf("%s call VSchemaParseText\n", __func__); rc = VSchemaParseText (schema, "rowlen_schema", schema_text, string_size (schema_text)); if (rc) LOGERR (klogInt, rc, "Failed to parse internal schema"); else { int ix; for ( ix = 0; ix < 6; ++ix) { VTable * table; rc_t orc; if (verbose) printf("%s call open_table\n", __func__); rc = open_table (mgr, schema, &table); if (rc) { LOGERR (klogErr, rc, "Failed to open table"); break; } if (verbose) printf("%s call run_test\n", __func__); rc = run_test (table, &tests[ix]); if (rc) { pLOGERR (klogErr, rc, "Failed $(D)", PLOG_S(D), tests[ix].test_name); } if (verbose) printf("%s call VTableRelease\n", __func__); orc = VTableRelease (table); if (orc) { LOGERR (klogErr, rc, "failed to close table"); } if (orc && (rc == 0)) rc = orc; if (rc) break; } } if (verbose) printf("%s call VSchemaRelease\n", __func__); VSchemaRelease (schema); } if (verbose) printf("%s call VDBManagerRelease\n", __func__); VDBManagerRelease (mgr); } return rc; }
int main(int argc, char* argv[]) { ib_err_t err; ib_crsr_t crsr; ib_trx_t ib_trx; (void) argc; (void) argv; err = ib_init(); assert(err == DB_SUCCESS); test_configure(); err = ib_startup("barracuda"); assert(err == DB_SUCCESS); err = create_database(DATABASE); assert(err == DB_SUCCESS); err = create_table(DATABASE, TABLE); assert(err == DB_SUCCESS); ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ); assert(ib_trx != NULL); err = open_table(DATABASE, TABLE, ib_trx, &crsr); assert(err == DB_SUCCESS); err = ib_cursor_lock(crsr, IB_LOCK_IX); assert(err == DB_SUCCESS); err = insert_random_rows(crsr); assert(err == DB_SUCCESS); err = ib_cursor_close(crsr); assert(err == DB_SUCCESS); crsr = NULL; err = ib_trx_commit(ib_trx); assert(err == DB_SUCCESS); err = create_sec_index_1(DATABASE, TABLE); assert(err == DB_SUCCESS); err = test_create_temp_index(DATABASE, TABLE, "c2"); err = open_sec_index_1(DATABASE, TABLE); assert(err == DB_SUCCESS); err = drop_table(DATABASE, TABLE); assert(err == DB_SUCCESS); err = ib_shutdown(IB_SHUTDOWN_NORMAL); assert(err == DB_SUCCESS); #ifdef UNIV_DEBUG_VALGRIND VALGRIND_DO_LEAK_CHECK; #endif return(EXIT_SUCCESS); }
/********************************************************************** DELETE FROM t2 WHERE c1 == 9 @return DB_SUCCESS or error code */ static ib_err_t delete_t2( /*======*/ void* arg) /*!< in: arguments for callback */ { ib_err_t err; int res = ~0; int nine = 9; ib_tpl_t key_tpl = NULL; ib_crsr_t crsr = NULL; cb_args_t* cb_arg = (cb_args_t *)arg; tbl_class_t* tbl = cb_arg->tbl; //fprintf(stderr, "t2: DELETE\n"); err = open_table(tbl->db_name, tbl->name, cb_arg->trx, &crsr); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_lock(crsr, IB_LOCK_IX); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_set_lock_mode(crsr, IB_LOCK_X); if (err != DB_SUCCESS) { goto err_exit; } /* Create a tuple for searching an index. */ key_tpl = ib_sec_search_tuple_create(crsr); assert(key_tpl != NULL); /* Set the value to delete. */ err = ib_col_set_value(key_tpl, 0, &nine, 4); assert(err == DB_SUCCESS); /* Search for the key using the cluster index (PK) */ err = ib_cursor_moveto(crsr, key_tpl, IB_CUR_GE, &res); if (res != 0) { goto clean_exit; } if (err != DB_SUCCESS) { goto err_exit; } /* InnoDB handles the updating of all secondary indexes. */ err = ib_cursor_delete_row(crsr); if (err != DB_SUCCESS) { goto err_exit; } update_err_stats(cb_arg->err_st, err); goto clean_exit; err_exit: update_err_stats(cb_arg->err_st, err); clean_exit: if (key_tpl != NULL) { ib_tuple_delete(key_tpl); } if (crsr != NULL) { ib_err_t err2; err2 = ib_cursor_close(crsr); assert(err2 == DB_SUCCESS); crsr = NULL; } return(err); }
/********************************************************************** UPDATE t2 SET score = score + 100 AND upd_run = run_number WHERE c1 == 5 @return DB_SUCCESS or error code */ static ib_err_t update_t2( /*======*/ void* arg) /*!< in: arguments for callback */ { ib_err_t err; int res = ~0; int five = 5; ib_tpl_t key_tpl = NULL; ib_tpl_t old_tpl = NULL; ib_tpl_t new_tpl = NULL; ib_crsr_t crsr = NULL; cb_args_t* cb_arg = (cb_args_t *)arg; tbl_class_t* tbl = cb_arg->tbl; //fprintf(stderr, "t2: UPDATE\n"); err = open_table(tbl->db_name, tbl->name, cb_arg->trx, &crsr); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_lock(crsr, IB_LOCK_IX); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_set_lock_mode(crsr, IB_LOCK_X); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_set_lock_mode(crsr, IB_LOCK_X); assert(err == DB_SUCCESS); /* Create a tuple for searching an index. */ key_tpl = ib_sec_search_tuple_create(crsr); assert(key_tpl != NULL); /* Set the value to look for. */ err = ib_col_set_value(key_tpl, 0, &five, 4); assert(err == DB_SUCCESS); /* Search for the key using the cluster index (PK) */ err = ib_cursor_moveto(crsr, key_tpl, IB_CUR_GE, &res); ib_tuple_delete(key_tpl); if (res != 0) { goto clean_exit; } else if (err != DB_SUCCESS) { goto err_exit; } /* Create the tuple instance that we will use to update the table. old_tpl is used for reading the existing row and new_tpl will contain the update row data. */ old_tpl = ib_clust_read_tuple_create(crsr); assert(old_tpl != NULL); new_tpl = ib_clust_read_tuple_create(crsr); assert(new_tpl != NULL); /* Iterate over the records while the first column matches "a". */ while (1) { ib_u32_t score; ib_u32_t val; ib_ulint_t data_len; ib_col_meta_t col_meta; err = ib_cursor_read_row(crsr, old_tpl); assert(err == DB_SUCCESS); ib_col_get_meta(old_tpl, 0, &col_meta); err = ib_tuple_read_u32(old_tpl, 0, &val); assert(err == DB_SUCCESS); if (val != five) { goto clean_exit; } /* Copy the old contents to the new tuple. */ err = ib_tuple_copy(new_tpl, old_tpl); /* Update the score column in the new tuple. */ data_len = ib_col_get_meta(old_tpl, 1, &col_meta); assert(data_len != IB_SQL_NULL); err = ib_tuple_read_u32(old_tpl, 1, &score); assert(err == DB_SUCCESS); score += 100; /* Set the updated value in the new tuple. */ err = ib_tuple_write_u32(new_tpl, 1, score); assert(err == DB_SUCCESS); /* Set the updated value in the new tuple. */ err = ib_tuple_write_u32(new_tpl, 3, cb_arg->run_number); assert(err == DB_SUCCESS); err = ib_cursor_update_row(crsr, old_tpl, new_tpl); if (err != DB_SUCCESS) { goto err_exit; } update_err_stats(cb_arg->err_st, err); /* Move to the next record to update. */ err = ib_cursor_next(crsr); if (err != DB_SUCCESS) { goto err_exit; } /* Reset the old and new tuple instances. */ old_tpl = ib_tuple_clear(old_tpl); assert(old_tpl != NULL); new_tpl = ib_tuple_clear(new_tpl); assert(new_tpl != NULL); } err_exit: update_err_stats(cb_arg->err_st, err); clean_exit: if (old_tpl != NULL) { ib_tuple_delete(old_tpl); } if (new_tpl != NULL) { ib_tuple_delete(new_tpl); } if (crsr != NULL) { ib_err_t err2; err2 = ib_cursor_close(crsr); assert(err2 == DB_SUCCESS); crsr = NULL; } return(err); }
/********************************************************************** INSERT INTO t2 VALUES (<rand 1-100>, 0, run_number, 0) @return DB_SUCCESS or error code */ static ib_err_t insert_t2( /*======*/ void* arg) /*!< in: arguments for callback */ { int i; ib_err_t err; ib_crsr_t crsr = NULL; ib_tpl_t tpl = NULL; cb_args_t* cb_arg = (cb_args_t *)arg; tbl_class_t* tbl = cb_arg->tbl; //fprintf(stderr, "t2: INSERT\n"); err = open_table(tbl->db_name, tbl->name, cb_arg->trx, &crsr); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_lock(crsr, IB_LOCK_IX); if (err != DB_SUCCESS) { goto err_exit; } err = ib_cursor_set_lock_mode(crsr, IB_LOCK_X); if (err != DB_SUCCESS) { goto err_exit; } tpl = ib_clust_read_tuple_create(crsr); assert(tpl != NULL); for (i = 0; i < cb_arg->batch_size; ++i) { int val = 0; int zero = 0; val = random() % key_range; err = ib_col_set_value(tpl, 0, &val, 4); assert(err == DB_SUCCESS); err = ib_col_set_value(tpl, 1, &zero, 4); assert(err == DB_SUCCESS); err = ib_col_set_value(tpl, 2, &cb_arg->run_number, 4); assert(err == DB_SUCCESS); err = ib_col_set_value(tpl, 3, &zero, 4); assert(err == DB_SUCCESS); err = ib_cursor_insert_row(crsr, tpl); if (err != DB_SUCCESS) { goto err_exit; } update_err_stats(cb_arg->err_st, err); tpl = ib_tuple_clear(tpl); assert(tpl != NULL); } goto clean_exit; err_exit: update_err_stats(cb_arg->err_st, err); clean_exit: if (tpl != NULL) { ib_tuple_delete(tpl); } if (crsr != NULL) { ib_err_t err2; err2 = ib_cursor_close(crsr); assert(err2 == DB_SUCCESS); crsr = NULL; } return(err); }
int main(int argc, char* argv[]) { ib_err_t err; ib_crsr_t crsr; ib_trx_t ib_trx; (void)argc; (void)argv; err = ib_init(); assert(err == DB_SUCCESS); test_configure(); err = ib_startup("barracuda"); assert(err == DB_SUCCESS); err = create_database(DATABASE); assert(err == DB_SUCCESS); printf("Create table\n"); err = create_table(DATABASE, TABLE); assert(err == DB_SUCCESS); printf("Begin transaction\n"); ib_trx = ib_trx_begin(IB_TRX_REPEATABLE_READ); assert(ib_trx != NULL); printf("Open cursor\n"); err = open_table(DATABASE, TABLE, ib_trx, &crsr); assert(err == DB_SUCCESS); printf("Lock table in IX\n"); err = ib_cursor_lock(crsr, IB_LOCK_IX); assert(err == DB_SUCCESS); printf("Insert rows\n"); err = insert_rows(crsr); assert(err == DB_SUCCESS); printf("Query table\n"); err = do_query(crsr); assert(err == DB_SUCCESS); printf("Close cursor\n"); err = ib_cursor_close(crsr); assert(err == DB_SUCCESS); crsr = NULL; printf("Commit transaction\n"); err = ib_trx_commit(ib_trx); assert(err == DB_SUCCESS); printf("Drop table\n"); err = drop_table(DATABASE, TABLE); assert(err == DB_SUCCESS); err = ib_shutdown(IB_SHUTDOWN_NORMAL); assert(err == DB_SUCCESS); #ifdef UNIV_DEBUG_VALGRIND VALGRIND_DO_LEAK_CHECK; #endif return(EXIT_SUCCESS); }