Lines Matching refs:iter

335 db_dict_iter_find_key(struct db_dict_value_iter *iter, const char *name)
339 array_foreach_modifiable(&iter->keys, key) {
346 static void db_dict_iter_find_used_keys(struct db_dict_value_iter *iter)
353 array_foreach(iter->fields, field) {
368 key = db_dict_iter_find_key(iter, name);
377 static void db_dict_iter_find_used_objects(struct db_dict_value_iter *iter)
382 array_foreach(iter->objects, keyp) {
383 key = db_dict_iter_find_key(iter, (*keyp)->name);
397 static int db_dict_iter_lookup_key_values(struct db_dict_value_iter *iter)
406 array_sort(&iter->keys, db_dict_iter_key_cmp);
411 array_foreach_modifiable(&iter->keys, key) {
417 ret = dict_lookup(iter->conn->dict, iter->pool,
420 auth_request_log_debug(iter->auth_request, AUTH_SUBSYS_DB,
424 auth_request_log_error(iter->auth_request, AUTH_SUBSYS_DB,
428 auth_request_log_debug(iter->auth_request, AUTH_SUBSYS_DB,
445 struct db_dict_value_iter *iter;
452 iter = p_new(pool, struct db_dict_value_iter, 1);
453 iter->pool = pool;
454 iter->conn = conn;
455 iter->fields = fields;
456 iter->objects = objects;
457 iter->tmpstr = str_new(pool, 128);
458 iter->auth_request = auth_request;
459 iter->var_expand_table = auth_request_get_var_expand_table(auth_request, NULL);
462 p_array_init(&iter->keys, pool, array_count(&conn->set.keys));
464 iterkey = array_append_space(&iter->keys);
465 struct db_dict_key *new_key = p_new(iter->pool, struct db_dict_key, 1);
467 string_t *expanded_key = str_new(iter->pool, strlen(key->key));
470 iter->var_expand_table,
472 auth_request_log_error(iter->auth_request, AUTH_SUBSYS_DB,
481 db_dict_iter_find_used_keys(iter);
482 db_dict_iter_find_used_objects(iter);
483 ret = db_dict_iter_lookup_key_values(iter);
489 *iter_r = iter;
494 db_dict_value_iter_json_next(struct db_dict_value_iter *iter,
501 if (json_parse_next(iter->json_parser, &type, &value) < 0)
504 iter->error = "Object expected";
508 iter->error = "Empty object key";
514 if (json_parse_next(iter->json_parser, &type, &value) < 0) {
515 iter->error = "Missing value";
519 iter->error = "Nested objects not supported";
528 db_dict_value_iter_json_init(struct db_dict_value_iter *iter, const char *data)
532 i_assert(iter->json_parser == NULL);
535 iter->json_parser = json_parser_init(input);
540 db_dict_value_iter_object_next(struct db_dict_value_iter *iter,
546 if (iter->json_parser != NULL)
547 return db_dict_value_iter_json_next(iter, iter->tmpstr, key_r, value_r);
548 if (iter->object_idx == array_count(iter->objects))
551 keyp = array_idx(iter->objects, iter->object_idx);
552 key = db_dict_iter_find_key(iter, (*keyp)->name);
559 db_dict_value_iter_json_init(iter, key->value);
560 return db_dict_value_iter_json_next(iter, iter->tmpstr, key_r, value_r);
570 struct db_dict_value_iter *iter = context;
579 key = db_dict_iter_find_key(iter, data);
591 db_dict_value_iter_json_init(iter, key->value);
594 while (db_dict_value_iter_json_next(iter, tmpstr, &name, &value)) {
600 (void)json_parser_deinit(&iter->json_parser, &iter->error);
606 bool db_dict_value_iter_next(struct db_dict_value_iter *iter,
616 if (iter->field_idx == array_count(iter->fields))
617 return db_dict_value_iter_object_next(iter, key_r, value_r);
618 field = array_idx(iter->fields, iter->field_idx++);
620 str_truncate(iter->tmpstr, 0);
621 if (var_expand_with_funcs(iter->tmpstr, field->value,
622 iter->var_expand_table, var_funcs_table,
623 iter, &error) <= 0) {
624 iter->error = p_strdup_printf(iter->pool,
630 *value_r = str_c(iter->tmpstr);
637 struct db_dict_value_iter *iter = *_iter;
641 *error_r = iter->error;
642 if (iter->json_parser != NULL) {
643 if (json_parser_deinit(&iter->json_parser, &iter->error) < 0 &&
645 *error_r = iter->error;
648 pool_unref(&iter->pool);