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_nodes::AddNode(int transaction_USCOREid, std::string node_USCOREname, std::string node_USCOREtype, ns1__AddNodeResponse& _param_18) 00017 { 00018 char *grphidstr=0; 00019 char *tridstr=0; 00020 tridstr=inttostr(transaction_USCOREid); 00021 grphidstr=settings::getGraphfromTransaction(tridstr); 00022 if(grphidstr&&tridstr){ 00023 string trfolder; 00024 00025 trfolder+="admin/"; 00026 trfolder+=grphidstr; 00027 trfolder+="/"; 00028 trfolder+=tridstr; 00029 string cmd; 00030 00031 00032 string edgfolder; 00033 edgfolder+=trfolder; 00034 edgfolder+="/edges"; 00035 00036 string nodefolder; 00037 nodefolder=trfolder; 00038 nodefolder+="/nodes"; 00039 00040 00041 string grfolder; 00042 grfolder+="admin/"; 00043 grfolder+=grphidstr; 00044 00045 00046 string realedges_folder; 00047 realedges_folder+=grfolder; 00048 realedges_folder+="/edges"; 00049 00050 string realnodes_folder; 00051 realnodes_folder+=grfolder; 00052 realnodes_folder+="/nodes"; 00053 00054 //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id"); 00055 hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id"); 00056 00057 //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges); 00058 tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes); 00059 00060 string types_folder; 00061 types_folder+=grfolder; 00062 types_folder+="/gr_types"; 00063 hash_table grt("gr_types", types_folder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id"); 00064 //tuk se pravi ne6to 00065 int permitted=0; 00066 settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4); 00067 if(permitted){ 00068 string vals; 00069 int curid=nodtwin.getMAXID(); 00070 vals+=inttostr(curid); 00071 vals+=";"; 00072 vals+=node_USCOREname; 00073 vals+=";"; 00074 char *grtypeid=0; 00075 grtypeid=grt.FindRecord("name", node_USCOREtype.c_str(), "id"); 00076 if(grtypeid){ 00077 vals+=grtypeid; 00078 nodtwin.AddRecord("id;name;type_id", vals.c_str()); 00079 _param_18.retvalue=0; 00080 delete grtypeid; 00081 }else{ 00082 _param_18.retvalue=3; 00083 } 00084 00085 00086 00087 00088 }else{ 00089 _param_18.retvalue=1; 00090 } 00091 return 0; 00092 } 00093 return 0; 00094 } 00095 int transaction_mode_commands_nodes::AddValueToNode(int transaction_USCOREid, string node_USCOREname, string path, string value, ns1__AddValueToNodeResponse& _param_19) 00096 { 00097 char *grphidstr=0; 00098 char *tridstr=0; 00099 tridstr=inttostr(transaction_USCOREid); 00100 grphidstr=settings::getGraphfromTransaction(tridstr); 00101 if(grphidstr&&tridstr){ 00102 string trfolder; 00103 00104 trfolder+="admin/"; 00105 trfolder+=grphidstr; 00106 trfolder+="/"; 00107 trfolder+=tridstr; 00108 string cmd; 00109 00110 00111 string edgfolder; 00112 edgfolder+=trfolder; 00113 edgfolder+="/edges"; 00114 00115 string nodefolder; 00116 nodefolder=trfolder; 00117 nodefolder+="/nodes"; 00118 00119 00120 string grfolder; 00121 grfolder+="admin/"; 00122 grfolder+=grphidstr; 00123 00124 00125 string realedges_folder; 00126 realedges_folder+=grfolder; 00127 realedges_folder+="/edges"; 00128 00129 string realnodes_folder; 00130 realnodes_folder+=grfolder; 00131 realnodes_folder+="/nodes"; 00132 00133 //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id"); 00134 hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id"); 00135 00136 //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges); 00137 tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes); 00138 00139 //tuk se pravi ne6to 00140 int permitted=0; 00141 settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4); 00142 if(permitted){ 00143 00144 char *foundnodedata=0; 00145 00146 foundnodedata=nodtwin.FindRecord("name", node_USCOREname.c_str(), "data"); 00147 if(foundnodedata){ 00148 00149 XMLNode x; 00150 x=XMLNode::parseString(foundnodedata); 00151 00152 if(settings::is_type_path_valid(path.c_str(), grphidstr)){ 00153 //tuka trqbva da se dobavi infoto 00154 00155 string parsestr; 00156 bool success=0; 00157 settings::getparsestr(grphidstr, path.c_str(), parsestr); 00158 if(!parsestr.compare("%d")){ 00159 if(settings::is_int(value.c_str())){ 00160 success=1; 00161 00162 } 00163 00164 }else if(!parsestr.compare("%f")){ 00165 if(settings::is_numeric(value.c_str())) 00166 success=1; 00167 00168 00169 00170 }else{ 00171 00172 success=1; 00173 } 00174 if(success){ 00176 x.getChildNodeByPath(path.c_str(), 1, "."); 00177 x.updateText(value.c_str()); 00178 char *updated_data=0; 00179 XMLNode x2; 00180 x2=XMLNode::createXMLTopNode("xml"); 00181 x2.addChild(x); 00182 updated_data=x2.getText(); 00183 00184 if(updated_data){ 00185 nodtwin.UpdateRecord("name", node_USCOREname.c_str(), "data", value.c_str()); 00186 _param_19.retvalue=0; 00187 }else{ 00188 _param_19.retvalue=3; 00189 } 00190 00191 }else{ 00192 00193 _param_19.retvalue=1; 00194 } 00195 00196 00197 00198 }else{ 00199 _param_19.retvalue=3; 00200 } 00201 00202 00203 00204 }else{ 00205 _param_19.retvalue=3; 00206 } 00207 00208 00209 }else{ 00210 _param_19.retvalue=3; 00211 } 00212 00213 00214 delete grphidstr; 00215 delete tridstr; 00216 }else{ 00217 _param_19.retvalue=3; 00218 } 00219 return 0; 00220 } 00221 int transaction_mode_commands_nodes::DeleteNode(int transaction_USCOREid, string node_USCOREname, ns1__DeleteNodeResponse& _param_20) 00222 { 00223 char *grphidstr=0; 00224 char *tridstr=0; 00225 tridstr=inttostr(transaction_USCOREid); 00226 grphidstr=settings::getGraphfromTransaction(tridstr); 00227 if(grphidstr&&tridstr){ 00228 string trfolder; 00229 00230 trfolder+="admin/"; 00231 trfolder+=grphidstr; 00232 trfolder+="/"; 00233 trfolder+=tridstr; 00234 string cmd; 00235 00236 00237 string edgfolder; 00238 edgfolder+=trfolder; 00239 edgfolder+="/edges"; 00240 00241 string nodefolder; 00242 nodefolder=trfolder; 00243 nodefolder+="/nodes"; 00244 00245 00246 string grfolder; 00247 grfolder+="admin/"; 00248 grfolder+=grphidstr; 00249 00250 00251 string realedges_folder; 00252 realedges_folder+=grfolder; 00253 realedges_folder+="/edges"; 00254 00255 string realnodes_folder; 00256 realnodes_folder+=grfolder; 00257 realnodes_folder+="/nodes"; 00258 00259 //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id"); 00260 hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id"); 00261 00262 //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges); 00263 tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes); 00264 00265 //tuk se pravi ne6to 00266 int permitted=0; 00267 settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x100, 0x10, 0x1); 00268 if(permitted){ 00269 00270 //iztrivane na vryzkite na edges kym tozi node 00271 hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id"); 00272 tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges); 00273 char *iedges=nodtwin.FindRecord("name", node_USCOREname.c_str(), "iedges"); 00274 char *nodeid=nodtwin.FindRecord("name", node_USCOREname.c_str(), "id"); 00275 if(iedges&&nodeid){ 00276 char **iedges_splitted; 00277 char *num=0; 00278 settings::split(iedges, &num, &iedges_splitted, ','); 00279 int i; 00280 for(i=0; i<num; i++){ 00281 char *onodes=edgtwin.FindRecord("id", iedges_splitted[i], "onodes"); 00282 if(onodes){ 00283 listi l(onodes, ','); 00284 l.removeelement(nodeid); 00285 edgtwin.UpdateRecord("id", iedges_splitted[i], "onodes", l.returnstring()); 00286 00287 00288 00289 } 00290 00291 00292 00293 00294 00295 } 00296 00297 00298 delete iedges; 00299 delete nodeid; 00300 if(iedges_splitted){ 00301 int j; 00302 for(j=0; j<num; j++) 00303 if(iedges_splitted[j]) 00304 delete iedges_splitted[j]; 00305 delete iedges_splitted; 00306 } 00307 } 00308 char *oedges=nodtwin.FindRecord("name", node_USCOREname.c_str(), "oedges"); 00309 if(oedges){ 00310 listi loedges(oedges, ','); 00311 int k; 00312 for(k=0; k<loedges.getnum(); k++){ 00313 char *buf=loedges.getith(k); 00314 char *inodes=edgtwin.FindRecord("id", buf, "inodes"); 00315 if(inodes){ 00316 listi linodes(inodes, ','); 00317 linodes.removeelement(nodeid); 00318 edgtwin.UpdateRecord("id", buf, "inodes", linodes.returnstring()); 00319 00320 } 00321 00322 00323 } 00324 delete oedges; 00325 00326 00327 } 00328 //iztrivane na samiya node 00329 nodtwin.DeleteRecord("name", node_USCOREname.c_str()); 00330 00331 00332 _param_20.retvalue=0; 00333 }else{ 00334 _param_20.retvalue=1; 00335 } 00336 return 0; 00337 } 00338 }