]> granicus.if.org Git - php/commitdiff
Add info function to handlers and return handler info when dba_handlers is
authorMarcus Boerger <helly@php.net>
Mon, 30 Dec 2002 13:07:30 +0000 (13:07 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 30 Dec 2002 13:07:30 +0000 (13:07 +0000)
called with optional parameter full_info set true.

16 files changed:
ext/dba/dba.c
ext/dba/dba_cdb.c
ext/dba/dba_db2.c
ext/dba/dba_db3.c
ext/dba/dba_db4.c
ext/dba/dba_dbm.c
ext/dba/dba_flatfile.c
ext/dba/dba_gdbm.c
ext/dba/dba_ndbm.c
ext/dba/libcdb/cdb.c
ext/dba/libcdb/cdb.h
ext/dba/libcdb/cdb_make.c
ext/dba/libcdb/cdb_make.h
ext/dba/libflatfile/flatfile.c
ext/dba/libflatfile/flatfile.h
ext/dba/php_dba.h

index a6273e7f751796363d42bc760e0459872d884ee9..7441d7af8cc22992caf592ece30d8ec704409c73 100644 (file)
@@ -92,21 +92,6 @@ zend_module_entry dba_module_entry = {
 ZEND_GET_MODULE(dba)
 #endif
 
-typedef struct dba_handler {
-       char *name; /* handler name */
-       int flags; /* whether and how dba does locking and other flags*/
-       int (*open)(dba_info *, char **error TSRMLS_DC);
-       void (*close)(dba_info * TSRMLS_DC);
-       char* (*fetch)(dba_info *, char *, int, int, int * TSRMLS_DC);
-       int (*update)(dba_info *, char *, int, char *, int, int TSRMLS_DC);
-       int (*exists)(dba_info *, char *, int TSRMLS_DC);
-       int (*delete)(dba_info *, char *, int TSRMLS_DC);
-       char* (*firstkey)(dba_info *, int * TSRMLS_DC);
-       char* (*nextkey)(dba_info *, int * TSRMLS_DC);
-       int (*optimize)(dba_info * TSRMLS_DC);
-       int (*sync)(dba_info * TSRMLS_DC);
-} dba_handler;
-
 /* {{{ macromania */
 
 #define DBA_ID_PARS                                                                                    \
@@ -163,7 +148,7 @@ typedef struct dba_handler {
 {\
        #alias, flags, dba_open_##name, dba_close_##name, dba_fetch_##name, dba_update_##name, \
        dba_exists_##name, dba_delete_##name, dba_firstkey_##name, dba_nextkey_##name, \
-       dba_optimize_##name, dba_sync_##name \
+       dba_optimize_##name, dba_sync_##name, dba_info_##name \
 },
 
 #define DBA_HND(name, flags) DBA_NAMED_HND(name, name, flags)
@@ -207,7 +192,7 @@ static dba_handler handler[] = {
 #if DBA_FLATFILE
        DBA_HND(flatfile, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */
 #endif
-       { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
+       { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
 };
 
 #if DBA_FLATFILE
@@ -844,13 +829,14 @@ PHP_FUNCTION(dba_sync)
 }
 /* }}} */
 
-/* {{{ proto array dba_handlers()
+/* {{{ proto array dba_handlers([bool full_info])
    List configured databases */
 PHP_FUNCTION(dba_handlers)
 {
        dba_handler *hptr;
+       zend_bool full_info = 0;
 
-       if (ZEND_NUM_ARGS()!=0) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &full_info) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
                RETURN_FALSE;
        }
@@ -860,7 +846,11 @@ PHP_FUNCTION(dba_handlers)
                RETURN_FALSE;
        }
        for(hptr = handler; hptr->name; hptr++) {
-               add_next_index_string(return_value, hptr->name, 1);
+               if (full_info) {
+                       add_assoc_string(return_value, hptr->name, hptr->info(hptr, NULL TSRMLS_CC), 0);
+               } else {
+                       add_next_index_string(return_value, hptr->name, 1);
+               }
        }
 }
 /* }}} */
index b704465ab9d24da1aacef03d8c6b14996bd2ba7a..8d773f90d2aeb2b94b0f8882bc47174d628b9283 100644 (file)
@@ -324,6 +324,19 @@ DBA_SYNC_FUNC(cdb)
        return SUCCESS;
 }
 
+DBA_INFO_FUNC(cdb)
+{
+#if DBA_CDB_BUILTIN
+       if (!strcmp(hnd->name, "cdb")) {
+               return estrdup(cdb_version());
+       } else {
+               return estrdup(cdb_make_version());
+       }
+#else
+       return estrdup("External");
+#endif
+}
+
 #endif
 
 /*
index e1afa98ff425f92750850bf3ad9e1fe4c42135b0..40cf53519226673b42bcbdeb0de34affe863d547 100644 (file)
@@ -188,6 +188,11 @@ DBA_SYNC_FUNC(db2)
        return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
 }
 
+DBA_INFO_FUNC(db2)
+{
+       return estrdup(DB_VERSION_STRING);
+}
+
 #endif
 
 /*
index 25c7bdc028c4e59f5f3e74620d05518df69dfe71..97cd4ef39086c23a5448544db20646733bf09a44 100644 (file)
@@ -218,6 +218,11 @@ DBA_SYNC_FUNC(db3)
        return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
 }
 
+DBA_INFO_FUNC(db3)
+{
+       return estrdup(DB_VERSION_STRING);
+}
+
 #endif
 
 /*
index 5de50df2c7e39dcffe0eb1f3c5c5ff31b3dbbb5e..3f4c6ef8573871484492aacbf9a364380e6e7b29 100644 (file)
@@ -217,6 +217,11 @@ DBA_SYNC_FUNC(db4)
        return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS;
 }
 
+DBA_INFO_FUNC(db4)
+{
+       return estrdup(DB_VERSION_STRING);
+}
+
 #endif
 
 /*
index cb7664987bc5f736d3a2f4be446b832e244c929c..90efdb0baf65811acf43763b6da58fe8913ed9fd 100644 (file)
@@ -177,6 +177,11 @@ DBA_SYNC_FUNC(dbm)
        return SUCCESS;
 }
 
+DBA_INFO_FUNC(dbm)
+{
+       return estrdup("DBM");
+}
+
 #endif
 
 /*
index 53a577ab5724fb28ca70be6335df36501b81e53f..f2100e124e4536cc77aa1b618aaa6d491a152c01 100644 (file)
@@ -163,6 +163,11 @@ DBA_SYNC_FUNC(flatfile)
        return SUCCESS;
 }
 
+DBA_INFO_FUNC(flatfile)
+{
+       return estrdup(flatfile_version());
+}
+
 #endif
 
 /*
index 93c53d4b9404ec7e14c145a8a1234d9038257c32..84799e446b062112822a7581813bb01ace177548 100644 (file)
@@ -180,6 +180,12 @@ DBA_SYNC_FUNC(gdbm)
        gdbm_sync(dba->dbf);
        return SUCCESS;
 }
+
+DBA_INFO_FUNC(gdbm)
+{
+       return estrdup(gdbm_version);
+}
+
 #endif
 
 /*
index 06583c780bcb34ffe11b9dc5a05121904265b7d4..c79bb3c5cc53f69e83ada49f79dd03db85580ee8 100644 (file)
@@ -153,6 +153,12 @@ DBA_SYNC_FUNC(ndbm)
 {
        return SUCCESS;
 }
+
+DBA_INFO_FUNC(ndbm)
+{
+       return estrdup("NDBM");
+}
+
 #endif
 
 /*
index fbc27eacebaec9568c954f3a4a1b7815e67d0e5e..c4f1c625dbd26727081bdcb7ce03477c8ece9e70 100644 (file)
@@ -193,3 +193,10 @@ int cdb_find(struct cdb *c, char *key, unsigned int len TSRMLS_DC)
        return cdb_findnext(c, key, len TSRMLS_CC);
 }
 /* }}} */
+
+/* {{{ cdb_version */
+char *cdb_version() 
+{
+       return "0.75, $Revision$";
+}
+/* }}} */
index a74ef2325bf87adbd118a0235023061a2c7c04dc..df3bad45ba8ab5f2c2ff26ef35991847aee68576 100644 (file)
@@ -52,4 +52,6 @@ int cdb_find(struct cdb *, char *, unsigned int TSRMLS_DC);
 #define cdb_datapos(c) ((c)->dpos)
 #define cdb_datalen(c) ((c)->dlen)
 
+char *cdb_version();
+
 #endif
index 4023a154a678f01b5716ae221be76bbaf43fabf6..9d1896af32050f9534ca61c32e21ef0446610051 100644 (file)
@@ -238,3 +238,9 @@ int cdb_make_finish(struct cdb_make *c TSRMLS_DC)
        return php_stream_flush(c->fp);
 }
 /* }}} */
+
+/* {{{ cdb_make_version */
+char *cdb_make_version() 
+{
+       return "0.75, $Revision$";
+}
index e5fb65fe49ae7c3a60c526dc146c801722f606a6..ff409682d9fb6fcd5a24b31d8dc6598b9d60f3b6 100644 (file)
@@ -59,5 +59,6 @@ int cdb_make_addbegin(struct cdb_make *, unsigned int, unsigned int TSRMLS_DC);
 int cdb_make_addend(struct cdb_make *, unsigned int, unsigned int, uint32 TSRMLS_DC);
 int cdb_make_add(struct cdb_make *, char *, unsigned int, char *, unsigned int TSRMLS_DC);
 int cdb_make_finish(struct cdb_make * TSRMLS_DC);
+char *cdb_make_version();
 
 #endif
index 4cb820875e795c6ebd5c1894791f6b27d3de937e..c2d4f91ffb893e13d2cd18fae5cac58769157533 100644 (file)
@@ -295,6 +295,13 @@ datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
 }      
 /* }}} */
 
+/* {{{ flatfile_version */
+char *flatfile_version() 
+{
+       return "1.0, $Revision$";
+}
+/* }}} */ 
+
 /*
  * Local variables:
  * tab-width: 4
index 9c910ae15779bfdc23ad7488647d2e18e25a1c17..522028bcff497ecafd3516cf8f21cf7cd7c284fe 100644 (file)
@@ -43,5 +43,6 @@ int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC);
 int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC);
 datum flatfile_firstkey(flatfile *dba TSRMLS_DC);
 datum flatfile_nextkey(flatfile *dba TSRMLS_DC);
+char *flatfile_version();
 
 #endif
index 2e8877b6b5b643de11d0ab66c6ec4e2fa77fe893..3f61219d5ae73523111e9ee0ea0c257cb41b9427 100644 (file)
@@ -68,6 +68,23 @@ typedef struct dba_info {
 extern zend_module_entry dba_module_entry;
 #define dba_module_ptr &dba_module_entry
 
+typedef struct dba_handler {
+       char *name; /* handler name */
+       int flags; /* whether and how dba does locking and other flags*/
+       int (*open)(dba_info *, char **error TSRMLS_DC);
+       void (*close)(dba_info * TSRMLS_DC);
+       char* (*fetch)(dba_info *, char *, int, int, int * TSRMLS_DC);
+       int (*update)(dba_info *, char *, int, char *, int, int TSRMLS_DC);
+       int (*exists)(dba_info *, char *, int TSRMLS_DC);
+       int (*delete)(dba_info *, char *, int TSRMLS_DC);
+       char* (*firstkey)(dba_info *, int * TSRMLS_DC);
+       char* (*nextkey)(dba_info *, int * TSRMLS_DC);
+       int (*optimize)(dba_info * TSRMLS_DC);
+       int (*sync)(dba_info * TSRMLS_DC);
+       char* (*info)(struct dba_handler *hnd, dba_info * TSRMLS_DC);
+               /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */
+} dba_handler;
+
 /* common prototypes which must be supplied by modules */
 
 #define DBA_OPEN_FUNC(x) \
@@ -90,6 +107,8 @@ extern zend_module_entry dba_module_entry;
        int dba_optimize_##x(dba_info *info TSRMLS_DC)
 #define DBA_SYNC_FUNC(x) \
        int dba_sync_##x(dba_info *info TSRMLS_DC)
+#define DBA_INFO_FUNC(x) \
+       char *dba_info_##x(dba_handler *hnd, dba_info *info TSRMLS_DC)
 
 #define DBA_FUNCS(x) \
        DBA_OPEN_FUNC(x); \
@@ -101,7 +120,8 @@ extern zend_module_entry dba_module_entry;
        DBA_FIRSTKEY_FUNC(x); \
        DBA_NEXTKEY_FUNC(x); \
        DBA_OPTIMIZE_FUNC(x); \
-       DBA_SYNC_FUNC(x)
+       DBA_SYNC_FUNC(x); \
+       DBA_INFO_FUNC(x)
 
 #define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p)