📄 pg_encode.c
字号:
#include <erl_driver.h>#include <libpq-fe.h>#include <ei.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include "pg_encode.h"void encode_ok(ei_x_buff* x){ const char* k_ok = "ok"; ei_x_encode_atom(x, k_ok);}void encode_error(ei_x_buff* x, PGconn* conn){ const char* k_error = "error"; ei_x_encode_tuple_header(x, 2); ei_x_encode_atom(x, k_error); ei_x_encode_string(x, PQerrorMessage(conn));}void encode_result(ei_x_buff* x, PGresult* res, PGconn* conn){ int row, n_rows, col, n_cols; switch (PQresultStatus(res)) { case PGRES_TUPLES_OK: n_rows = PQntuples(res); n_cols = PQnfields(res); ei_x_encode_tuple_header(x, 2); encode_ok(x); ei_x_encode_list_header(x, n_rows+1); ei_x_encode_list_header(x, n_cols); for (col = 0; col < n_cols; ++col) { ei_x_encode_string(x, PQfname(res, col)); } ei_x_encode_empty_list(x); for (row = 0; row < n_rows; ++row) { ei_x_encode_list_header(x, n_cols); for (col = 0; col < n_cols; ++col) { ei_x_encode_string(x, PQgetvalue(res, row, col)); } ei_x_encode_empty_list(x); } ei_x_encode_empty_list(x); break; case PGRES_COMMAND_OK: ei_x_encode_tuple_header(x, 2); encode_ok(x); ei_x_encode_string(x, PQcmdTuples(res)); break; default: encode_error(x, conn); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -