Define() establishes specific data definitions. This involves defining columns/fields and creating the tables/files with optional indexes.
Below is the code for Define():
/*
* Define()
*
* Open the table, if it exists. Otherwise create and open the table
*/
#ifdef PROTOTYPE
VOID Define(VOID)
#else
VOID Define()
#endif
{
CTHANDLE hField1, hField2, hField3, hField4;
CTHANDLE hField5, hField6, hField7;
printf("DEFINE\n");
/* allocate a table handle */
if ((hTable = ctdbAllocTable(hDatabase)) == NULL)
Handle_Error("Define(); ctdbAllocTable()");
/* open table */
printf("\tOpen table...\n");
if (ctdbOpenTable(hTable, "custmast", CTOPEN_NORMAL))
{
/* define table fields */
printf("\tAdd fields...\n");
hField1 = ctdbAddField(hTable, "cm_custnumb", CT_FSTRING, 4);
hField2 = ctdbAddField(hTable, "cm_custzipc", CT_FSTRING, 9);
hField3 = ctdbAddField(hTable, "cm_custstat", CT_FSTRING, 2);
hField4 = ctdbAddField(hTable, "cm_custratg", CT_FSTRING, 1);
hField5 = ctdbAddField(hTable, "cm_custname", CT_STRING, 47);
hField6 = ctdbAddField(hTable, "cm_custaddr", CT_STRING, 47);
hField7 = ctdbAddField(hTable, "cm_custcity", CT_STRING, 47);
if (!hField1 || !hField2 || !hField3 || !hField4 ||
!hField5 || !hField6|| !hField7)
Handle_Error("Define(); ctdbAddField()");
/* create table */
printf("\tCreate table...\n");
if (ctdbCreateTable(hTable, "custmast", CTCREATE_NORMAL))
Handle_Error("Define(); ctdbCreateTable()");
if (ctdbOpenTable(hTable, "custmast", CTOPEN_NORMAL))
Handle_Error("Define(); ctdbOpenTable()");
}
else
Check_Table_Mode(hTable);
}
/*
* Check_Table_Mode()
*
* Check if existing table has transaction processing flag enabled.
* If a table is under transaction processing control, modify the
* table mode to disable transaction processing
*/
#ifdef PROTOTYPE
VOID Check_Table_Mode(CTHANDLE hTable)
#else
VOID Check_Table_Mode(hTable)
CTHANDLE hTable;
#endif
{
CTCREATE_MODE mode;
/* get table create mode */
mode = ctdbGetTableCreateMode(hTable);
/* check if table is under transaction processing control */
if ((mode & CTCREATE_TRNLOG))
{
/* change file mode to disable transaction processing */
mode ^= CTCREATE_TRNLOG;
if (ctdbUpdateCreateMode(hTable, mode) != CTDBRET_OK)
Handle_Error("Check_Table_Mode(); ctdbUpdateCreateMode");
}
}