GDBMS 1.0
GDBMS_for_documentation/transaction_mode_commands_types.cpp
Go to the documentation of this file.
00001 #include "maininclude.h"
00002 #include "listi.h"
00003 #include "settings.h"
00004 #include "hash_table.h"
00005 #include "tr_twin_ht.h"
00006 #include "file_semaphore.h"
00007 #include "some_functions.h"
00008 #include "initial_mode_commands.h"
00009 #include "session_mode_commands.h"
00010 #include "transaction_mode_commands.h"
00011 #include "transaction_mode_commands_types.h"
00012 #include "transaction_mode_commands_nodes.h"
00013 #include "transaction_mode_commands_edges.h"
00014 #include "transaction_mode_commands_find.h"
00015 using namespace std;
00016 int transaction_mode_commands_types::AddMemberToType(int transaction_USCOREid, std::string type_USCOREname, std::string member_USCOREname, int member_USCOREtype, int size, ns1__AddMemberToTypeResponse& _param_16)
00017 {
00018   int permitted=0;
00019   settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4);
00020   //tuka se pravi kakvoto trqbva
00021 define_amtp_do_it:
00022   if(permitted){
00023     string grfolder;
00024     char *buf=0;
00025     buf=settings::getGraphfromTransaction(inttostr(transaction_USCOREid));
00026     if(buf){
00027       grfolder+="admin/";
00028       grfolder+=buf;
00029       grfolder+="/gr_types";
00030       hash_table grt("gr_types", grfolder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00031       string ssemstr;
00032       ssemstr+=grfolder;
00033       ssemstr+="/ssem";
00034       file_semaphore ssem(ssemstr.c_str());
00035       ssem.getResource();
00036       char *buf0=0;
00037       buf0=grt.FindRecord("name", type_USCOREname.c_str(), "composite");
00038       
00039       if(buf0){
00040         if(!strcmp(buf0, "1")){
00041           char *buf1=0;
00042           buf1=grt.FindRecord("name", type_USCOREname.c_str(), "internal");
00043           
00044           if(buf1){
00045            XMLNode x1, x2;
00046            x1=XMLNode::parseString(buf1);
00047            x2=x1.addChild("tpi");
00048            char *buf2=0;
00049            buf2=grt.FindRecord("id", inttostr(member_USCOREtype), "id");
00050            if(buf2){
00051              x2.addAttribute("id", buf2);
00052              string fname(inttostr(rand()%20000));
00053              fname+=".xml";
00054              string fn1;
00055              fn1=MAINFOLDER;
00056              fn1+=fname;
00057              x1.writeToFile(fn1.c_str());
00058              char *filebuf=new char[20000];
00059              int i;
00060              for(i=0; i<20000; i++)
00061                filebuf[i]=0;
00062              FILE *fp=fopen(fn1.c_str(), "r");
00063              int sizet=0;
00064              while((sizet=fread(filebuf, 20000, 1, fp))>0){
00065                if(sizet<20000)
00066                  break;
00067              }
00068              grt.UpdateRecord("name", type_USCOREname.c_str(), "internal", filebuf);
00069              
00070              if(fp)
00071                fclose(fp);
00072              //removing temp file
00073              string cmd;
00074              cmd+="rm -f ";
00075              cmd+=fn1;
00076              system(cmd);
00077              
00078              if(filebuf)
00079                delete filebuf;
00080              delete buf2;
00081              
00082            }else{
00083              _param_16.retvalue=3;
00084            }
00085            delete buf1; 
00086           }
00087           
00088         }else{
00089           _param_16.retvalue=3;
00090           
00091         }
00092         
00093         delete buf0;
00094       }
00095       
00096       ssem.freeResource();
00097      //_param_16.retvalue=0;
00098      
00099      delete buf; 
00100     }else{
00101       
00102       _param_16.retvalue=3;
00103     }
00104     
00105     
00106     
00107     //goto define_tp_free;
00108     return 0;
00109   }else{
00110     _param_16.retvalue=3;
00111     return 0;
00112     
00113   }
00114   
00115 }
00116 int transaction_mode_commands_types::DefineType(int transaction_USCOREid, std::string type_USCOREname, ns1__DefineTypeResponse& _param_14)
00117 {
00118     int permitted=0;
00119   settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4);
00120   //tuka se pravi kakvoto trqbva
00121 define_tp_do_it:
00122   if(permitted){
00123     string grfolder;
00124     char *buf=0;
00125     buf=settings::getGraphfromTransaction(inttostr(transaction_USCOREid));
00126     if(buf){
00127       grfolder+="admin/";
00128       grfolder+=buf;
00129       grfolder+="/gr_types";
00130       hash_table grt("gr_types", grfolder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00131       string ssemstr;
00132       ssemstr+=grfolder;
00133       ssemstr+="/ssem";
00134       file_semaphore ssem(ssemstr.c_str());
00135       ssem.getResource();
00136       int nid=grt.getMAXID();
00137       string vals;
00138       vals+=inttostr(nid);
00139       vals+=";";
00140       char *arg1=new char[500];
00141       char *arg2 = new char[500];
00142       int i;
00143       for(i=0; i<500; i++){
00144         arg1[i]=0;
00145         arg2[i]=0;
00146         
00147       }
00148       if(sscanf(type_USCOREname.c_str(), "@%s=array(%s) with size(%d);", arg1, arg2, &i)==2){
00149         //imame tip masiv
00150         //"id;name;composite;array;asize;aid"
00151         
00152         vals+=arg1;
00153         vals+=";";
00154         vals+="2;1;";
00155         vals+=inttostr(i);
00156         vals+=";";
00157         char *buf0=0;
00158         buf0=grt.FindRecord("name", arg2, "id");
00159         if(buf0){
00160           vals+=buf0;
00161           grt.AddRecord("id;name;composite;array;asize;aid", vals.c_str());
00162           _param_14.retvalue=0;
00163         }else{
00164           _param_14.retvalue=3;
00165         }
00166         
00167         
00168       }else if(sscanf(type_USCOREname.c_str(), "@%s=struct();", arg1)==1){
00169         //imame tip structura
00170         //"id;name;composite;array;asize;aid;internal"
00171         vals+=arg1;
00172         vals+=";1;0;0;0;<tp> </tp>";
00173         grt.AddRecord("id;name;composite;array;asize;aid;internal", vals.c_str());
00174         _param_14.retvalue=0;
00175         
00176         
00177         
00178         
00179         
00180       }else if(sscanf(type_USCOREname.c_str(), "@%s=simple(%s);", arg1, arg2)==2){
00181         //imame prost tip
00182         //"id;name;parsestr;composite"
00183         vals+=arg1;
00184         vals+=";";
00185         vals+=arg2;
00186         vals+=";";
00187         vals+="0";
00188         grt.AddRecord("id;name;parsestr;composite", vals.c_str() );
00189         
00190       }else{
00191         //nqmame syvpadenie na 6ablon
00192         _param_14.retvalue=3;
00193       }
00194       
00195       
00196       
00197       ssem.freeResource();
00198      
00199      delete buf; 
00200     }else{
00201       
00202       _param_14.retvalue=3;
00203     }
00204     
00205     
00206     
00207     //goto define_tp_free;
00208     return 0;
00209   }else{
00210     _param_14.retvalue=3;
00211     return 0;
00212     
00213   }
00214   
00215    
00216 }
00217 int transaction_mode_commands_types::DeleteType(int transaction_USCOREid, std::string type_USCOREname, ns1__DeleteTypeResponse& _param_15)
00218 {
00219   int permitted=0;
00220   settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x100, 0x10, 0x1);
00221   //tuka se pravi kakvoto trqbva
00222 
00223   if(permitted){
00224     string grfolder;
00225     char *buf=0;
00226     buf=settings::getGraphfromTransaction(inttostr(transaction_USCOREid));
00227     if(buf){
00228       grfolder+="admin/";
00229       grfolder+=buf;
00230       grfolder+="/gr_types";
00231       hash_table grt("gr_types", grfolder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00232       string ssemstr;
00233       ssemstr+=grfolder;
00234       ssemstr+="/ssem";
00235       file_semaphore ssem(ssemstr.c_str());
00236       ssem.getResource();
00237       
00238       char *buf1=0;
00239       buf1=grt.FindRecord("name", type_USCOREname.c_str(), "id");
00240       if(buf1)
00241       {
00242         grt.DeleteRecord("id", buf1);
00243         _param_15.retvalue=0;
00244         delete buf1;
00245       }else{
00246         
00247         _param_15.retvalue=3;
00248       }
00249       
00250       
00251       ssem.freeResource();
00252      
00253      delete buf; 
00254     }else{
00255       
00256       _param_15.retvalue=3;
00257     }
00258     
00259     
00260     
00261     //goto define_tp_free;
00262     return 0;
00263   }else{
00264     _param_15.retvalue=3;
00265     
00266     return 0;
00267     
00268   }
00269 }
00270 int transaction_mode_commands_types::GetTypeId(int transaction_USCOREid, std::string type_USCOREname, ns1__GetTypeIdResponse& _param_17)
00271 {
00272   int permitted=0;
00273   settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x800, 0x80, 0x8);
00274   //tuka se pravi kakvoto trqbva
00275 
00276   if(permitted){
00277     string grfolder;
00278     char *buf=0;
00279     buf=settings::getGraphfromTransaction(inttostr(transaction_USCOREid));
00280     if(buf){
00281       grfolder+="admin/";
00282       grfolder+=buf;
00283       grfolder+="/gr_types";
00284       hash_table grt("gr_types", grfolder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00285       string ssemstr;
00286       ssemstr+=grfolder;
00287       ssemstr+="/ssem";
00288       file_semaphore ssem(ssemstr.c_str());
00289       ssem.getResource();
00290       char *buf3=0;
00291       
00292       buf3=grt.FindRecord("name", type_USCOREname.c_str(), "id");
00293       if(buf3){
00294         _param_17.type_USCOREid=strtoint(buf3);
00295         delete buf3;
00296       }else{
00297         _param_17.type_USCOREid=0;
00298       }
00299       
00300       
00301       
00302       ssem.freeResource();
00303      
00304      delete buf; 
00305     }else{
00306       
00307      _param_17.type_USCOREid=0;
00308     }
00309     
00310     
00311     
00312     //goto define_tp_free;
00313     return 0;
00314   }else{
00315     _param_17.type_USCOREid=0;
00316     
00317     return 0;
00318     
00319   }
00320 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines