Improved proxy; added query match for result set re-use.
[yazpp-moved-to-github.git] / src / yaz-z-query.cpp
index 3fbd3e6..c375ea6 100644 (file)
@@ -4,7 +4,18 @@
  * Sebastian Hammer, Adam Dickmeiss
  * 
  * $Log: yaz-z-query.cpp,v $
- * Revision 1.2  1999-04-09 11:46:57  adam
+ * Revision 1.5  1999-04-27 07:52:13  adam
+ * Improved proxy; added query match for result set re-use.
+ *
+ * Revision 1.4  1999/04/21 12:09:01  adam
+ * Many improvements. Modified to proxy server to work with "sessions"
+ * based on cookies.
+ *
+ * Revision 1.3  1999/04/20 10:30:05  adam
+ * Implemented various stuff for client and proxy. Updated calls
+ * to ODR to reflect new name parameter.
+ *
+ * Revision 1.2  1999/04/09 11:46:57  adam
  * Added object Yaz_Z_Assoc. Much more functional client.
  *
  * Revision 1.1  1999/03/23 14:17:57  adam
@@ -19,6 +30,7 @@ Yaz_Z_Query::Yaz_Z_Query()
 {
     odr_encode = odr_createmem (ODR_ENCODE);
     odr_decode = odr_createmem (ODR_DECODE);
+    odr_print = odr_createmem (ODR_PRINT);
 }
 
 int Yaz_Z_Query::set_rpn (const char *rpn)
@@ -30,8 +42,9 @@ int Yaz_Z_Query::set_rpn (const char *rpn)
     query->u.type_1 = p_query_rpn (odr_encode, PROTO_Z3950, rpn);
     if (!query->u.type_1)
        return -1;
-    if (!z_Query (odr_encode, &query, 0))
+    if (!z_Query (odr_encode, &query, 0, 0))
        return -1;
+    z_Query(odr_print, &query, 0, 0);
     buf = odr_getbuf (odr_encode, &len, 0);
     return len;
 }
@@ -40,7 +53,7 @@ void Yaz_Z_Query::set_Z_Query(Z_Query *z_query)
 {
     buf = 0;
     odr_reset (odr_encode);
-    if (!z_Query (odr_encode, &z_query, 0))
+    if (!z_Query (odr_encode, &z_query, 0, 0))
        return;
     buf = odr_getbuf (odr_encode, &len, 0);
 }
@@ -49,6 +62,7 @@ Yaz_Z_Query::~Yaz_Z_Query()
 {
     odr_destroy (odr_encode);
     odr_destroy (odr_decode);
+    odr_destroy (odr_print);
 }
 
 Z_Query *Yaz_Z_Query::get_Z_Query ()
@@ -57,7 +71,7 @@ Z_Query *Yaz_Z_Query::get_Z_Query ()
     if (!buf)
        return 0;
     odr_setbuf (odr_decode, buf, len, 0);
-    if (!z_Query(odr_decode, &query, 0))
+    if (!z_Query(odr_decode, &query, 0, 0))
        return 0;
     return query;
 }
@@ -66,3 +80,14 @@ void Yaz_Z_Query::print(char *str, int len)
 {
 
 }
+
+int Yaz_Z_Query::match(Yaz_Z_Query *other)
+{
+    if (len != other->len)
+       return 0;
+    if (!buf || !other->buf)
+       return 0;
+    if (memcmp(buf, other->buf, len))
+       return 0;
+    return 1;
+}