示例#1
0
int PNode_decrementSize(PNode *self)
{
	if (PNode_size(self)) 
	{
		return PNode_setSize_(self, PNode_size(self) - 1);
	}
	else
	{
		printf("PNode warning: attempt to decrement pnode size of zero at pid path: %s\n", Datum_data(self->pidPath));
	}
	
	return 0;
}
示例#2
0
int VertexServer_api_show(VertexServer *self)
{
	PNode *node = PDB_allocNode(self->pdb);
	if (VertexServer_api_setCursorPathOnNode_(self, node)) return 2;
	Datum_appendLong_(self->result, (long)PNode_size(node));
	return 0;
}
示例#3
0
int PNode_op_rm(PNode *self, Datum *d)
{
	PQuery *q = PNode_startQuery(self);
	Datum *k;
	long size = PNode_size(self);
	long removeCount = 0;
	
	if(!q) PNode_first(self);
	
	while (k = PQuery_key(q))
	{
		PDB_willWrite(self->pdb);
		if(!StoreCursor_remove(self->storeCursor)) break;
		
		// HACK to avoid skipping a step by backing up in the reverse enum direction before calling PQuery_enumerate
		if(PQuery_stepDirection(q) == 1)
		{
			StoreCursor_previous(self->storeCursor);
		}

		removeCount ++;
		//count += PNode_removeAt_(self, k);
		PQuery_enumerate(q);
	}

	PNode_setSize_(self, size - removeCount);
	
	
	yajl_gen_integer(self->yajl, removeCount);
	Datum_appendYajl_(d, self->yajl);
	//Datum_appendLong_(d, removeCount);
	return 0;  
}
示例#4
0
int PNode_op_sizes(PNode *self, Datum *d)
{	
	PNode *tmpNode = PDB_allocNode(self->pdb);
	Datum *k;
	PQuery *q = PNode_startQuery(self);
	
	yajl_gen_map_open(self->yajl);
	
	while (k = PQuery_key(q))
	{
		if(!Datum_beginsWithCString_(k, "_"))
		{			
			yajl_gen_datum(self->yajl, PNode_key(self));
		
			PNode_setPid_(tmpNode, PNode_value(self));
			yajl_gen_integer(self->yajl, PNode_size(tmpNode));
		}
		
		if (q) { PQuery_enumerate(q); } else { PNode_next(self); }
	}
	
	yajl_gen_map_close(self->yajl);
	Datum_appendYajl_(d, self->yajl);
	return 0;  
}
示例#5
0
long PNode_nodeSizeAtCursor(PNode *self)
{
	// carefull - this temporarilly hacks the sizePath
	long size;
	
	Datum *otherPid = PNode_value(self);
	Datum_copy_(self->sizePath, otherPid);
	Datum_appendCString_(self->sizePath, "/m/size");
	size = PNode_size(self);
	PNode_setPathsFromPid(self);
	
	return size;
}
示例#6
0
int PNode_incrementSize(PNode *self)
{
	long n = PNode_size(self) + 1;
	return PNode_setSize_(self, n);
}
示例#7
0
int VertexServer_api_amchart(VertexServer *self)
{
	Datum *slot1  = HttpRequest_queryValue_(self->httpRequest, "slot1");
	//Datum *slot2  = HttpRequest_queryValue_(self->httpRequest, "slot2");
	//Datum *slot3  = HttpRequest_queryValue_(self->httpRequest, "slot3");
	Datum *subpath  = HttpRequest_queryValue_(self->httpRequest, "subpath");
	PNode *node = PDB_allocNode(self->pdb);
	PQuery *q = PNode_query(node);
	VertexServer_setupPQuery_(self, q);
	PNode *tmpNode = PDB_allocNode(self->pdb);
	Datum *d = self->result;
	Datum *title = 0x0;
	//int isFirst = 1;
	
	if (PNode_moveToPathIfExists_(node, HttpRequest_uriPath(self->httpRequest)) != 0) 
	{
		VertexServer_setErrorCString_(self, "path does not exist: ");
		VertexServer_appendError_(self, HttpRequest_uriPath(self->httpRequest));
		return -1;
	}
	
	Datum_appendCString_(d, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
	Datum_appendCString_(d, "<chart approx_count=\"");
	
	// series -----------------
	if(Datum_size(subpath)) PNode_moveToPathIfExists_(node, subpath);
	Datum_appendLong_(d, PNode_size(node));
	Datum_appendCString_(d, "\">\n");
	PNode_startQuery(node);
	PNode_amSeries(node, d);
	PNode_moveToPathIfExists_(node, HttpRequest_uriPath(self->httpRequest));
	// series -----------------
	
	Datum_appendCString_(d, "<graphs>\n");
	PNode_first(node);

	if(Datum_size(subpath)) 
	{
		Datum *k;
		
		while(k = PNode_key(node))
		{
			Datum *title = Datum_poolNew();
			PNode_setPid_(tmpNode, PNode_value(node));
			PNode_moveToSubpathIfExists_(tmpNode, subpath);
			Datum_encodeUri(k);
			
			Datum_copy_(title, k);
			//Datum_appendCString_(title, "-");
			//Datum_append_(title, slot1);
			
			PNode_amGraphKey_(tmpNode, title, slot1, d);
			//printf("graph: %s\n", Datum_data(k));
			PNode_next(node);
		}
			
	}
	else if(Datum_size(slot1))
	{
		char slotKey[64];
		int slotNumber = 1;
		
		for (;;)
		{
			sprintf(slotKey, "slot%i", slotNumber);
		
			Datum *slotName  = HttpRequest_queryValue_(self->httpRequest, slotKey);
			if(Datum_size(slotName) == 0) break;
			PNode_amGraphKey_(node, title, slotName, d);
			slotNumber ++;
			
		}
	}

	
	Datum_appendCString_(d, "</graphs>\n");
	Datum_appendCString_(d, "</chart>\n");

	HttpResponse_setContentType_(self->httpResponse, "text/xml");
	//HttpResponse_setContentType_(self->httpResponse, "text/xml; charset=utf-8");
	return 0;
}