00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __MSD_METADATA_H__
00012 #include "msd_metadata.h"
00013 #endif
00014
00015 struct TableArray datawarehouse={
00016 {{"ALT", 0, "WHOUSE1", "Something"},
00017 {"ASSEMBLY", 1, "WHOUSE1", "Something"},
00018 {"ASSEMBLY_MODEL", 2, "WHOUSE1", "Something"},
00019 {"ATOM", 3, "WHOUSE1", "Something"},
00020 {"ATOM_DATA", 4, "WHOUSE1", "Something"},
00021 {"AUTHOR", 5, "WHOUSE1", "Something"},
00022 {"BULGE", 6, "WHOUSE1", "Something"},
00023 {"CHAIN", 7, "WHOUSE1", "Something"},
00024 {"CHEM_ATOM", 8, "WHOUSE1", "Something"},
00025 {"CHEM_COMP", 9, "WHOUSE1", "Something"},
00026 {"COMP_OCCURENCES", 10, "WHOUSE1", "Something"},
00027 {"EC_MAPPING", 11, "WHOUSE1", "Something"},
00028 {"ENTRY", 12, "WHOUSE1", "Something"},
00029 {"ETAXI", 13, "WHOUSE1", "Something"},
00030 {"ETAXI_SYNONYMS", 14, "WHOUSE1", "Something"},
00031 {"GO_INT_MAPPING", 15, "WHOUSE1", "Something"},
00032 {"HAIRPIN", 16, "WHOUSE1", "Something"},
00033 {"HELIX", 17, "WHOUSE1", "Something"},
00034 {"HELIX_HELIX", 18, "WHOUSE1", "Something"},
00035 {"KEYWORD", 19, "WHOUSE1", "Something"},
00036 {"MATRIX", 20, "WHOUSE1", "Something"},
00037 {"MODEL", 21, "WHOUSE1", "Something"},
00038 {"MOLECULE", 22, "WHOUSE1", "Something"},
00039 {"MOLECULE_SOURCE", 23, "WHOUSE1", "Something"},
00040 {"MOTIF", 24, "WHOUSE1", "Something"},
00041 {"NCBI", 25, "WHOUSE1", "Something"},
00042 {"NCBI_SYNONYMS", 26, "WHOUSE1", "Something"},
00043 {"PFAM_INTERPRO_MAPPING", 27, "WHOUSE1", "Something"},
00044 {"PLAN_TABLE", 28, "WHOUSE1", "Something"},
00045 {"PUBMEDLIST", 29, "WHOUSE1", "Something"},
00046 {"PUBMEDSEARCH", 30, "WHOUSE1", "Something"},
00047 {"RESIDUE", 31, "WHOUSE1", "Something"},
00048 {"RESIDUE_DATA", 32, "WHOUSE1", "Something"},
00049 {"SCOP_MAPPING", 33, "WHOUSE1", "Something"},
00050 {"SHEET", 34, "WHOUSE1", "Something"},
00051 {"SHEET_HBOND", 35, "WHOUSE1", "Something"},
00052 {"SHEET_ORDER", 36, "WHOUSE1", "Something"},
00053 {"STRAND", 37, "WHOUSE1", "Something"},
00054 {"SWISS_PROT_MAPPING", 38, "WHOUSE1", "Something"},
00055 {"TURN", 39, "WHOUSE1", "Something"},
00056 {"XRAY_DATA", 40, "WHOUSE1", "Something"},
00057 {"XRAY_REFINEMENT", 41, "WHOUSE1", "Something"}}, 42};
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 void get_info(char* schema,struct TableArray * p2ta, char* liststr)
00072 { char tmp[5];
00073 strcpy(tmp, "', '");
00074 sprintf(liststr,"('%s.%s", schema ,p2ta->ptr[0].name);
00075 for (int i = 1; i < p2ta->size; i++) {
00076 sprintf(liststr, "%s%s%s.%s",liststr,tmp,schema,p2ta->ptr[i].name);
00077 }
00078 sprintf(liststr, "%s')",liststr);
00079 }
00080
00081
00082
00083 int WriteTableAttributes(char* schema, char* connstr, char* fname){
00084 char stm[256];
00085 char type[16];
00086 char tname[32];
00087 char sname[32];
00088 char size[5];
00089 char comment_header[2048];
00090 char const_deconst[64];
00091 if (fileexists(fname))
00092 {cout << "A file with name: " << fname << " already exists." << endl;
00093 exit(1);
00094 }
00095 FILE * pfile;
00096 pfile = fopen (fname,"at");
00097 if (pfile==NULL)
00098 {
00099 cout << "error: could not open " << fname << endl;
00100 exit(1);
00101 }
00102 sprintf(comment_header,
00103 "/*-------------------------------------------------\n"
00104 " * dbstruct.h \n"
00105 " * \n"
00106 " * Project: DATA Structures for PDBe API Framework \n"
00107 " * \n"
00108 " * This file has been generated automatcally by \n"
00109 " * WriteTableAttributes method of API Generator in \n"
00110 " * Meta Data layer. \n"
00111 " * \n"
00112 " * Data Layer \n"
00113 " * Date created: %s"
00114 " * (C) Siamak Sobhany \n"
00115 " *-------------------------------------------------*/\n\n"
00116 "#ifndef __DBSTRUCT_H__\n"
00117 "#define __DBSTRUCT_H__\n\n"
00118 "#ifndef __MSD_DEFS_H__\n"
00119 "#include \"msd_defs.h\"\n"
00120 "#endif\n\n", getDateTime());
00121
00122
00123 fputs (comment_header,pfile);
00124
00125 msdbConnect db;
00126 msdbConnect::msdbInit();
00127 try{
00128 db.rlogon(connstr);
00129 msdbStream im (1, "select m.entity_string, m.table_name from WHOUSE1.mtd_entity m, SYS.all_tables s "
00130 "where m.table_name = s.table_name and s.owner = 'WHOUSE1' ", db);
00131 while (!im.eof()){
00132 im >> sname >> tname;
00133 sprintf(stm,"select * from %s.%s where rownum < 1",schema,tname);
00134 msdbStream i(1, stm, db);
00135 otl_column_desc* desc;
00136 int desc_len;
00137 desc=i.describe_select(desc_len);
00138 lcase(tname);
00139 sprintf(stm, "struct msds_%s {\n", tname);
00140 fputs (stm,pfile);
00142
00144 for(int n=0;n<desc_len;++n){
00145 switch (desc[n].dbtype){
00146 case 1 : {sprintf(type, "char");} break;
00147 case 2 : {if (desc[n].scale == 129)
00148 sprintf(type, "float");
00149 else if (desc[n].scale==0)
00150 {if ((desc[n].prec<=10 && desc[n].prec !=0) || has_integer_name(desc[n].name) == 1)
00151 sprintf(type, "int");
00152 else
00153 sprintf(type, "float");}
00154 else
00155 sprintf(type, "int"); } break;
00156 case 3 : {sprintf(type, "float");} break;
00157 case 4 : {sprintf(type, "int");} break;
00158 case 5 : {sprintf(type, "unsigned int");} break;
00159 case 6 : {sprintf(type, "short");} break;
00160 case 7 : {sprintf(type, "long");} break;
00161 case 12 : {sprintf(type, "msdbDate");} break;
00162 case 96 : {sprintf(type, "char");} break;
00163 case 112 : {sprintf(type, "otl_long_string");} break;
00164 default: {sprintf(type, "unknown");}
00165 }
00167
00169 sprintf(stm," %s",type);
00170 fputs(stm,pfile);
00171
00172 for (int i=0;i<strlen(desc[n].name);i++){
00173 desc[n].name[i]=tolower(desc[n].name[i]);
00174 }
00175 if (desc[n].dbtype==1 || desc[n].dbtype==96){
00176 sprintf(size,"[%d]", desc[n].dbsize);
00177 sprintf(desc[n].name, strcat(desc[n].name,size));}
00178
00180
00181 sprintf(stm," %s;\n",desc[n].name);
00182 fputs(stm,pfile);
00183
00184
00185
00186 }
00187 fputs("};\n",pfile);
00188
00189 }
00190
00191 fputs("#endif\n\n",pfile);
00192 fclose (pfile);
00193 }
00194 catch(msdbException& p){
00195 cerr<<p.msg<<endl;
00196 cerr<<p.stm_text<<endl;
00197 cerr<<p.var_info<<endl;
00198 }
00199 db.logoff();
00200 return (0);
00201 }
00203
00204 int MSDMakeSetGetAPIFunctions(const char* AttName, const char* TypeName, char* strResult) {
00205 int len, index=0;
00206 char strTemp[3072];
00207 sprintf(strTemp, "void Set_%s (%s value) {\n"
00208 " %s = value;\n};\n"
00209 "%s Get_%s () const {return %s;};\n"
00210 , AttName, TypeName, AttName,TypeName, AttName, AttName);
00211 sprintf(strTemp,"%s void SetSt_%s (msdbStream& s) {\n"
00212 " s >> %s;};\n "
00213 "void GetSt_%s (msdbStream& s) {\n"
00214 " s << %s;};\n",strTemp, AttName, AttName,AttName,AttName);
00215 len = strlen(strTemp);
00216 for(int i = 0; i < len; i++)
00217 {
00218 strResult[index] = strTemp[i];
00219 index++;
00220 }
00221 strResult[index] = '\0';
00222 return 0;
00223 }
00225
00226
00227 int MSDAPIGenerator(char* schema, char* connstr, char* fname){
00228 char stm[3072];
00229 char instruct[3072];
00230 char selstm[3072];
00231 char type[16];
00232 char coltype[16];
00233 char tname[32];
00234 char colname[32];
00235 char sname[32];
00236 char size[5];
00237 int buf = 50;
00238 char const_deconst[64];
00239 FILE * pfile;
00240 pfile = fopen (fname,"at");
00241 if (pfile==NULL)
00242 {
00243 cout << "error: could not open " << fname << endl;
00244 exit(1);
00245 }
00246 msdbConnect db;
00247 msdbConnect::msdbInit();
00248 try{
00249 db.rlogon(connstr);
00250 msdbStream im (1, "select m.entity_string, m.table_name from WHOUSE1.mtd_entity m, SYS.all_tables s "
00251 "where m.table_name = s.table_name and s.owner = 'WHOUSE1' ", db);
00252 while (!im.eof()){
00253 im >> sname >> tname;
00254 sprintf(stm,"select * from %s.%s where rownum < 1 ",schema,tname);
00255 msdbStream i(1, stm, db);
00256 otl_column_desc* desc;
00257 int desc_len;
00258 desc=i.describe_select(desc_len);
00259 for(int n=0;n<desc_len;++n){
00260 sprintf(selstm, "const char* selstm = \"select * from %s where %s = :colvar < %s >", tname, coltype );
00261 sprintf(instruct, "try {\n msddbStream imsd ( %d, selstm, db);\n ", buf);
00262 fputs (stm,pfile);
00263 for (int i=0;i<strlen(desc[n].name);i++){
00264 desc[n].name[i]=tolower(desc[n].name[i]);
00265 }
00266 sprintf(stm," %s;\n",desc[n].name);
00267 fputs(stm,pfile);
00268 sprintf(stm,"select c.column_name from all_constraints p, all_cons_columns c "
00269 " where p.constraint_name = c.constraint_name and p.owner = c.owner and p.table_name = c.table_name "
00270 " and p.table_name = '%s' and p.owner = '%s' "
00271 " and p.constraint_type = 'P' ", tname, schema);
00272 }
00273 }
00274 fputs("};\n",pfile);
00275
00276
00277 fclose (pfile);
00278 }
00279 catch(msdbException& p){
00280 cerr<<p.msg<<endl;
00281 cerr<<p.stm_text<<endl;
00282 cerr<<p.var_info<<endl;
00283 }
00284 db.logoff();
00285 return (0);
00286 }
00288
00290 int SoapDataGenerator(char* schema, char* connstr, char* fname){
00291 char stm[256];
00292 char type[16];
00293 char tname[32];
00294 char sname[32];
00295 char size[5];
00296 char comment_header[2048];
00297 char const_deconst[64];
00298 if (fileexists(fname))
00299 {cout << "A file with name: " << fname << " already exists." << endl;
00300 exit(1);
00301 }
00302 FILE * pfile;
00303 pfile = fopen (fname,"at");
00304 if (pfile==NULL)
00305 {
00306 cout << "error: could not open " << fname << endl;
00307 exit(1);
00308 }
00309 sprintf(comment_header,
00310 "/*-------------------------------------------------\n"
00311 " * dbsoap.h \n"
00312 " * \n"
00313 " * Project: DATA Structures for PDBe API Framework \n"
00314 " * \n"
00315 " * This file has been generated automatcally by \n"
00316 " * SoapDataGenerator method of API Generator in \n"
00317 " * Meta Data layer. \n"
00318 " * \n"
00319 " * SOAP User Layer \n"
00320 " * Date created: %s"
00321 " * (C) Siamak Sobhany \n"
00322 " *-------------------------------------------------*/\n\n"
00323 "#ifndef __DBSOAP_H__\n"
00324 "#define __DBSOAP_H__\n\n", getDateTime());
00325
00326 fputs (comment_header,pfile);
00327
00328
00329
00330
00331 msdbConnect db;
00332 msdbConnect::msdbInit();
00333 try{
00334 db.rlogon(connstr);
00335 msdbStream im (1, "select m.entity_string, m.table_name from WHOUSE1.mtd_entity m, SYS.all_tables s "
00336 "where m.table_name = s.table_name and s.owner = 'WHOUSE1' ", db);
00337 while (!im.eof()){
00338 im >> sname >> tname;
00339 sprintf(stm,"select * from %s.%s where rownum < 1 ",schema,tname);
00340 msdbStream i(1, stm, db);
00341 otl_column_desc* desc;
00342 int desc_len;
00343 desc=i.describe_select(desc_len);
00344 sprintf(stm, "class ns__C%s {\n public : \n", sname);
00345 fputs (stm,pfile);
00347
00349 for(int n=0;n<desc_len;++n){
00350 switch (desc[n].dbtype){
00351 case 1 : {sprintf(type, "xsd__string");} break;
00352 case 2 : {if (desc[n].scale == 129)
00353 sprintf(type, "xsd__float");
00354 else if (desc[n].scale==0)
00355 {if ((desc[n].prec<=10 && desc[n].prec !=0) || has_integer_name(desc[n].name) == 1)
00356 sprintf(type, "xsd__int");
00357 else
00358 sprintf(type, "xsd__float");}
00359 else
00360 sprintf(type, "xsd__int"); } break;
00361 case 3 : {sprintf(type, "xsd__float");} break;
00362 case 4 : {sprintf(type, "xsd__int");} break;
00363 case 5 : {sprintf(type, "xsd__unsignedInt");} break;
00364 case 6 : {sprintf(type, "xsd__short");} break;
00365 case 7 : {sprintf(type, "xsd__long");} break;
00366 case 12 : {sprintf(type, "xsd__date");} break;
00367 case 96 : {sprintf(type, "xsd__string");} break;
00368 case 112 : {sprintf(type, "xsd__base64Binary");} break;
00369 default: {sprintf(type, "unknown");}
00370 }
00371
00372 sprintf(stm," %s",type);
00373 fputs(stm,pfile);
00374
00375 for (int i=0;i<strlen(desc[n].name);i++){
00376 desc[n].name[i]=tolower(desc[n].name[i]);
00377 }
00378
00379
00380 if (strcmp(desc[n].name,"primaryacc#")==0 )
00381 {desc[n].name[10]= '_';
00382 sprintf(stm," %s;\n",desc[n].name);
00383 }else{
00384 if (strcmp(desc[n].name,"template")==0 || strcmp(desc[n].name,"const")==0 )
00385 {
00386 sprintf(stm," %s_;\n",desc[n].name);
00387 }else{
00388 sprintf(stm," %s;\n",desc[n].name);
00389 }
00390 }
00391
00392 fputs(stm,pfile);
00393
00394
00395
00396 }
00397 sprintf(const_deconst, " ns__C%s(){};\n", sname);
00398 fputs(const_deconst,pfile);
00399 sprintf(const_deconst, " ~ns__C%s(){};\n", sname);
00400 fputs(const_deconst,pfile);
00401 fputs("};\n",pfile);
00402
00403
00404
00405
00406
00407 }
00408
00409 fputs("#endif\n\n",pfile);
00410 fclose (pfile);
00411 }
00412 catch(msdbException& p){
00413 cerr<<p.msg<<endl;
00414 cerr<<p.stm_text<<endl;
00415 cerr<<p.var_info<<endl;
00416 }
00417 db.logoff();
00418 return (0);
00419 }
00421 int MSDClassGenerator(char* schema, char* connstr, char* fname){
00422 char stm[256];
00423 char type[16];
00424 char tname[32];
00425 char sname[32];
00426 char size[5];
00427 char comment_header[2048];
00428 char const_deconst[64];
00429 if (fileexists(fname))
00430 {cout << "A file with name: " << fname << " already exists." << endl;
00431 exit(1);
00432 }
00433 FILE * pfile;
00434 pfile = fopen (fname,"at");
00435 if (pfile==NULL)
00436 {
00437 cout << "error: could not open " << fname << endl;
00438 exit(1);
00439 }
00440 sprintf(comment_header,
00441 "/*-------------------------------------------------\n"
00442 " * dbclass.h \n"
00443 " * \n"
00444 " * Project: DATA Classes for PDBe API Framework \n"
00445 " * \n"
00446 " * This file has been generated automatcally by \n"
00447 " * MSDClassGenerator method of API Generator in \n"
00448 " * Meta Data layer. \n"
00449 " * \n"
00450 " * Data Layer \n"
00451 " * Date created: %s"
00452 " * (C) Siamak Sobhany \n"
00453 " *-------------------------------------------------*/\n\n"
00454 "#ifndef __DBCLASS_H__\n"
00455 "#define __DBCLASS_H__\n\n", getDateTime());
00456
00457 fputs (comment_header,pfile);
00458
00459 msdbConnect db;
00460 msdbConnect::msdbInit();
00461 try{
00462 db.rlogon(connstr);
00463 msdbStream im (1, "select m.entity_string, m.table_name from WHOUSE1.mtd_entity m, SYS.all_tables s "
00464 "where m.table_name = s.table_name and s.owner = 'WHOUSE1' ", db);
00465 while (!im.eof()){
00466 im >> sname >> tname;
00467 sprintf(stm,"select * from %s.%s where rownum < 1 ",schema,tname);
00468 msdbStream i(1, stm, db);
00469 otl_column_desc* desc;
00470 int desc_len;
00471 desc=i.describe_select(desc_len);
00472 lcase(tname);
00473 sprintf(stm, "class %s {\n public : \n", tname);
00474 fputs (stm,pfile);
00475
00476 for(int n=0;n<desc_len;++n){
00477 switch (desc[n].dbtype){
00478 case 1 : {sprintf(type, "char");} break;
00479 case 2 : {if (desc[n].scale == 129)
00480 sprintf(type, "float");
00481 else if (desc[n].scale==0)
00482 {if ((desc[n].prec<=10 && desc[n].prec !=0) || has_integer_name(desc[n].name) == 1)
00483 sprintf(type, "int");
00484 else
00485 sprintf(type, "float");}
00486 else
00487 sprintf(type, "int"); } break;
00488 case 3 : {sprintf(type, "float");} break;
00489 case 4 : {sprintf(type, "int");} break;
00490 case 5 : {sprintf(type, "unsigned int");} break;
00491 case 6 : {sprintf(type, "short");} break;
00492 case 7 : {sprintf(type, "long");} break;
00493 case 12 : {sprintf(type, "msdbDate");} break;
00494 case 96 : {sprintf(type, "char");} break;
00495 case 112 : {sprintf(type, "otl_long_string");} break;
00496 default: {sprintf(type, "unknown");}
00497 }
00498
00499 sprintf(stm," %s",type);
00500 fputs(stm,pfile);
00501
00502 for (int i=0;i<strlen(desc[n].name);i++){
00503 desc[n].name[i]=tolower(desc[n].name[i]);
00504 }
00505 if (desc[n].dbtype==1 || desc[n].dbtype==96){
00506 sprintf(size,"[%d]", desc[n].dbsize);}else{
00507 sprintf(size,"%s","\0" );}
00508
00509 if (strcmp(desc[n].name,"primaryacc#")==0 )
00510 {desc[n].name[10]= '_';
00511 sprintf(stm," %s%s;\n",desc[n].name, size);
00512 }else{
00513 if (strcmp(desc[n].name,"template")==0 || strcmp(desc[n].name,"const")==0 )
00514 {
00515 sprintf(stm," %s_%s;\n",desc[n].name, size);
00516 }else{
00517 sprintf(stm," %s%s;\n",desc[n].name, size);
00518 }
00519 }
00520
00521 fputs(stm,pfile);
00522
00523 }
00524 sprintf(const_deconst, " %s(){};\n", sname);
00525 fputs(const_deconst,pfile);
00526 sprintf(const_deconst, " ~%s(){};\n", sname);
00527 fputs(const_deconst,pfile);
00528 fputs("};\n",pfile);
00529
00530
00531 }
00532
00533 fputs("#endif\n\n",pfile);
00534 fclose (pfile);
00535 }
00536 catch(msdbException& p){
00537 cerr<<p.msg<<endl;
00538 cerr<<p.stm_text<<endl;
00539 cerr<<p.var_info<<endl;
00540 }
00541 db.logoff();
00542 return (0);
00543 }
00545 int GetTablesRelations(char* schema,struct TableArray * p2ta, char* connstr){
00546
00547 char stm[4096];
00548 char lst[2048];
00549 int k,m;
00550
00551 get_info(schema, p2ta, lst);
00552 sprintf(stm, "select k.constraint_name, k.constraint_type, k.table_name, k.r_constraint_name, "
00553 "k.delete_rule, k.status, k.deferrable, k.deferred from sys.user_constraints k"
00554 " where table_name in %s and 2 <> 1*:f<int> and k.constraint_type like 'R'", lst);
00555 MSDDataSet result=MSDDataSet();
00556 msdbConnect db;
00557 try{
00558 msdbConnect::msdbInit();
00559 db.rlogon(connstr);
00560
00561
00562 new_exec_query(50, db, stm, result);
00563 }
00564 catch(msdbException& p){
00565 cerr<<p.msg<<endl;
00566 cerr<<p.stm_text<<endl;
00567 cerr<<p.var_info<<endl;
00568 }
00569 dolist(eachrow, result.getValue( msdSymbol(rowset), msdSymbol(rows))) {
00570 cout << "Row No.: " << result.getValue(eachrow, msdSymbol(rowno)) <<endl ;
00571
00572 k=1;
00573 dolist(eachcol, result.getValue( msdSymbol(colset), msdSymbol(cols))){
00574 cout << eachcol << ": " << result.getValue(eachrow, eachcol) << " ";
00575
00576 ++k;
00577 }
00578 cout << " End of row." << endl;
00579
00580 ++m;
00581 }
00582 db.logoff();
00583 return (0);
00584 }
00586 int GetDataModel(char* schema,TableArray * p2ta,char* connstr){
00587 char stm[4096];
00588 char lst[2048];
00589 int k,m;
00590 MSDDataSet result=MSDDataSet();
00591
00592 get_info(schema, p2ta, lst);
00593
00594
00595 sprintf(stm, "select p.table_name as pktable_name,f.owner as fktable_schem,f.table_name as fktable_name, "
00596 "decode (f.delete_rule, 'CASCADE', 'INTEGRITY', 'CASCADE DELETE') "
00597 "as delete_rule,f.constraint_name as fk_name,p.constraint_name as pk_name from all_constraints p,all_constraints f "
00598 "where p.table_name in %s and f.owner = 'WHOUSE1' and 2 <> 1*:f<int> and p.owner = f.owner "
00599 "and (p.constraint_type = 'P' or p.constraint_type = 'U') and f.constraint_type = 'R' "
00600 "and p.constraint_name = f.r_constraint_name order by fktable_schem, fktable_name" , lst);
00601
00602 msdbConnect db;
00603 try{
00604 msdbConnect::msdbInit();
00605 db.rlogon(connstr);
00606 new_exec_query(50, db, stm, result);
00607
00608 sprintf(stm, "select p.table_name as pktable_name,f.owner as fktable_schem,f.table_name as fktable_name, "
00609 "decode (f.delete_rule, 'CASCADE', 'INTEGRITY', 'CASCADE DELETE') "
00610 "as delete_rule,f.constraint_name as fk_name,p.constraint_name as pk_name from all_constraints p,all_constraints f "
00611 "where p.table_name in %s and f.owner = 'whouse1' and p.owner = f.owner "
00612 "and (p.constraint_type = 'P' or p.constraint_type = 'U') and f.constraint_type = 'R' "
00613 "and p.constraint_name = f.r_constraint_name order by fktable_schem, fktable_name" , lst);
00614 }
00615 catch(msdbException& p){
00616 cerr<<p.msg<<endl;
00617 cerr<<p.stm_text<<endl;
00618 cerr<<p.var_info<<endl;
00619 }
00620 dolist(eachrow, result.getValue( msdSymbol(rowset), msdSymbol(rows))) {
00621 cout << "Row No.: " << result.getValue(eachrow, msdSymbol(rowno)) <<endl ;
00622
00623 k=1;
00624 dolist(eachcol, result.getValue( msdSymbol(colset), msdSymbol(cols))){
00625 cout << eachcol << ": " << result.getValue(eachrow, eachcol) << " ";
00626
00627 ++k;
00628 }
00629 cout << " End of row." << endl;
00630
00631 ++m;
00632 }
00633 db.logoff();
00634 return (0);
00635 }
00636
00637
00638
00639 int LoadMetaData(char* schema,char* connstr){
00640 char stm[4096];
00641 char lst[2048];
00642 char tname[64];
00643 char tstr[64];
00644 char mname[64];
00645
00646
00647 char tblitem[64];
00648
00649 char tmp[5];
00650 char liststr[2048];
00651 char martitem[32];
00652 int k,m;
00653 stringstream martliststr;
00654
00655 let martlist = listEM( msdEnd);
00656
00657
00658 let tbllist = listEM( msdEnd);
00659 let martname;
00660 let tblname;
00661 sprintf(stm, "select metadata_string from %s.mtd_metadata", schema );
00662 strcpy(tmp, "', '");
00663 MSDDataSet mtd = MSDDataSet();
00664 sprintf(mtd.name,"%s","metadata");
00665 msdbConnect db;
00666 msdbConnect::msdbInit();
00667 try{
00668 db.rlogon(connstr);
00669 msdbStream im (1, stm, db);
00670
00671 martliststr << "(";
00672 while (!im.eof()){
00673 im >> mname;
00674 sprintf(martitem,"%s", mname);
00675 martname = intern( msdConst(martitem));
00676 martliststr << " ";
00677 martliststr << martitem;
00678
00679 mtd.addEntity(martname);
00680 mtd.setValue(martname, msdSymbol(name), msdConst(martitem));
00681
00682 sprintf(stm, "select entity_string, table_name from %s.mtd_entity where metadata_string = '%s'", schema, mname);
00683 msdbStream it (1,stm, db);
00684 it >> tstr >> tname;
00685 sprintf(tblitem,"%s", tname);
00686 tblname = intern( msdConst(tblitem));
00687 stringstream tblliststr;
00688 tblliststr << "(";
00689 tblliststr << " ";
00690 tblliststr << tblitem;
00691 mtd.addEntity(tblname);
00692 sprintf(liststr,"('%s", tname);
00693
00694 sprintf(stm, "select r.entity_string as entity, r.relation_name as relation, r.cardinality, r.relation_attributes as attribute , "
00695 "r.reverse_metadata_string as rmetadata, r.reverse_entity_string as rentity, e.containment_relation as containment from mtd_relation r, mtd_entity e where "
00696 "r.metadata_string = '%s' and r.entity_string = '%s' and r.metadata_string = e.metadata_string and "
00697 "r.entity_string = e.entity_string and :f<int> = 1*:f", martitem, tstr);
00698 msd_exec_query(50, db, stm, mtd, tblitem, "i", 1);
00699
00700 while (!it.eof()){
00701 it >> tstr >> tname;
00702 sprintf(tblitem,"%s", tname);
00703 tblname = intern( msdConst(tblitem));
00704 tblliststr << " ";
00705 tblliststr << tblitem;
00706 sprintf(liststr, "%s%s%s",liststr,tmp,tname);
00707
00708 sprintf(stm, "select r.entity_string as entity, r.relation_name as relation, r.cardinality, r.relation_attributes as attribute , "
00709 "r.reverse_metadata_string as rmetadata, r.reverse_entity_string as rentity, e.containment_relation as containment from mtd_relation r, mtd_entity e where "
00710 "r.metadata_string = '%s' and r.entity_string = '%s' and r.metadata_string = e.metadata_string and "
00711 "r.entity_string = e.entity_string and :f<int> = 1*:f", martitem, tstr);
00712 msd_exec_query(50, db, stm, mtd, tblitem, "i", 1);
00713 }
00714 tblliststr << ")";
00715 tbllist = read(tblliststr);
00716
00717 mtd.setValue(martname, msdSymbol(tables), tbllist);
00718
00719 sprintf(liststr, "%s')",liststr);
00720 sprintf(stm, "select p.table_name as pktable_name,f.owner as fktable_schem,f.table_name as fktable_name, "
00721 "decode (f.delete_rule, 'CASCADE', 'INTEGRITY', 'CASCADE DELETE') "
00722 "as delete_rule,f.constraint_name as fk_name,p.constraint_name as pk_name from all_constraints p,all_constraints f "
00723 "where p.table_name in %s and f.owner = '%s' and :f<int> = 1*:f and p.owner = f.owner "
00724 "and (p.constraint_type = 'P' or p.constraint_type = 'U') and f.constraint_type = 'R' "
00725 "and p.constraint_name = f.r_constraint_name order by fktable_schem, fktable_name" , liststr, schema);
00726
00727 }
00728 martliststr << ")";
00729 martlist = read(martliststr);
00730 mtd.addEntity( msdSymbol(warehouse));
00731 mtd.setValue( msdSymbol(warehouse), msdSymbol(marts), martlist);
00732 sprintf(stm, "select table_name from mtd_entity where containment_relation is not null and :f<int> = 1*:f ");
00733 sprintf(tblitem, "%s", "contains");
00734 msd_exec_query(50, db, stm, mtd, tblitem, "i", 1);
00735 }
00736 catch(msdbException& p){
00737 cerr<<p.msg<<endl;
00738 cerr<<p.stm_text<<endl;
00739 cerr<<p.var_info<<endl;
00740 }
00741 db.logoff();
00742
00743
00744 dolist(eachmart, mtd.getValue( msdSymbol(warehouse), msdSymbol(marts))) {
00745 cout << "Mart: " << mtd.getValue(eachmart, msdSymbol(name)) << endl ;
00746 cout << " Tables: " << endl << " " <<mtd.getValue(eachmart, msdSymbol(tables)) << endl;
00747 cout << " Relations: " << endl;
00748 dolist(eachtable, mtd.getValue(eachmart, msdSymbol(tables))) {
00749 dolist(eachrow, msd_make_rowlist(mtd.getValue(eachtable, msdSymbol(rows)))) {
00750 dolist(eachcol, mtd.getValue(eachtable, msdSymbol(cols))){
00751 if (eachcol == msdSymbol(ENTITY) || eachcol == msdSymbol(RELATION) || eachcol == msdSymbol(RENTITY) || eachcol == msdSymbol(CONTAINMENT))
00752 {
00753 cout << " " << mtd.getValue(eachrow, eachcol) << " ";
00754 }
00755 }
00756 cout << endl;
00757 }
00758 }
00759 }
00760
00761
00762 cout << "\nContainment Relations: " << endl;
00763
00764 dolist(eachrec, msd_make_rowlist(mtd.getValue( msdSymbol(contains), msdSymbol(rows)))) {
00765 dolist (eachcolrec,mtd.getValue( msdSymbol(contains), msdSymbol(cols))){
00766 let tbln = intern(mtd.getValue(eachrec, eachcolrec));
00767 dolist(each_row, msd_make_rowlist(mtd.getValue(tbln, msdSymbol(rows)))) {
00768 dolist(each_col, mtd.getValue(tbln, msdSymbol(cols))){
00769 if (each_col == msdSymbol(ENTITY) || each_col == msdSymbol(RELATION) || each_col == msdSymbol(RENTITY) || each_col == msdSymbol(CONTAINMENT))
00770 {
00771 cout << " " << mtd.getValue(each_row, each_col) << " ";
00772 }
00773 }
00774 cout << endl;
00775 }
00776 cout << endl;
00777 }
00778 }
00779
00780
00781
00782 gc(martname);
00783 gc(tblname);
00784 gc(martlist);
00785 gc(tbllist);
00786
00787 return (0);
00788 }
00789
00790
00791
00792
00793
00794
00795
00796 int MSDStructureModel(){
00797 MSDDataSet sm = MSDDataSet();
00798
00799 sm.addEntity( msdSymbol(protein-family));
00800 sm.setValue( msdSymbol(protein-family), msdSymbol(member-proteins), listEM( msdSymbol(1ah7), msdSymbol(1ahe), msdSymbol(1ahf), msdSymbol(1ahg), msdSymbol(1ahx), msdSymbol(1ahy), msdEnd));
00801
00802 sm.addEntity( msdSymbol(1ah7));
00803 sm.setValue( msdSymbol(1ah7), msdSymbol(name), msdConst("1ah7"));
00804 sm.setValue( msdSymbol(1ah7), msdSymbol(author), msdConst("henrick"));
00805 sm.setValue( msdSymbol(1ah7), msdSymbol(entry_id), msdConst(36926));
00806 sm.setValue( msdSymbol(1ah7), msdSymbol(group1), listEM( msdSymbol(1ahe), msdSymbol(1ahg), msdEnd));
00807
00808 sm.addEntity( msdSymbol(1ahe));
00809 sm.setValue( msdSymbol(1ahe), msdSymbol(name), msdConst("1ahe"));
00810 sm.setValue( msdSymbol(1ahe), msdSymbol(author), msdConst("henrick"));
00811 sm.setValue( msdSymbol(1ahe), msdSymbol(entry_id), msdConst(26679));
00812 sm.setValue( msdSymbol(1ahe), msdSymbol(group1), listEM( msdSymbol(1ah7), msdSymbol(1ahg), msdEnd));
00813
00814 sm.addEntity( msdSymbol(1ahf));
00815 sm.setValue( msdSymbol(1ahf), msdSymbol(name), msdConst("1ahf"));
00816 sm.setValue( msdSymbol(1ahf), msdSymbol(author), msdConst("henrick"));
00817 sm.setValue( msdSymbol(1ahf), msdSymbol(entry_id), msdConst(29738));
00818 sm.setValue( msdSymbol(1ahf), msdSymbol(group2), listEM( msdSymbol(1ahx), msdSymbol(1ahy), msdEnd));
00819
00820 cout << "--- Report on Protein Family ---" << endl;
00821
00822 dolist(protein, sm.getValue( msdSymbol(protein-family), msdSymbol(member-proteins))) {
00823 cout << "Protein: " << sm.getValue(protein, msdSymbol(name)) << endl
00824 << "Author: " << sm.getValue(protein, msdSymbol(author)) << endl;
00825 dolist(relation, listEM( msdSymbol(group1), msdSymbol(group2), msdSymbol(group3), msdEnd)) {
00826 let relatives = sm.getValue(protein, relation);
00827 if (relatives) {
00828 cout << "With " << relation << ": ";
00829 dolist(relative, relatives) cout << " " << relative;
00830 cout << endl;}}
00831 cout << endl;}
00832 return(0);
00833 }
00834
00835
00836
00837
00838
00839
00840
00841