c-core/25_core/core25Example_main.c
/*
* Raima Database Manager
*
* Copyright (c) 2019 Raima Inc., All rights reserved.
*
* Use of this software, whether in source code format, or in executable,
* binary object code form, is governed by the Raima LICENSE which
* is fully described in the LICENSE.TXT file, included within this
* distribution of files.
*/
#include <stdio.h>
#include "example_fcns.h"
#include "rdm.h"
#include "rdmstartupapi.h"
/* Generated \c struct and \c typedef definitions to be used with the RDM APIs
*/
#include "core25_structs.h"
/* Generated catalog definition to be used with the RDM rdm_dbSetCatalog() API
*/
#include "core25_cat.h"
const char *const description = "Performance Test: comparing transaction sizes";
const RDM_CMDLINE_OPT opts[] = {{NULL, NULL, NULL, NULL}};
#define NUM_RECORDS 50000
RDM_RETCODE delete_records (
RDM_DB hDB)
{
rc = rdm_dbStartUpdate (hDB, RDM_LOCK_ALL, 0, NULL, 0, NULL);
print_error (rc);
if (rc == sOKAY)
{
/* empty the table */
rc = rdm_dbDeleteAllRowsFromTable (hDB, TABLE_SIMPLE);
print_error (rc);
rdm_dbEnd (hDB);
}
return rc;
}
RDM_RETCODE add_records (
unsigned int trans_size,
RDM_DB hDB)
{
SIMPLE simple_rec = {0};
perfTimer_t timer;
unsigned int count = 0;
unsigned int ii;
printf (
"Add %d records with %-5d per transaction:\t", NUM_RECORDS, trans_size);
timeMeasureBegin (&timer);
/* Loop to add 50,000 new simple record */
for (ii = 0, count = 0; ii < NUM_RECORDS && rc == sOKAY; ii++)
{
if (count == 0)
{
/* Start an update transaction and lock the table */
rc = rdm_dbStartUpdate (hDB, RDM_LOCK_ALL, 0, NULL, 0, NULL);
print_error (rc);
}
if (rc == sOKAY)
{
/* Set values for the new record */
simple_rec.int_col = 1;
/* Add the record to the database */
hDB, TABLE_SIMPLE, &simple_rec, sizeof (simple_rec), NULL);
print_error (rc);
}
if (rc == sOKAY)
{
/* Is it time to commit the transaction? */
if (++count == trans_size)
{
rc = rdm_dbEnd (hDB);
print_error (rc);
count = 0;
}
}
}
timeMeasureEnd (&timer);
printf ("%u milliseconds\n", timeMeasureDiff (&timer));
return rc;
}
int main_core25 (int argc, const char *const *argv)
{
RDM_DB hDB;
RDM_TFS hTFS;
unsigned int trans_size[] = {50000, 10000, 5000, 1000, 500, 100};
rc = rdm_cmdlineInit (&cmd, argc, argv, description, opts);
if (rc != sCMD_USAGE)
print_error (rc);
if (rc == sOKAY)
{
/* Initialize the TFS, task, and open/initialize the database */
rc = exampleOpenEmptyDatabase (&hTFS, &hDB, "core25", core25_cat);
if (rc == sOKAY)
{
for (int ii = 0; rc == sOKAY && ii < RLEN (trans_size); ii++)
{
/* delete all records before testing insert */
rc = delete_records (hDB);
if (rc == sOKAY)
{
/* Add records to the database */
rc = add_records (trans_size[ii], hDB);
}
}
exampleCleanup (hTFS, hDB);
}
}
return (int) rc;
}