Define
The Define() step is where specific data definitions are established by your application and/or process. This involves defining columns/fields and creating the tables/files with optional indices. Below is the code for Define(): // // Define() // // Open the table, if it exists. Otherwise create and open the table // VOID Define(VOID) {
printf("DEFINE\n");
Create_CustomerMaster_Table(); Create_CustomerOrders_Table(); Create_OrderItems_Table(); Create_ItemMaster_Table(); } // // Create_CustomerMaster_Table() // // Open table CustomerMaster, if it exists. Otherwise create it // along with its indices and open it // VOID Create_CustomerMaster_Table(VOID) {
CTBOOL do_create = NO; // define table CustomerMaster printf("\ttable CustomerMaster\n");
try {
tableCustMast.Open("custmast", CTOPEN_NORMAL);
} catch (...) {
// table does not exist do_create = YES; } if (do_create) {
try {
// define table fields CTField field1 = tableCustMast.AddField("cm_custnumb", CT_FSTRING, 4);
tableCustMast.AddField("cm_custzipc", CT_FSTRING, 9);
tableCustMast.AddField("cm_custstat", CT_FSTRING, 2);
tableCustMast.AddField("cm_custratg", CT_FSTRING, 1);
tableCustMast.AddField("cm_custname", CT_STRING, 47);
tableCustMast.AddField("cm_custaddr", CT_STRING, 47);
tableCustMast.AddField("cm_custcity", CT_STRING, 47);
// define index CTIndex index1 = tableCustMast.AddIndex("cm_custnumb_idx", CTINDEX_FIXED, NO, NO);
index1.AddSegment(field1, CTSEG_SCHSEG); // create table printf("\tCreate table...\n");
tableCustMast.Create("custmast", CTCREATE_NORMAL);
// open table printf("\tOpen table...\n");
tableCustMast.Open("custmast", CTOPEN_NORMAL);
} catch (CTException E) {
Handle_Exception(E); } } else {
Check_Table_Mode(tableCustMast); // confirm the index exists, if not then add the index // // this scenario arises out of the fact that this table was created in tutorial 1 // without indexes. The index is now created by the call to ctdbAlterTable do_create = NO; try {
tableCustMast.GetIndex("cm_custnumb_idx");
} catch (CTException E) {
do_create = YES; } if (do_create) {
try {
CTField field1 = tableCustMast.GetField("cm_custnumb");
CTIndex index1 = tableCustMast.AddIndex("cm_custnumb_idx", CTINDEX_FIXED, NO, NO);
index1.AddSegment(field1, CTSEG_SCHSEG); tableCustMast.Alter(CTDB_ALTER_NORMAL); } catch (CTException E) {
Handle_Exception(E); } } } } // // Create_CustomerOrders_Table() // // Open table CustomerOrders, if it exists. Otherwise create it // along with its indices and open it // VOID Create_CustomerOrders_Table(VOID) {
CTBOOL do_create = NO; // define table CustomerOrders printf("\ttable CustomerOrders\n");
try {
tableCustOrdr.Open("custordr", CTOPEN_NORMAL);
} catch (...) {
// table does not exist do_create = YES; } if (do_create) {
try {
// define table fields tableCustOrdr.AddField("co_ordrdate", CT_DATE, 4);
tableCustOrdr.AddField("co_promdate", CT_DATE, 4);
CTField field1 = tableCustOrdr.AddField("co_ordrnumb", CT_FSTRING, 6);
CTField field2 = tableCustOrdr.AddField("co_custnumb", CT_FSTRING, 4);
// define indices CTIndex index1 = tableCustOrdr.AddIndex("co_ordrnumb_idx", CTINDEX_LEADING, NO, NO);
index1.AddSegment(field1, CTSEG_SCHSEG); CTIndex index2 = tableCustOrdr.AddIndex("co_custnumb_idx", CTINDEX_LEADING, YES, NO);
index2.AddSegment(field2, CTSEG_SCHSEG); // create table printf("\tCreate table...\n");
tableCustOrdr.Create("custordr", CTCREATE_NORMAL);
// open table printf("\tOpen table...\n");
tableCustOrdr.Open("custordr", CTOPEN_NORMAL);
} catch (CTException E) {
Handle_Exception(E); } } else Check_Table_Mode(tableCustOrdr); } // // Create_OrderItems_Table() // // Open table OrderItems, if it exists. Otherwise create it // along with its indices and open it // VOID Create_OrderItems_Table(VOID) {
CTBOOL do_create = NO; // define table OrderItems printf("\ttable OrderItems\n");
try {
tableOrdrItem.Open("ordritem", CTOPEN_NORMAL);
} catch (...) {
// table does not exist do_create = YES; } if (do_create) {
try {
// define table fields CTField field1 = tableOrdrItem.AddField("oi_sequnumb", CT_INT2, 2);
tableOrdrItem.AddField("oi_quantity", CT_INT2, 2);
CTField field2 = tableOrdrItem.AddField("oi_ordrnumb", CT_FSTRING, 6);
CTField field3 = tableOrdrItem.AddField("oi_itemnumb", CT_FSTRING, 5);
// define indices CTIndex index1 = tableOrdrItem.AddIndex("oi_ordrnumb_idx", CTINDEX_LEADING, NO, NO);
index1.AddSegment(field2, CTSEG_SCHSEG); index1.AddSegment(field1, CTSEG_SCHSEG); CTIndex index2 = tableOrdrItem.AddIndex("oi_itemnumb_idx", CTINDEX_LEADING, YES, NO);
index2.AddSegment(field3, CTSEG_SCHSEG); // create table printf("\tCreate table...\n");
tableOrdrItem.Create("ordritem", CTCREATE_NORMAL);
// open table printf("\tOpen table...\n");
tableOrdrItem.Open("ordritem", CTOPEN_NORMAL);
} catch (CTException E) {
Handle_Exception(E); } } else Check_Table_Mode(tableOrdrItem); } // // Create_ItemMaster_Table() // // Open table ItemMaster, if it exists. Otherwise create it // along with its indices and open it // VOID Create_ItemMaster_Table(VOID) {
CTBOOL do_create = NO; // define table ItemMaster printf("\ttable ItemMaster\n");
try {
tableItemMast.Open("itemmast", CTOPEN_NORMAL);
} catch (...) {
// table does not exist do_create = YES; } if (do_create) {
try {
// define table fields tableItemMast.AddField("im_itemwght", CT_INT4, 4);
tableItemMast.AddField("im_itempric", CT_MONEY, 4);
CTField field1 = tableItemMast.AddField("im_itemnumb", CT_FSTRING, 5);
tableItemMast.AddField("im_itemdesc", CT_STRING, 47);
// define indices CTIndex index1 = tableItemMast.AddIndex("im_itemnumb_idx", CTINDEX_FIXED, NO, NO);
index1.AddSegment(field1, CTSEG_SCHSEG); // create table printf("\tCreate table...\n");
tableItemMast.Create("itemmast", CTCREATE_NORMAL);
// open table printf("\tOpen table...\n");
tableItemMast.Open("itemmast", CTOPEN_NORMAL);
} catch (CTException E) {
Handle_Exception(E); } } else Check_Table_Mode(tableItemMast); } // // 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 // VOID Check_Table_Mode(CTTable& table) {
try {
// get table create mode CTCREATE_MODE mode = table.GetCreateMode(); // check if table is under transaction processing control if ((mode & CTCREATE_TRNLOG)) {
// change file mode to disable transaction processing mode ^= CTCREATE_TRNLOG; table.UpdateCreateMode(mode); } } catch (CTException E) {
Handle_Exception(E); } } |
|||