|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 Jun 2000, Version 4.0.1
+- Added a new (fifth) parameter to dba_[p]open(), which kind of database to
+ create (DBA_BTREE or DBA_HASH), if the handler is either 'db2' or 'db3' and
+ mode 'c' or 'n'. It is ignored if mode is 'c' and the db already exists.
+ (Jouni)
- Fixed a bug in opendir(), which prevented readdir() from working properly if
the $dir argument wasn't explicitly specified (Zeev)
- Made --enable-discard-path work again. (Andi)
zend_hash_init(&ht_keys, 0, NULL, NULL, 1);
GLOBAL(le_db) = register_list_destructors(dba_close, NULL);
GLOBAL(le_pdb) = register_list_destructors(NULL, dba_close);
+ REGISTER_LONG_CONSTANT("DBA_BTREE", DBA_BTREE, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DBA_HASH", DBA_HASH, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DBA_RECNO", DBA_RECNO, CONST_CS | CONST_PERSISTENT);
return SUCCESS;
}
filemode = (*info->argv[0])->value.lval;
}
+ if(info->argc > 1
+ && ((info->mode == DBA_CREAT && type != DB_UNKNOWN)
+ || info->mode == DBA_TRUNC)) {
+ convert_to_long_ex(info->argv[1]);
+ switch ((*info->argv[1])->value.lval) {
+ case DBA_HASH:
+ type = DB_HASH;
+ break;
+ case DBA_BTREE:
+ default:
+ type = DB_BTREE;
+ break;
+ }
+ }
+
if(!db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) {
info->dbf = malloc(sizeof(dba_db2_data));
memset(info->dbf, 0, sizeof(dba_db2_data));
filemode = (*info->argv[0])->value.lval;
}
+ if(info->argc > 1
+ && ((info->mode == DBA_CREAT && type != DB_UNKNOWN)
+ || info->mode == DBA_TRUNC)) {
+ convert_to_long_ex(info->argv[1]);
+ switch ((*info->argv[1])->value.lval) {
+ case DBA_HASH:
+ type = DB_HASH;
+ break;
+ case DBA_BTREE:
+ default:
+ type = DB_BTREE;
+ break;
+ }
+ }
+
if (db_create(&dbp, NULL, 0) == 0 &&
dbp->open(dbp, info->path, NULL, type, gmode, filemode) == 0) {
dba_db3_data *data;
DBA_CREAT
} dba_mode_t;
+typedef enum {
+ DBA_BTREE = 1,
+ DBA_HASH,
+ DBA_RECNO
+} dba_type_t;
+
typedef struct dba_info {
/* public */
void *dbf; /* ptr to private data or whatever */