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

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | PHP Version 5                                                        |
                      4:    +----------------------------------------------------------------------+
1.1.1.3 ! misho       5:    | Copyright (c) 1997-2014 The PHP Group                                |
1.1       misho       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>