diff soap.cpp @ 314:b671a46873c2

working SIIGRAPH08 version. Fixed powerTable mmap memory leak in WS calls (only showed up in big databases). Implements radius queries over WS with new wsdl file
author mas01mc
date Tue, 12 Aug 2008 01:21:44 +0000
parents f9dde18f556a
children 25572f1bd37f c93be2f3a674
line wrap: on
line diff
--- a/soap.cpp	Sat Aug 09 15:46:42 2008 +0000
+++ b/soap.cpp	Tue Aug 12 01:21:44 2008 +0000
@@ -54,23 +54,38 @@
 void audioDB::ws_query_by_key(const char*dbName, const char *trackKey, const char* hostport){
   struct soap soap;
   adb__queryResponse adbQueryResponse;  
-  adb__sequenceQueryParms asqp;
-  
-  asqp.keyList = (char*)trackFileName;
-  asqp.timesFileName = (char*)timesFileName;
-  asqp.queryPoint = queryPoint;
-  asqp.pointNN = pointNN;
-  asqp.trackNN = trackNN;
-  asqp.sequenceLength = sequenceLength;
-  asqp.radius = radius;
-  asqp.relative_threshold = relative_threshold;
-  asqp.absolute_threshold = absolute_threshold;
-  asqp.usingQueryPoint = usingQueryPoint;
-  asqp.lsh_exact = lsh_exact;
+  /*  JUST TRY TO USE A DATA STRUCTURE WITH PHP
+      adb__sequenceQueryParms asqp;
+      asqp.keyList = (char*)trackFileName;
+      asqp.timesFileName = (char*)timesFileName;
+      asqp.queryPoint = queryPoint;
+      asqp.pointNN = pointNN;
+      asqp.trackNN = trackNN;
+      asqp.sequenceLength = sequenceLength;
+      asqp.radius = radius;
+      asqp.relative_threshold = relative_threshold;
+      asqp.absolute_threshold = absolute_threshold;
+      asqp.usingQueryPoint = usingQueryPoint;
+      asqp.lsh_exact = lsh_exact;
+  */
 
   soap_init(&soap);  
   if(queryType==O2_SEQUENCE_QUERY || queryType==O2_N_SEQUENCE_QUERY){
-    if(soap_call_adb__sequenceQuery_by_key(&soap,hostport,NULL,(char*)dbName,(char*)trackKey,queryType,&asqp,adbQueryResponse)==SOAP_OK){
+    if(soap_call_adb__sequenceQueryByKey(&soap,hostport,NULL,
+					   (char*)dbName,
+					   (char*)trackKey,
+					   queryType,
+					   (char*)trackFileName,
+					   (char*)timesFileName,
+					   queryPoint,
+					   pointNN,
+					   trackNN,
+					   sequenceLength,
+					   radius,
+					   absolute_threshold,
+					   usingQueryPoint,
+					   lsh_exact,
+					 adbQueryResponse)==SOAP_OK){
       //std::std::cerr << "result list length:" << adbQueryResponse.result.__sizeRlist << std::std::endl;
       for(int i=0; i<adbQueryResponse.result.__sizeRlist; i++)
 	std::cout << adbQueryResponse.result.Rlist[i] << " " << adbQueryResponse.result.Dist[i] 
@@ -162,17 +177,25 @@
   }
 }
 
-// A sequence query using radius and a query key
-int adb__sequenceQuery_by_key(struct soap* soap, xsd__string dbName, xsd__string qKey, int qType,
-		       adb__sequenceQueryParms* parms,
-		       adb__queryResponse& adbQueryResponse) {
-
+int adb__sequenceQueryByKey(struct soap* soap,xsd__string dbName,
+			    xsd__string trackKey,
+			    xsd__int queryType,
+			    xsd__string trackFileName,
+			    xsd__string timesFileName,
+			    xsd__int queryPoint,
+			    xsd__int pointNN,
+			    xsd__int trackNN,
+			    xsd__int sequenceLength,
+			    xsd__double radius,
+			    xsd__double absolute_threshold,
+			    xsd__int usingQueryPoint,
+			    xsd__int lsh_exact,
+			    struct adb__queryResponse& adbQueryResponse){
   char radiusStr[256];
   char qPosStr[256];
   char pointNNStr[256];
   char trackNNStr[256];
   char seqLenStr[256];
-  char relative_thresholdStr[256];
   char absolute_thresholdStr[256];
   char qtypeStr[256];
 
@@ -183,19 +206,16 @@
 #define DOUBLESTRINGIFY(val, str) \
   snprintf(str, 256, "%f", val);
 
-  INTSTRINGIFY(parms->queryPoint, qPosStr);
-  INTSTRINGIFY(parms->pointNN, pointNNStr);
-  INTSTRINGIFY(parms->trackNN, trackNNStr);
-  INTSTRINGIFY(parms->sequenceLength, seqLenStr);
-
-  DOUBLESTRINGIFY(parms->relative_threshold, relative_thresholdStr);
-  DOUBLESTRINGIFY(parms->absolute_threshold, absolute_thresholdStr);
-  DOUBLESTRINGIFY(parms->radius, radiusStr);  
+  INTSTRINGIFY(queryPoint, qPosStr);
+  INTSTRINGIFY(pointNN, pointNNStr);
+  INTSTRINGIFY(trackNN, trackNNStr);
+  INTSTRINGIFY(sequenceLength, seqLenStr);
+  DOUBLESTRINGIFY(absolute_threshold, absolute_thresholdStr);
+  DOUBLESTRINGIFY(radius, radiusStr);
 
   // WS queries only support 1-nearest neighbour point reporting
   // at the moment, until we figure out how to better serve results
   snprintf(qtypeStr, 256, "nsequence");
-
   const char *argv[]={
     "./audioDB",
     COM_QUERY,
@@ -203,11 +223,11 @@
     COM_DATABASE,
     dbName, 
     COM_QUERYKEY,
-    ENSURE_STRING(qKey),
+    ENSURE_STRING(trackKey),
     COM_KEYLIST,
-    ENSURE_STRING(parms->keyList),
-    parms->usingQueryPoint?COM_QPOINT:COM_EXHAUSTIVE, 
-    parms->usingQueryPoint?qPosStr:"",
+    ENSURE_STRING(trackFileName),
+    usingQueryPoint?COM_QPOINT:COM_EXHAUSTIVE,
+    usingQueryPoint?qPosStr:"",
     COM_POINTNN,
     pointNNStr,
     COM_TRACKNN,
@@ -218,7 +238,7 @@
     seqLenStr,
     COM_ABSOLUTE_THRESH,
     absolute_thresholdStr,
-    parms->lsh_exact?COM_LSH_EXACT:""
+    lsh_exact?COM_LSH_EXACT:""
   };
 
   const unsigned argc = 22;