Lines Matching refs:result

80 static void result_finish(struct pgsql_result *result);
82 transaction_update_callback(struct sql_result *result,
345 struct pgsql_result *result = (struct pgsql_result *)_result;
348 i_assert(!result->api.callback);
349 i_assert(db->cur_result == result);
350 i_assert(result->callback == NULL);
356 success = result->pgres != NULL && !db->fatal_error;
357 if (result->pgres != NULL) {
358 PQclear(result->pgres);
359 result->pgres = NULL;
370 if (array_is_created(&result->binary_values)) {
373 array_foreach_modifiable(&result->binary_values, value)
375 array_free(&result->binary_values);
378 i_free(result->fields);
379 i_free(result->values);
380 i_free(result);
383 static void result_finish(struct pgsql_result *result)
385 struct pgsql_db *db = (struct pgsql_db *)result->api.db;
389 timeout_remove(&result->to);
394 if (PQstatus(db->pg) == CONNECTION_BAD || result->pgres == NULL ||
395 PQresultStatus(result->pgres) == PGRES_FATAL_ERROR)
399 result->api.failed = TRUE;
400 result->api.failed_try_retry = TRUE;
402 result->api.callback = TRUE;
404 result->callback(&result->api, result->context);
406 result->api.callback = FALSE;
408 free_result = db->sync_result != &result->api;
412 i_assert(!free_result || result->api.refcount > 0);
413 result->callback = NULL;
415 sql_result_unref(&result->api);
418 static void get_result(struct pgsql_result *result)
420 struct pgsql_db *db = (struct pgsql_db *)result->api.db;
425 result_finish(result);
431 get_result, result);
436 result->pgres = PQgetResult(db->pg);
437 result_finish(result);
440 static void flush_callback(struct pgsql_result *result)
442 struct pgsql_db *db = (struct pgsql_db *)result->api.db;
450 flush_callback, result);
456 result_finish(result);
459 get_result(result);
463 static void query_timeout(struct pgsql_result *result)
465 struct pgsql_db *db = (struct pgsql_db *)result->api.db;
470 result->timeout = TRUE;
471 result_finish(result);
474 static void do_query(struct pgsql_result *result, const char *query)
476 struct pgsql_db *db = (struct pgsql_db *)result->api.db;
484 db->cur_result = result;
485 result->to = timeout_add(SQL_QUERY_TIMEOUT_SECS * 1000,
486 query_timeout, result);
491 result_finish(result);
498 flush_callback, result);
501 get_result(result);
542 struct pgsql_result *result;
544 result = i_new(struct pgsql_result, 1);
545 result->api = driver_pgsql_result;
546 result->api.db = db;
547 result->api.refcount = 1;
548 result->callback = exec_callback;
549 do_query(result, query);
555 struct pgsql_result *result;
557 result = i_new(struct pgsql_result, 1);
558 result->api = driver_pgsql_result;
559 result->api.db = db;
560 result->api.refcount = 1;
561 result->callback = callback;
562 result->context = context;
563 do_query(result, query);
566 static void pgsql_query_s_callback(struct sql_result *result, void *context)
570 db->sync_result = result;
609 struct sql_result *result;
630 result = db->sync_result;
631 if (result == &sql_not_connected_result) {
635 } else if (result == NULL) {
636 result = &sql_not_connected_result;
637 result->refcount++;
641 return result;
648 struct sql_result *result;
651 result = driver_pgsql_sync_query(db, query);
653 return result;
658 struct pgsql_result *result = (struct pgsql_result *)_result;
661 if (result->rows != 0) {
663 if (++result->rownum < result->rows)
669 PQclear(result->pgres);
670 result->pgres = PQgetResult(db->pg);
671 if (result->pgres == NULL)
675 if (result->pgres == NULL) {
680 switch (PQresultStatus(result->pgres)) {
685 result->rows = PQntuples(result->pgres);
686 return result->rows > 0 ? 1 : 0;
700 static void driver_pgsql_result_fetch_fields(struct pgsql_result *result)
704 if (result->fields != NULL)
708 result->fields_count = PQnfields(result->pgres);
709 result->fields = i_new(const char *, result->fields_count);
710 for (i = 0; i < result->fields_count; i++)
711 result->fields[i] = PQfname(result->pgres, i);
717 struct pgsql_result *result = (struct pgsql_result *)_result;
719 driver_pgsql_result_fetch_fields(result);
720 return result->fields_count;
726 struct pgsql_result *result = (struct pgsql_result *)_result;
728 driver_pgsql_result_fetch_fields(result);
729 i_assert(idx < result->fields_count);
730 return result->fields[idx];
736 struct pgsql_result *result = (struct pgsql_result *)_result;
739 driver_pgsql_result_fetch_fields(result);
740 for (i = 0; i < result->fields_count; i++) {
741 if (strcmp(result->fields[i], field_name) == 0)
751 struct pgsql_result *result = (struct pgsql_result *)_result;
753 if (PQgetisnull(result->pgres, result->rownum, idx) != 0)
756 return PQgetvalue(result->pgres, result->rownum, idx);
763 struct pgsql_result *result = (struct pgsql_result *)_result;
767 if (PQgetisnull(result->pgres, result->rownum, idx) != 0) {
772 value = PQgetvalue(result->pgres, result->rownum, idx);
774 if (!array_is_created(&result->binary_values))
775 i_array_init(&result->binary_values, idx + 1);
777 binary_value = array_idx_modifiable(&result->binary_values, idx);
789 driver_pgsql_result_find_field_value(struct sql_result *result,
794 idx = driver_pgsql_result_find_field(result, field_name);
797 return driver_pgsql_result_get_field_value(result, idx);
803 struct pgsql_result *result = (struct pgsql_result *)_result;
806 if (result->values == NULL) {
807 driver_pgsql_result_fetch_fields(result);
808 result->values = i_new(const char *, result->fields_count);
812 for (i = 0; i < result->fields_count; i++) {
813 result->values[i] =
817 return result->values;
822 struct pgsql_result *result = (struct pgsql_result *)_result;
829 if (result->timeout) {
831 } else if (result->pgres == NULL) {
835 msg = PQresultErrorMessage(result->pgres);
868 transaction_commit_callback(struct sql_result *result,
874 if (sql_result_next_row(result) < 0) {
875 commit_result.error = sql_result_get_error(result);
876 commit_result.error_type = sql_result_get_error_type(result);
914 struct sql_result *result)
919 commit_result.error = sql_result_get_error(result);
920 commit_result.error_type = sql_result_get_error_type(result);
926 transaction_begin_callback(struct sql_result *result,
929 struct pgsql_db *db = (struct pgsql_db *)result->db;
931 i_assert(result->db == ctx->ctx.db);
933 if (sql_result_next_row(result) < 0) {
934 transaction_commit_error_callback(ctx, result);
944 transaction_update_callback(struct sql_result *result,
949 struct pgsql_db *db = (struct pgsql_db *)result->db;
951 if (sql_result_next_row(result) < 0) {
952 transaction_commit_error_callback(ctx, result);
958 struct pgsql_result *pg_result = (struct pgsql_result *)result;
970 transaction_trans_query_callback(struct sql_result *result,
977 if (sql_result_next_row(result) < 0) {
978 transaction_commit_error_callback(ctx, result);
984 struct pgsql_result *pg_result = (struct pgsql_result *)result;
1001 struct sql_commit_result result;
1003 i_zero(&result);
1009 result.error = ctx->error;
1010 callback(&result, context);
1025 struct sql_result *result, const char *query)
1029 sql_result_get_error(result), query);
1030 sql_result_unref(result);
1037 struct sql_result *result;
1040 result = driver_pgsql_sync_query(db, "BEGIN");
1041 if (sql_result_next_row(result) < 0) {
1042 commit_multi_fail(ctx, result, "BEGIN");
1045 sql_result_unref(result);
1049 result = driver_pgsql_sync_query(db, query->query);
1050 if (sql_result_next_row(result) < 0) {
1051 commit_multi_fail(ctx, result, query->query);
1056 (struct pgsql_result *)result;
1062 sql_result_unref(result);
1076 struct sql_result *result;
1081 result = sql_query_s(_ctx->db, single_query->query);
1085 result = driver_pgsql_transaction_commit_multi(ctx);
1092 } else if (result != NULL) {
1093 if (sql_result_next_row(result) < 0)
1094 *error_r = sql_result_get_error(result);
1098 (struct pgsql_result *)result;
1105 if (result != NULL)
1106 sql_result_unref(result);