Annotation of embedaddon/php/ext/dba/dba_tcadb.c, revision 1.1

1.1     ! misho       1: /*
        !             2:    +----------------------------------------------------------------------+
        !             3:    | PHP Version 5                                                        |
        !             4:    +----------------------------------------------------------------------+
        !             5:    | Copyright (c) 1997-2012 The PHP Group                                |
        !             6:    +----------------------------------------------------------------------+
        !             7:    | This source file is subject to version 3.01 of the PHP license,      |
        !             8:    | that is bundled with this package in the file LICENSE, and is        |
        !             9:    | available through the world-wide-web at the following url:           |
        !            10:    | http://www.php.net/license/3_01.txt                                  |
        !            11:    | If you did not receive a copy of the PHP license and are unable to   |
        !            12:    | obtain it through the world-wide-web, please send a note to          |
        !            13:    | license@php.net so we can mail you a copy immediately.               |
        !            14:    +----------------------------------------------------------------------+
        !            15:    | Author:  Michael Maclean <mgdm@php.net>                              |
        !            16:    +----------------------------------------------------------------------+
        !            17:  */
        !            18: 
        !            19: /* $Id$ */
        !            20: 
        !            21: #ifdef HAVE_CONFIG_H
        !            22: #include "config.h"
        !            23: #endif
        !            24: 
        !            25: #include "php.h"
        !            26: 
        !            27: #if DBA_TCADB
        !            28: #include "php_tcadb.h"
        !            29: 
        !            30: #ifdef TCADB_INCLUDE_FILE
        !            31: #include TCADB_INCLUDE_FILE
        !            32: #endif
        !            33: 
        !            34: #define TCADB_DATA dba_tcadb_data *dba = info->dbf
        !            35: 
        !            36: typedef struct {
        !            37:        TCADB *tcadb;   
        !            38: } dba_tcadb_data;
        !            39: 
        !            40: DBA_OPEN_FUNC(tcadb)
        !            41: {
        !            42:        char *path_string;
        !            43:        TCADB *tcadb = tcadbnew();
        !            44: 
        !            45:        if (tcadb) {
        !            46:                switch(info->mode) {
        !            47:                        case DBA_READER:
        !            48:                                spprintf(&path_string, 0, "%s#mode=r", info->path);
        !            49:                                break;
        !            50:                        case DBA_WRITER:
        !            51:                                spprintf(&path_string, 0, "%s#mode=w", info->path);
        !            52:                                break;
        !            53:                        case DBA_CREAT:
        !            54:                                spprintf(&path_string, 0, "%s#mode=wc", info->path);
        !            55:                                break;
        !            56:                        case DBA_TRUNC:
        !            57:                                spprintf(&path_string, 0, "%s#mode=wct", info->path);
        !            58:                                break;
        !            59:                        default:
        !            60:                                tcadbdel(tcadb);
        !            61:                                return FAILURE;
        !            62:                }
        !            63: 
        !            64:                if (!tcadbopen(tcadb, path_string)) {
        !            65:                        efree(path_string);
        !            66:                        tcadbdel(tcadb);
        !            67:                        return FAILURE;
        !            68:                }
        !            69: 
        !            70:                efree(path_string);
        !            71: 
        !            72:                info->dbf = pemalloc(sizeof(dba_tcadb_data), info->flags & DBA_PERSISTENT);
        !            73:                memset(info->dbf, 0, sizeof(dba_tcadb_data));
        !            74:                ((dba_tcadb_data *) info->dbf)->tcadb = tcadb;
        !            75:                return SUCCESS;
        !            76:        }
        !            77: 
        !            78:        return FAILURE;
        !            79: }
        !            80: 
        !            81: DBA_CLOSE_FUNC(tcadb)
        !            82: {
        !            83:        TCADB_DATA;
        !            84: 
        !            85:        tcadbclose(dba->tcadb);
        !            86:        pefree(dba, info->flags & DBA_PERSISTENT);
        !            87: }
        !            88: 
        !            89: DBA_FETCH_FUNC(tcadb)
        !            90: {
        !            91:        TCADB_DATA;
        !            92:        char *value, *new = NULL;
        !            93:        int value_size;
        !            94: 
        !            95:        value = tcadbget(dba->tcadb, key, keylen, &value_size);
        !            96:        if (value) {
        !            97:                if (newlen) {
        !            98:                        *newlen = value_size;
        !            99:                }
        !           100:                new = estrndup(value, value_size);
        !           101:                tcfree(value);
        !           102:        }
        !           103: 
        !           104:        return new;
        !           105: }
        !           106: 
        !           107: DBA_UPDATE_FUNC(tcadb)
        !           108: {
        !           109:        TCADB_DATA;
        !           110:        int result;
        !           111: 
        !           112:        if (mode == 1) {
        !           113:                /* Insert */
        !           114:                if (tcadbvsiz(dba->tcadb, key, keylen) > -1) {
        !           115:                        return FAILURE;
        !           116:                }
        !           117:        }
        !           118:        
        !           119:        result = tcadbput(dba->tcadb, key, keylen, val, vallen);
        !           120: 
        !           121:        if (result) {
        !           122:                return SUCCESS;
        !           123:        }
        !           124: 
        !           125:        php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "Error updating data");
        !           126:        return FAILURE;
        !           127: }
        !           128: 
        !           129: DBA_EXISTS_FUNC(tcadb)
        !           130: {
        !           131:        TCADB_DATA;
        !           132:        char *value;
        !           133:        int value_len;
        !           134: 
        !           135:        value = tcadbget(dba->tcadb, key, keylen, &value_len);
        !           136:        if (value) {
        !           137:                tcfree(value);
        !           138:                return SUCCESS;
        !           139:        }
        !           140: 
        !           141:        return FAILURE;
        !           142: }
        !           143: 
        !           144: DBA_DELETE_FUNC(tcadb)
        !           145: {
        !           146:        TCADB_DATA;
        !           147: 
        !           148:        return tcadbout(dba->tcadb, key, keylen) ? SUCCESS : FAILURE;
        !           149: }
        !           150: 
        !           151: DBA_FIRSTKEY_FUNC(tcadb)
        !           152: {
        !           153:        TCADB_DATA;
        !           154:        int value_size;
        !           155:        char *value, *new = NULL;
        !           156: 
        !           157:        tcadbiterinit(dba->tcadb);
        !           158: 
        !           159:        value = tcadbiternext(dba->tcadb, &value_size);
        !           160:        if (value) {
        !           161:                if (newlen) {
        !           162:                        *newlen = value_size;
        !           163:                }
        !           164:                new = estrndup(value, value_size);
        !           165:                tcfree(value);
        !           166:        }
        !           167: 
        !           168:        return new;
        !           169: }
        !           170: 
        !           171: DBA_NEXTKEY_FUNC(tcadb)
        !           172: {
        !           173:        TCADB_DATA;
        !           174:        int value_size;
        !           175:        char *value, *new = NULL;
        !           176: 
        !           177:        value = tcadbiternext(dba->tcadb, &value_size);
        !           178:        if (value) {
        !           179:                if (newlen) {
        !           180:                        *newlen = value_size;
        !           181:                }
        !           182:                new = estrndup(value, value_size);
        !           183:                tcfree(value);
        !           184:        }
        !           185: 
        !           186:        return new;
        !           187: }
        !           188: 
        !           189: DBA_OPTIMIZE_FUNC(tcadb)
        !           190: {
        !           191:        TCADB_DATA;
        !           192: 
        !           193: #if _TC_LIBVER >= 811
        !           194:        return tcadboptimize(dba->tcadb, NULL) ? SUCCESS : FAILURE;
        !           195: #else
        !           196:        return FAILURE;
        !           197: #endif
        !           198: }
        !           199: 
        !           200: DBA_SYNC_FUNC(tcadb)
        !           201: {
        !           202:        TCADB_DATA;
        !           203: 
        !           204:        return tcadbsync(dba->tcadb) ? SUCCESS : FAILURE;
        !           205: }
        !           206: 
        !           207: DBA_INFO_FUNC(tcadb)
        !           208: {
        !           209:        return estrdup(tcversion);
        !           210: }
        !           211: 
        !           212: #endif
        !           213: 
        !           214: /*
        !           215:  * Local variables:
        !           216:  * tab-width: 4
        !           217:  * c-basic-offset: 4
        !           218:  * End:
        !           219:  * vim600: sw=4 ts=4 fdm=marker
        !           220:  * vim<600: sw=4 ts=4
        !           221:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>