Re: Modelling Pizza Orders with XDb1
Date: 15 Apr 2004 21:16:43 -0700
Message-ID: <4b45d3ad.0404152016.119dec75_at_posting.google.com>
> ... Pizza orders. The first order consists of a small, thin pizza > with mozzarella and veggies. The second order consists of a large, > thick pizza with mozzarella, parmesan, sausage, pepperoni, > black olives and four cokes.
The following code models the above data programmatically via XDb1's API. The code also shows how to find things via relational expressions.
void Example108()
{
// Create classes
// Create order
int* pOrder = T_create(); T_relate(&pOrder, rCls, &pThing_g); T_Name_set(&pOrder, _T("order")); // Create pizza int* pPizza = T_create(); T_relate(&pPizza, rCls, &pThing_g); T_Name_set(&pPizza, _T("pizza")); // Create size int* pSize = T_create(); T_relate(&pSize, rCls, &pThing_g); T_Name_set(&pSize, _T("size")); // Create crust int* pCrust = T_create(); T_relate(&pCrust, rCls, &pThing_g); T_Name_set(&pCrust, _T("crust")); // Create cheese int* pCheese = T_create(); T_relate(&pCheese, rCls, &pThing_g); T_Name_set(&pCheese, _T("cheese")); // Create topping int* pTopping = T_create(); T_relate(&pTopping, rCls, &pThing_g); T_Name_set(&pTopping, _T("topping")); // Create drink int* pDrink = T_create(); T_relate(&pDrink, rCls, &pThing_g); T_Name_set(&pDrink, _T("drink")); // Create drinkType int* pDrinkType = T_create(); T_relate(&pDrinkType, rCls, &pThing_g); T_Name_set(&pDrinkType, _T("drinkType")); // Create qty int* pQty = T_create(); T_relate(&pQty, rCls, &pThing_g); T_Name_set(&pQty, _T("qty"));
// Create order 1
int* pOrder1 = T_create();
T_relate(&pOrder1, rCls, &pOrder);
T_Name_set(&pOrder1, _T("order 1"));
// Create a pizza
int* pAPizza = T_create(); T_relate(&pAPizza, rCls, &pPizza);
// Relate pizza is part of order 1
T_relate(&pAPizza, rAsm, &pOrder1);
// Set the pizza's size is thin
T_Val_set(&pAPizza, &pSize, _T("small"));
// Set the pizza's crust is thin
T_Val_set(&pAPizza, &pCrust, _T("thin"));
// Set the pizza's cheese is mozzarella
T_Val_set(&pAPizza, &pCheese, _T("mozzarella"));
// Set the pizza's topping is veggies
T_Val_set(&pAPizza, &pTopping, _T("veggies"));
// Create order 2
int* pOrder2 = T_create();
T_relate(&pOrder2, rCls, &pOrder);
T_Name_set(&pOrder2, _T("order 2"));
// Create a pizza
pAPizza = T_create(); T_relate(&pAPizza, rCls, &pPizza);
// Relate the pizza is part of order 2
T_relate(&pAPizza, rAsm, &pOrder2);
// Set the pizza's size is large
T_Val_set(&pAPizza, &pSize, _T("large"));
// Set the pizza's crust is thick
T_Val_set(&pAPizza, &pCrust, _T("thick"));
// Set the pizza's cheese is mozzarella
T_Val_set(&pAPizza, &pCheese, _T("mozzarella"));
// Set the pizza's cheese is mozzarella
T_Val_set(&pAPizza, &pCheese, _T("parmesan"));
// Set the pizza's topping is sausage
T_Val_set(&pAPizza, &pTopping, _T("sausage"));
// Set the pizza's topping is pepperoni
T_Val_set(&pAPizza, &pTopping, _T("pepperoni"));
// Set the pizza's topping is black olives
T_Val_set(&pAPizza, &pTopping, _T("black olives")); // Create a drink int* pADrink = T_create(); T_relate(&pADrink, rCls, &pDrink);
// Relate the drink is part of order 2
T_relate(&pADrink, rAsm, &pOrder2);
// Set the drink's drinkType is coke
T_Val_set(&pADrink, &pDrinkType, _T("coke"));
// Set the drink's qty is 4
T_Val_set(&pADrink, &pQty, _T("4"));
// Create a relational expression string to find order 1 TCHAR str[kNmSz_g+1] = _T("order (pizza thin veggies)");
// Prepare relational expression str
#define aSz 255
int* pExpr[aSz+1] = {NULL};
if (Q_Str_parse_r(str, pExpr, aSz)) {return;}
if (Q_SymStr_parse_r(pExpr)) {return;}
// Loop thru things satisfying expression while (int* pT=X(pExpr)){
TCHAR sOrder[kNmSz_g+1] = _T(""); T_Name_get(pT, sOrder, kNmSz_g); TRACE(_T("%s\n"), sOrder);
}
} Received on Fri Apr 16 2004 - 06:16:43 CEST