Exemplo n.º 1
0
int PNode_moveToPath_createIfAbsent_(PNode *self, Datum *p, int createIfAbsent, int fromRoot)
{
	int r;
	Datum *cp = Datum_poolNew();
	Datum *np = Datum_poolNew();
	
	Datum_copy_(cp, p);
	if (fromRoot) PNode_setToRoot(self);
	
	do	
	{
		r = Datum_sepOnChars_with_(cp, "/", np);
		
		if (!Datum_isEmpty(cp)) 
		{
			if (createIfAbsent)
			{
				PNode_createMoveToKey_(self, cp);
			}
			else
			{
				if (PNode_moveToKey_(self, cp)) 
				{
					return -1;
				}
			}
		}

			
		Datum_copy_(cp, np);
	} while(r != -1);
	
	return 0;
}
Exemplo n.º 2
0
int VertexServer_api_transaction(VertexServer *self)
{
	Datum *uri = Datum_new();
	Datum *post = Datum_new();
	int error = 0;
	int r, result;
	
	PDB_commit(self->pdb);
	
	Datum_copy_(post, HttpRequest_postData(self->httpRequest));
	
	do
	{
		Datum_copy_(uri, post);
		r = Datum_sepOnChars_with_(uri, "\n", post);

		if (Datum_size(uri) == 0) 
		{
			VertexServer_setErrorCString_(self, "empty line in transaction");
			error = 1;
			break;
		}
		
		HttpRequest_parseUri_(self->httpRequest, Datum_data(uri));
		error = VertexServer_process(self);
		Pool_globalPoolFreeRefs();
	} while ((r != -1) && (!error));
	
	if (error)
	{
		PDB_abort(self->pdb);
		result = -1;
	}
	else
	{
		PDB_commit(self->pdb);
		result = 0;
	}
		
	Datum_free(uri);
	return result;
}