dickmeiss               Tue Mar 13 09:04:05 2001 EDT

  Modified files:              
    /php4/ext/yaz       php_yaz.c php_yaz.h 
  Log:
  Added yaz_database. Option bit ExtendedServices set for InitRequest.
  
  
Index: php4/ext/yaz/php_yaz.c
diff -u php4/ext/yaz/php_yaz.c:1.13 php4/ext/yaz/php_yaz.c:1.14
--- php4/ext/yaz/php_yaz.c:1.13 Sun Feb 25 22:07:26 2001
+++ php4/ext/yaz/php_yaz.c      Tue Mar 13 09:04:05 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_yaz.c,v 1.13 2001/02/26 06:07:26 andi Exp $ */
+/* $Id: php_yaz.c,v 1.14 2001/03/13 17:04:05 dickmeiss Exp $ */
 
 #include "php.h"
 
@@ -72,6 +72,7 @@
        char *host_port;
        int num_databaseNames;
        char **databaseNames;
+       char *local_databases;
        COMSTACK cs;
        char *cookie;
        char *auth_open;
@@ -110,6 +111,7 @@
        p->host_port = 0;
        p->num_databaseNames = 0;
        p->databaseNames = 0;
+       p->local_databases = 0;
        p->cs = 0;
        p->cookie = 0;
        p->auth_open = 0;
@@ -149,6 +151,7 @@
        if (!p)
                return ;
        xfree (p->host_port);
+       xfree (p->local_databases);
        for (i = 0; i<p->num_databaseNames; i++)
                xfree (p->databaseNames[i]);
        xfree (p->databaseNames);
@@ -221,6 +224,7 @@
        PHP_FE(yaz_present, NULL)
        PHP_FE(yaz_ccl_conf, NULL)
        PHP_FE(yaz_ccl_parse, NULL)
+       PHP_FE(yaz_database, NULL)
        {NULL, NULL, NULL}
 };
 
@@ -656,12 +660,21 @@
        return 0;       
 }
 
+/* set database names. Take local databases (if set); otherwise
+   take databases given in ZURL (if set); otherwise use Default */
 static char **set_DatabaseNames (Yaz_Association t, int *num)
 {
        char **databaseNames;
-       char *c, *cp = strchr (t->host_port, '/');
+       char *c;
        int no = 2;
+       char *cp = t->local_databases;
 
+       if (!cp || !*cp)
+       {
+               cp = strchr (t->host_port, '/');
+               if (cp)
+                       cp++;
+       }
        if (cp)
        {
                c = cp;
@@ -672,23 +685,26 @@
                }
        }
        else
-               cp = "/Default";
+               cp = "Default";
        databaseNames = odr_malloc (t->odr_out, no * sizeof(*databaseNames));
        no = 0;
        while (*cp)
        {
-               c = ++cp;
-               c = strchr (c, '+');
+               c = strchr (cp, '+');
                if (!c)
                        c = cp + strlen(cp);
                else if (c == cp)
+               {
+                       cp++;
                        continue;
+               }
                /* cp ptr to first char of db name, c is char following db name */
                databaseNames[no] = odr_malloc (t->odr_out, 1+c-cp);
                memcpy (databaseNames[no], cp, c-cp);
-               databaseNames[no][c-cp] = '\0';
-               no++;
+               databaseNames[no++][c-cp] = '\0';
                cp = c;
+               if (*cp)
+                       cp++;
        }
        databaseNames[no] = NULL;
        *num = no;
@@ -822,6 +838,7 @@
        ODR_MASK_SET(ireq->options, Z_Options_present);
        ODR_MASK_SET(ireq->options, Z_Options_namedResultSets);
        ODR_MASK_SET(ireq->options, Z_Options_scan);
+       ODR_MASK_SET(ireq->options, Z_Options_extendedServices);
        
        ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1);
        ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2);
@@ -1062,6 +1079,8 @@
                shared_associations[i]->group = xstrdup (group_str);
                shared_associations[i]->pass = xstrdup (pass_str);
        }
+       xfree (shared_associations[i]->local_databases);
+       shared_associations[i]->local_databases = 0;
 #ifdef ZTS
        tsrm_mutex_unlock (yaz_mutex);
 #endif
@@ -2245,6 +2264,33 @@
                        RETVAL_TRUE;
                }
                ccl_rpn_delete(rpn);
+       }
+       else
+               RETVAL_FALSE;
+       release_assoc (p);
+}
+/* }}} */
+
+/* {{{ proto int yaz_ccl_parse(int id, string query, array res)
+   Parse a CCL query */
+
+PHP_FUNCTION(yaz_database)
+{
+       pval **pval_id, **pval_database;
+       Yaz_Association p;
+       if (ZEND_NUM_ARGS() != 2 || 
+               zend_get_parameters_ex(2, &pval_id, &pval_database) ==
+               FAILURE)
+       {
+               WRONG_PARAM_COUNT;
+       }
+       convert_to_string_ex (pval_database);
+       p = get_assoc (pval_id);
+       if (p)
+       {
+               xfree (p->local_databases);
+               p->local_databases = xstrdup ((*pval_database)->value.str.val);
+               RETVAL_TRUE;
        }
        else
                RETVAL_FALSE;
Index: php4/ext/yaz/php_yaz.h
diff -u php4/ext/yaz/php_yaz.h:1.4 php4/ext/yaz/php_yaz.h:1.5
--- php4/ext/yaz/php_yaz.h:1.4  Sun Feb 25 22:07:26 2001
+++ php4/ext/yaz/php_yaz.h      Tue Mar 13 09:04:05 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_yaz.h,v 1.4 2001/02/26 06:07:26 andi Exp $ */
+/* $Id: php_yaz.h,v 1.5 2001/03/13 17:04:05 dickmeiss Exp $ */
 
 #ifndef PHP_YAZ_H
 #define PHP_YAZ_H
@@ -48,6 +48,7 @@
 PHP_FUNCTION(yaz_present);
 PHP_FUNCTION(yaz_ccl_conf);
 PHP_FUNCTION(yaz_ccl_parse);
+PHP_FUNCTION(yaz_database);
 
 #else
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to