changeset 351:af3bc78e0f77 serializedQuery

completed serialized shingle query, with some initial testing using QueryADB.py -v
author mas01mc
date Thu, 06 Nov 2008 16:07:57 +0000
parents 8ff9d4d83222
children a22b18005853
files QueryADB.py soap.cpp
diffstat 2 files changed, 25 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/QueryADB.py	Thu Nov 06 08:54:40 2008 +0000
+++ b/QueryADB.py	Thu Nov 06 16:07:57 2008 +0000
@@ -96,7 +96,8 @@
   <adb:shingleQuery>
    <dbName>%s</dbName>
    <qVector>
-          %s
+      %s
+   <dim>%s</dim>
    </qVector>
    <queryType>32</queryType>
    <pointNN>%s</pointNN>
@@ -163,13 +164,14 @@
 def RunShingleQuery():
 	global debug, dbName
 	queryVector='<Qvector>1.0</Qvector><Qvector>0.5</Qvector><Qvector>0.25</Qvector>'
+	featureDim = '3'
 	pointNN = '10'
 	trackNN = '5'
 	queryRadius = '0.5'
 	absoluteThreshold = '-4.5'
 	lshExact = '0'
 	message = SHINGLE_QUERY_TEMPLATE
-	message = SHINGLE_QUERY_TEMPLATE%(dbName, queryVector, pointNN, trackNN, queryRadius, absoluteThreshold, lshExact);
+	message = SHINGLE_QUERY_TEMPLATE%(dbName, queryVector, featureDim, pointNN, trackNN, queryRadius, absoluteThreshold, lshExact);
 	# print message
 	print message
 	response = SendXMLCommand(message)
--- a/soap.cpp	Thu Nov 06 08:54:40 2008 +0000
+++ b/soap.cpp	Thu Nov 06 16:07:57 2008 +0000
@@ -364,83 +364,41 @@
   cout << "qvector[" << qVector.dim << " x " << qVector.__sizeQvector/qVector.dim << "]: ";
   for(int k=0; k < qVector.__sizeQvector ; k++)
     cout << qVector.Qvector[k] << " ";
+  cout << endl;
   cout.flush();
 
   // open a tmp file on the server, write shingle, query as a file with query point 0
   // and shingle length l/dim
-  char tmpFileName[] = "adbXXXXXX";
-  int fid = mkstemp(tmpFileName);
-  if(fid==-1){
-    cerr << "Cannot open tmpfile on server";
-    return SOAP_FAULT;
-  }
-  
-  FILE* tmpFile = fdopen(fid, "r+b");
-
-  if(fwrite(&qVector.dim, 1, sizeof(int), tmpFile)!=1){
-    cerr << "error writing tmp file dim";
+  char tmpFileName[] = "/tmp/adb_XXXXXX";
+  int tmpFid = mkstemp(tmpFileName);
+  if(tmpFid==-1){
+    cerr << "Cannot make tmpfile <" << tmpFileName << "> on server" << endl;
     return SOAP_FAULT;
   }
 
-  if(fwrite(qVector.Qvector, qVector.__sizeQvector,sizeof(double), tmpFile)!=(size_t)qVector.__sizeQvector){
-    cerr << "error writing tmp file doubles";
+ FILE* tmpFile = fdopen(tmpFid, "wb");
+  if(!tmpFile){
+    cerr << "error opening <" << tmpFileName << "> for write" << endl;
+    return SOAP_FAULT;
+  }
+
+  if(fwrite(&qVector.dim, sizeof(int), 1, tmpFile)!=1){
+    cerr << "error writing tmp file dim <"<< tmpFileName << ">" << endl;
+    return SOAP_FAULT;
+  }
+
+  if(fwrite(qVector.Qvector, sizeof(double), qVector.__sizeQvector, tmpFile)!=(size_t)qVector.__sizeQvector){
+    cerr << "error writing tmp file doubles <" << tmpFileName << ">" << endl;
     return SOAP_FAULT;
   }
     
-  // Call adb query with tmpQueryFile name as a the query file parameter
-  char qtypeStr[256];
-
-  fprintf(stderr, "Calling %s query on database %s with %s=%s\n", "FILENAME", dbName, "FILENAME",tmpFileName);
-
   // fix up sequenceLength if it isn't provided, we know what the caller wants by the size of the shingle
   // and the feature dimensionality
   if(!sequenceLength)
     sequenceLength = qVector.__sizeQvector/qVector.dim;
-
-  INTSTRINGIFY(0, qPosStr); // query position is 0
-  INTSTRINGIFY(pointNN, pointNNStr);
-  INTSTRINGIFY(trackNN, trackNNStr);
-  INTSTRINGIFY(sequenceLength, seqLenStr);
-  DOUBLESTRINGIFY(absolute_threshold, absolute_thresholdStr);
-  DOUBLESTRINGIFY(radius, radiusStr);
-
-  snprintf(qtypeStr, 256, "nsequence");
-  const char *argv[]={
-    "./audioDB",
-    COM_QUERY,
-    qtypeStr,
-    COM_DATABASE,
-    dbName, 
-    COM_FEATURES,
-    ENSURE_STRING(tmpFileName),
-    COM_KEYLIST,
-    ENSURE_STRING(""),
-    COM_QPOINT,
-    qPosStr,
-    COM_POINTNN,
-    pointNNStr,
-    COM_TRACKNN,
-    trackNNStr,
-    COM_RADIUS,
-    radiusStr,
-    COM_SEQLEN,
-    seqLenStr,
-    COM_ABSOLUTE_THRESH,
-    absolute_thresholdStr,
-    lsh_exact?COM_LSH_EXACT:""
-  };
-
-  const unsigned argc = 22;
- 
-  try {
-    audioDB(argc, (char* const*)argv, &adbQueryResponse);
-    fclose(tmpFile);
-    return SOAP_OK;
-  } catch (char *err) {
-    soap_receiver_fault(soap, err, "");
-    fclose(tmpFile);
-    return SOAP_FAULT;
-  }  
+  int retVal = adb__sequenceQueryByKey(soap, dbName, "", tmpFileName, queryType,"","",0,pointNN,trackNN,sequenceLength,radius,absolute_threshold,1,lsh_exact,adbQueryResponse);
+  fclose(tmpFile);
+  return retVal;
 }
 
 /* Server loop */