Пример #1
0
int bdb_rrow_db2bdb(db_con_t* _h, db_key_t* _k, int _n, bdb_rrow_p *_r)
{
	bdb_rrow_p	r;
	bdb_table_p	t;
	bdb_column_p	c;

	int		found;
	int		i;
	int		c_idx;

	*_r = NULL;

	if ((t = bdb_find_table(CON_TABLE(_h))) == NULL) {
#ifdef BDB_EXTRA_DEBUG
		LOG(L_ERR, "BDB:bdb_rrow_db2bdb: no table in use\n");
#endif
		return -1;
	};

	i = (_n == 0) ? BDB_CON_COL_NUM(_h) : _n;
	r = pkg_malloc(sizeof(*r) * i);
	memset(r, 0, sizeof(*r) * i);

	if (_n > 0) {
		for (i = 0; i < _n; i++) {
			found = 0;
			for (c = t->cols, c_idx = 0; c != NULL; c = c->next, c_idx++) {
				if (!strcmp(_k[i], c->name.s)) {
#ifdef BDB_EXTRA_DEBUG
					LOG(L_NOTICE, "BDB:bdb_rrow_db2bdb: filling column '%.*s', c_idx = %0d\n", c->name.len, c->name.s, c_idx);
#endif
					r[i] = c_idx;
					found = 1;
					break;
				}
			}
			if (!found) {
				LOG(L_ERR, "BDB:bdb_rrow_db2bdb: column '%s' does not exist\n", _k[i]);
				bdb_free_rrow(r);
				return -1;
			}
		}
	} else {		/* return all columns */
		for (c = t->cols, c_idx = 0; c != NULL; c = c->next, c_idx++) {
#ifdef BDB_EXTRA_DEBUG
			LOG(L_NOTICE, "BDB:bdb_rrow_db2bdb: filling column '%.*s', c_idx = %0d\n", c->name.len, c->name.s, c_idx);
#endif
			r[c_idx] = c_idx;
		}
	}

	*_r = r;

	return 0;
};
Пример #2
0
int bdb_query(db_con_t* _h, db_key_t* _k, db_op_t* _op, db_val_t* _v,
		db_key_t* _c, int _n, int _nc, db_key_t _o, db_res_t** _r)
{
	bdb_srow_p	s_r;		/* search keys row */
	bdb_rrow_p	r_r;		/* return keys row */
	int		ret;

	*_r = NULL;
	s_r = NULL;
	r_r = NULL;

	if (_o) {
		LOG(L_ERR, "BDB:bdb_query: ORDER BY is not supported.\n");
		return -1;
	}

	if ((ret = bdb_srow_db2bdb(_h, _k, _op, _v, _n, &s_r)) < 0) {
		return -1;
	};

	if ((ret = bdb_rrow_db2bdb(_h, _c, _nc, &r_r)) < 0) {
		bdb_free_srow(s_r);
		return -1;
	};

	if ((ret = bdb_query_table(_h, s_r, r_r, _nc, _r)) < 0) {
		bdb_free_rrow(r_r);
		bdb_free_srow(s_r);
		return -1;
	};

	bdb_free_rrow(r_r);
	bdb_free_srow(s_r);

	return 0;
}