Created
January 17, 2010 05:34
-
-
Save iogi/279220 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -crN config.m4 config.m4.new | |
*** config.m4 2010-01-17 13:34:39.000000000 +0900 | |
--- config.m4.new 2010-01-17 14:10:01.000000000 +0900 | |
*************** | |
*** 1,5 **** | |
dnl | |
! dnl $Id: config.m4 247692 2007-12-06 14:01:49Z helly $ | |
dnl | |
dnl Suppose we need FlatFile if no support or only CDB is used. | |
--- 1,5 ---- | |
dnl | |
! dnl $Id: config.m4 280739 2009-05-18 20:21:39Z scottmac $ | |
dnl | |
dnl Suppose we need FlatFile if no support or only CDB is used. | |
*************** | |
*** 97,102 **** | |
--- 97,106 ---- | |
PHP_ARG_WITH(dbm,, | |
[ --with-dbm[=DIR] DBA: DBM support], no, no) | |
+ PHP_ARG_WITH(tcadb,, | |
+ [ --with-tcadb[=DIR] DBA: Tokyo Cabinet abstract DB support], no, no) | |
+ | |
+ | |
dnl | |
dnl Library checks | |
dnl | |
*************** | |
*** 193,198 **** | |
--- 197,233 ---- | |
fi | |
PHP_DBA_STD_RESULT(ndbm) | |
+ dnl TCADB | |
+ if test "$PHP_TCADB" != "no"; then | |
+ PHP_DBA_STD_BEGIN | |
+ for i in $PHP_TCADB /usr/local /usr; do | |
+ if test -f "$i/include/tcadb.h"; then | |
+ THIS_PREFIX=$i | |
+ PHP_ADD_INCLUDE($THIS_PREFIX/include) | |
+ THIS_INCLUDE=$i/include/tcadb.h | |
+ break | |
+ fi | |
+ done | |
+ | |
+ if test -n "$THIS_INCLUDE"; then | |
+ for LIB in tokyocabinet; do | |
+ PHP_CHECK_LIBRARY($LIB, tcadbopen, [ | |
+ AC_DEFINE_UNQUOTED(TCADB_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) | |
+ AC_DEFINE(DBA_TCADB, 1, [ ]) | |
+ THIS_LIBS=$LIB | |
+ ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) | |
+ if test -n "$THIS_LIBS"; then | |
+ break | |
+ fi | |
+ done | |
+ fi | |
+ | |
+ PHP_DBA_STD_ASSIGN | |
+ PHP_DBA_STD_CHECK | |
+ PHP_DBA_STD_ATTACH | |
+ fi | |
+ PHP_DBA_STD_RESULT(tcadb) | |
+ | |
dnl Berkeley specific (library and version test) | |
dnl parameters(version, library list, function) | |
AC_DEFUN([PHP_DBA_DB_CHECK],[ | |
*************** | |
*** 569,575 **** | |
AC_MSG_RESULT([yes]) | |
fi | |
AC_DEFINE(HAVE_DBA, 1, [ ]) | |
! PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db1.c dba_db2.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c dba_qdbm.c $cdb_sources $flat_sources $ini_sources, $ext_shared) | |
PHP_ADD_BUILD_DIR($ext_builddir/libinifile) | |
PHP_ADD_BUILD_DIR($ext_builddir/libcdb) | |
PHP_ADD_BUILD_DIR($ext_builddir/libflatfile) | |
--- 604,610 ---- | |
AC_MSG_RESULT([yes]) | |
fi | |
AC_DEFINE(HAVE_DBA, 1, [ ]) | |
! PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db1.c dba_db2.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c dba_qdbm.c dba_tcadb.c $cdb_sources $flat_sources $ini_sources, $ext_shared) | |
PHP_ADD_BUILD_DIR($ext_builddir/libinifile) | |
PHP_ADD_BUILD_DIR($ext_builddir/libcdb) | |
PHP_ADD_BUILD_DIR($ext_builddir/libflatfile) | |
diff -crN dba.c dba.c.new | |
*** dba.c 2010-01-17 13:34:39.000000000 +0900 | |
--- dba.c.new 2010-01-17 14:08:48.000000000 +0900 | |
*************** | |
*** 50,55 **** | |
--- 50,56 ---- | |
#include "php_flatfile.h" | |
#include "php_inifile.h" | |
#include "php_qdbm.h" | |
+ #include "php_tcadb.h" | |
/* {{{ arginfo */ | |
ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_popen, 0, 0, 2) | |
*************** | |
*** 337,342 **** | |
--- 338,346 ---- | |
#if DBA_QDBM | |
DBA_HND(qdbm, DBA_LOCK_EXT) | |
#endif | |
+ #if DBA_TCADB | |
+ DBA_HND(tcadb, DBA_LOCK_ALL) | |
+ #endif | |
{ NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } | |
}; | |
*************** | |
*** 358,363 **** | |
--- 362,369 ---- | |
#define DBA_DEFAULT "dbm" | |
#elif DBA_QDBM | |
#define DBA_DEFAULT "qdbm" | |
+ #elif DBA_TCADB | |
+ #define DBA_DEFAULT "tcadb" | |
#else | |
#define DBA_DEFAULT "" | |
#endif | |
diff -crN dba_tcadb.c dba_tcadb.c.new | |
*** dba_tcadb.c 1970-01-01 09:00:00.000000000 +0900 | |
--- dba_tcadb.c.new 2010-01-17 14:10:39.000000000 +0900 | |
*************** | |
*** 0 **** | |
--- 1,219 ---- | |
+ /* | |
+ +----------------------------------------------------------------------+ | |
+ | PHP Version 5 | | |
+ +----------------------------------------------------------------------+ | |
+ | Copyright (c) 1997-2010 The PHP Group | | |
+ +----------------------------------------------------------------------+ | |
+ | This source file is subject to version 3.01 of the PHP license, | | |
+ | that is bundled with this package in the file LICENSE, and is | | |
+ | available through the world-wide-web at the following url: | | |
+ | http://www.php.net/license/3_01.txt | | |
+ | If you did not receive a copy of the PHP license and are unable to | | |
+ | obtain it through the world-wide-web, please send a note to | | |
+ | license@php.net so we can mail you a copy immediately. | | |
+ +----------------------------------------------------------------------+ | |
+ | Author: Michael Maclean <mgdm@php.net> | | |
+ +----------------------------------------------------------------------+ | |
+ */ | |
+ | |
+ /* $Id: dba_tcadb.c 293036 2010-01-03 09:23:27Z sebastian $ */ | |
+ | |
+ #ifdef HAVE_CONFIG_H | |
+ #include "config.h" | |
+ #endif | |
+ | |
+ #include "php.h" | |
+ | |
+ #if DBA_TCADB | |
+ #include "php_tcadb.h" | |
+ | |
+ #ifdef TCADB_INCLUDE_FILE | |
+ #include TCADB_INCLUDE_FILE | |
+ #endif | |
+ | |
+ #define TCADB_DATA dba_tcadb_data *dba = info->dbf | |
+ | |
+ typedef struct { | |
+ TCADB *tcadb; | |
+ } dba_tcadb_data; | |
+ | |
+ DBA_OPEN_FUNC(tcadb) | |
+ { | |
+ char *path_string; | |
+ TCADB *tcadb = tcadbnew(); | |
+ | |
+ if (tcadb) { | |
+ | |
+ /* alloc memory for the path and the mode string */ | |
+ path_string = emalloc(strlen(info->path)+10); | |
+ | |
+ switch(info->mode) { | |
+ case DBA_READER: | |
+ sprintf(path_string, "%s#mode=r", info->path); | |
+ break; | |
+ case DBA_WRITER: | |
+ sprintf(path_string, "%s#mode=w", info->path); | |
+ break; | |
+ case DBA_CREAT: | |
+ sprintf(path_string, "%s#mode=wc", info->path); | |
+ break; | |
+ case DBA_TRUNC: | |
+ sprintf(path_string, "%s#mode=wct", info->path); | |
+ break; | |
+ default: | |
+ efree(path_string); | |
+ return FAILURE; | |
+ } | |
+ | |
+ if (!tcadbopen(tcadb, path_string)) { | |
+ efree(path_string); | |
+ return FAILURE; | |
+ } | |
+ | |
+ efree(path_string); | |
+ | |
+ info->dbf = pemalloc(sizeof(dba_tcadb_data), info->flags & DBA_PERSISTENT); | |
+ memset(info->dbf, 0, sizeof(dba_tcadb_data)); | |
+ ((dba_tcadb_data *) info->dbf)->tcadb = tcadb; | |
+ return SUCCESS; | |
+ } | |
+ | |
+ return FAILURE; | |
+ } | |
+ | |
+ DBA_CLOSE_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ | |
+ tcadbclose(dba->tcadb); | |
+ pefree(dba, info->flags & DBA_PERSISTENT); | |
+ } | |
+ | |
+ DBA_FETCH_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ char *value, *new = NULL; | |
+ int value_size; | |
+ | |
+ value = tcadbget(dba->tcadb, key, keylen, &value_size); | |
+ if (value) { | |
+ if (newlen) { | |
+ *newlen = value_size; | |
+ } | |
+ new = estrndup(value, value_size); | |
+ tcfree(value); | |
+ } | |
+ | |
+ return new; | |
+ } | |
+ | |
+ DBA_UPDATE_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ int result; | |
+ | |
+ result = tcadbput(dba->tcadb, key, keylen, val, vallen); | |
+ | |
+ if (result) { | |
+ return SUCCESS; | |
+ } | |
+ | |
+ php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "Error updating data"); | |
+ return FAILURE; | |
+ } | |
+ | |
+ DBA_EXISTS_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ char *value; | |
+ int value_len; | |
+ | |
+ value = tcadbget(dba->tcadb, key, keylen, &value_len); | |
+ if (value) { | |
+ tcfree(value); | |
+ return SUCCESS; | |
+ } | |
+ | |
+ return FAILURE; | |
+ } | |
+ | |
+ DBA_DELETE_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ | |
+ return tcadbout(dba->tcadb, key, keylen) ? SUCCESS : FAILURE; | |
+ } | |
+ | |
+ DBA_FIRSTKEY_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ int value_size; | |
+ char *value, *new = NULL; | |
+ | |
+ tcadbiterinit(dba->tcadb); | |
+ | |
+ value = tcadbiternext(dba->tcadb, &value_size); | |
+ if (value) { | |
+ if (newlen) { | |
+ *newlen = value_size; | |
+ } | |
+ new = estrndup(value, value_size); | |
+ tcfree(value); | |
+ } | |
+ | |
+ return new; | |
+ } | |
+ | |
+ DBA_NEXTKEY_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ int value_size; | |
+ char *value, *new = NULL; | |
+ | |
+ value = tcadbiternext(dba->tcadb, &value_size); | |
+ if (value) { | |
+ if (newlen) { | |
+ *newlen = value_size; | |
+ } | |
+ new = estrndup(value, value_size); | |
+ tcfree(value); | |
+ } | |
+ | |
+ return new; | |
+ } | |
+ | |
+ DBA_OPTIMIZE_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ | |
+ #if _TC_LIBVER >= 811 | |
+ tcadboptimize(dba->tcadb, NULL); | |
+ return SUCCESS; | |
+ #else | |
+ return FAILURE; | |
+ #endif | |
+ } | |
+ | |
+ DBA_SYNC_FUNC(tcadb) | |
+ { | |
+ TCADB_DATA; | |
+ | |
+ tcadbsync(dba->tcadb); | |
+ return SUCCESS; | |
+ } | |
+ | |
+ DBA_INFO_FUNC(tcadb) | |
+ { | |
+ return estrdup(tcversion); | |
+ } | |
+ | |
+ #endif | |
+ | |
+ /* | |
+ * Local variables: | |
+ * tab-width: 4 | |
+ * c-basic-offset: 4 | |
+ * End: | |
+ * vim600: sw=4 ts=4 fdm=marker | |
+ * vim<600: sw=4 ts=4 | |
+ */ | |
diff -crN php_tcadb.h php_tcadb.h.new | |
*** php_tcadb.h 1970-01-01 09:00:00.000000000 +0900 | |
--- php_tcadb.h.new 2010-01-17 14:10:59.000000000 +0900 | |
*************** | |
*** 0 **** | |
--- 1,32 ---- | |
+ /* | |
+ +----------------------------------------------------------------------+ | |
+ | PHP Version 5 | | |
+ +----------------------------------------------------------------------+ | |
+ | Copyright (c) 1997-2010 The PHP Group | | |
+ +----------------------------------------------------------------------+ | |
+ | This source file is subject to version 3.01 of the PHP license, | | |
+ | that is bundled with this package in the file LICENSE, and is | | |
+ | available through the world-wide-web at the following url: | | |
+ | http://www.php.net/license/3_01.txt | | |
+ | If you did not receive a copy of the PHP license and are unable to | | |
+ | obtain it through the world-wide-web, please send a note to | | |
+ | license@php.net so we can mail you a copy immediately. | | |
+ +----------------------------------------------------------------------+ | |
+ | Author: Michael Maclean <mgdm@php.net> | | |
+ +----------------------------------------------------------------------+ | |
+ */ | |
+ | |
+ /* $Id: php_tcadb.h 293036 2010-01-03 09:23:27Z sebastian $ */ | |
+ | |
+ #ifndef PHP_TCADB_H | |
+ #define PHP_TCADB_H | |
+ | |
+ #if DBA_TCADB | |
+ | |
+ #include "php_dba.h" | |
+ | |
+ DBA_FUNCS(tcadb); | |
+ | |
+ #endif | |
+ | |
+ #endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment