GDBMS 1.0
|
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 }