feat: update postgres
This commit is contained in:
parent
19eaeb08db
commit
bf9d74db8e
1 changed files with 88 additions and 20 deletions
106
postgres.c
106
postgres.c
|
@ -10,12 +10,14 @@
|
||||||
|
|
||||||
static PGconn *conn;
|
static PGconn *conn;
|
||||||
|
|
||||||
int pg_connect(char *args) {
|
int pg_connect(char **args) {
|
||||||
if (args == NULL) {
|
if (args[2] == NULL) {
|
||||||
fprintf(stderr, "pg connect: need dbname\n");
|
fprintf(stderr, "pg connect: need dbname\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
conn = PQsetdbLogin("localhost", "5432", NULL, NULL, args, "postgres", NULL);
|
/* Make a connection to the database */
|
||||||
|
conn = PQsetdbLogin("localhost", "5432", NULL, NULL, args[2], "postgres", NULL);
|
||||||
|
/* Check to see that the backend connection was successfully made */
|
||||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
if (PQstatus(conn) == CONNECTION_BAD) {
|
||||||
fprintf(stderr, "pg connect: Connection to database failed: %s",
|
fprintf(stderr, "pg connect: Connection to database failed: %s",
|
||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
|
@ -28,14 +30,17 @@ int pg_list() {
|
||||||
fprintf(stderr, "pg list: not connected to database\n");
|
fprintf(stderr, "pg list: not connected to database\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* Declare a PGresult pointer */
|
||||||
PGresult *res =
|
PGresult *res =
|
||||||
PQexec(conn, "SELECT table_name FROM information_schema.tables WHERE "
|
PQexec(conn, "SELECT table_name FROM information_schema.tables WHERE "
|
||||||
"table_schema = 'public'");
|
"table_schema = 'public'");
|
||||||
|
/* Check to see that the result is successful */
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||||
fprintf(stderr, "pg list: No data retrieved\n");
|
fprintf(stderr, "pg list: No data retrieved\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* print out the rows */
|
||||||
int rows = PQntuples(res);
|
int rows = PQntuples(res);
|
||||||
for (int i = 0; i < rows; i++) {
|
for (int i = 0; i < rows; i++) {
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
|
@ -46,34 +51,36 @@ int pg_list() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pg_show(char *args) {
|
int pg_show(char **args) {
|
||||||
if (conn == NULL) {
|
if (conn == NULL) {
|
||||||
fprintf(stderr, "pg show: not connected to database\n");
|
fprintf(stderr, "pg show: not connected to database\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (args == NULL) {
|
if (args[2] == NULL) {
|
||||||
fprintf(stderr, "pg show: need table name\n");
|
fprintf(stderr, \
|
||||||
|
"pg show: need table name\n\
|
||||||
|
eg: pg show table_name\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
char *query = malloc(100);
|
|
||||||
sprintf(query, "SELECT * FROM %s", args);
|
char query[LINE_BUF_SIZE];
|
||||||
|
sprintf(query, "SELECT * FROM %s", args[2]);
|
||||||
PGresult *res = PQexec(conn, query);
|
PGresult *res = PQexec(conn, query);
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||||
fprintf(stderr, "pg show: No data retrieved\n");
|
fprintf(stderr, "pg show: No data retrieved\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/*neatly print the entire table*/
|
||||||
int rows = PQntuples(res);
|
int rows = PQntuples(res);
|
||||||
int cols = PQnfields(res);
|
int cols = PQnfields(res);
|
||||||
|
|
||||||
//print header
|
|
||||||
for (int i = 0; i < cols; i++) {
|
for (int i = 0; i < cols; i++) {
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
printf(", ");
|
printf(", ");
|
||||||
printf("%s ", PQfname(res, i));
|
printf("%s ", PQfname(res, i));
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
//print whole table
|
|
||||||
for (int i = 0; i < rows; i++) {
|
for (int i = 0; i < rows; i++) {
|
||||||
for (int j = 0; j < cols; j++) {
|
for (int j = 0; j < cols; j++) {
|
||||||
if (j != 0)
|
if (j != 0)
|
||||||
|
@ -82,10 +89,49 @@ int pg_show(char *args) {
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pg_insert(char **args) {
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pg_run(char **args) {
|
||||||
|
if (conn == NULL) {
|
||||||
|
fprintf(stderr, "pg run: not connected to database\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (args[2] == NULL) {
|
||||||
|
fprintf(stderr, \
|
||||||
|
"pg run: need command\n\
|
||||||
|
eg: pg run \"SELECT * FROM table_name\"\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
PGresult *res = PQexec(conn, args[2]);
|
||||||
|
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
||||||
|
fprintf(stderr, "pg run: No data retrieved\n");
|
||||||
|
PQclear(res);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/*neatly print the result*/
|
||||||
|
int rows = PQntuples(res);
|
||||||
|
int cols = PQnfields(res);
|
||||||
|
|
||||||
|
for (int i = 0; i < cols; i++) {
|
||||||
|
if (i != 0)
|
||||||
|
printf(", ");
|
||||||
|
printf("%s ", PQfname(res, i));
|
||||||
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
free(query);
|
for (int i = 0; i < rows; i++) {
|
||||||
|
for (int j = 0; j < cols; j++) {
|
||||||
|
if (j != 0)
|
||||||
|
printf(", ");
|
||||||
|
printf("%s ", PQgetvalue(res, i, j));
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,21 +140,43 @@ int dish_pg(char **args) {
|
||||||
fprintf(stderr, "pg: need arguments\n\
|
fprintf(stderr, "pg: need arguments\n\
|
||||||
possible arguments:\n\
|
possible arguments:\n\
|
||||||
connect: connect to database\n\
|
connect: connect to database\n\
|
||||||
|
disconnect: disconnect from database\n\
|
||||||
list: list all tables\n\
|
list: list all tables\n\
|
||||||
show: show all contents of a table\n");
|
show: show all contents of a table\n\
|
||||||
|
insert: insert into a table\n\
|
||||||
|
delete: delete from a table\n\
|
||||||
|
run: run a custom command\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (strcmp(args[1], "connect") == 0) {
|
if (strcmp(args[1], "connect") == 0) {
|
||||||
pg_connect(args[2]);
|
return pg_connect(args);
|
||||||
}
|
|
||||||
if (strcmp(args[1], "list") == 0) {
|
|
||||||
pg_list();
|
|
||||||
}
|
|
||||||
if (strcmp(args[1], "show") == 0) {
|
|
||||||
pg_show(args[2]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (strcmp(args[1], "disconnect") == 0) {
|
||||||
|
if (conn != NULL) {
|
||||||
|
PQfinish(conn);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "pg disconnect: not connected to database\n");
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
} else if (strcmp(args[1], "list") == 0) {
|
||||||
|
return pg_list();
|
||||||
|
|
||||||
|
} else if (strcmp(args[1], "show") == 0) {
|
||||||
|
return pg_show(args);
|
||||||
|
|
||||||
|
} else if (strcmp(args[1], "insert") == 0) {
|
||||||
|
return pg_insert(args);
|
||||||
|
|
||||||
|
} else if(strcmp(args[1],"run")==0)
|
||||||
|
{
|
||||||
|
return pg_run(args);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "pg: invalid argument\n");
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue