Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "wet.h"
- #include <stdio.h>
- #include <libpq-fe.h>
- // ===================== HELPER FUNCTIONS =============================
- int cmpDates (char* date1, char* date2) {
- //returns -1 if date1 < date2, +1 if date1>date2, 0 if date1==date2.
- char yr1[4], yr2[4];
- char mon1[2], mon2[2];
- int i;
- for (i=0; i<4;i++ ) {
- yr1[i] = date1[i];
- yr2[i] = date2[i];
- }
- if (atoi(yr1) < atoi(yr2))
- return -1;
- else if (atoi(yr1) > atoi(yr2))
- return 1;
- //else if years are equal
- for (i=0; i<2;i++ ) {
- mon1[i] = date1[i+5];
- mon2[i] = date2[i+5];
- }
- if (atoi(mon1) < atoi(mon2))
- return -1;
- else if (atoi(mon1) > atoi(mon2))
- return 1;
- //else if months are equal
- for (i=0; i<2;i++ ) {
- mon1[i] = date1[i+8];
- mon2[i] = date2[i+8];
- }
- if (atoi(mon1) < atoi(mon2))
- return -1;
- else if (atoi(mon1) > atoi(mon2))
- return 1;
- else
- return 0;
- }
- void checkQuery(PGresult* res)
- {
- if(!res || PQresultStatus(res) != PGRES_TUPLES_OK){
- fprintf(stdout, "Error executing query: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- exit(1);
- }
- }
- void checkCmd(PGresult* res) {
- if(!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
- fprintf(stdout, "Error executing query: %s\n",
- PQresultErrorMessage(res));
- PQclear(res);
- return;
- }
- }
- void checkConn(PGconn* conn) {
- if (!conn || PQstatus(conn) == CONNECTION_BAD) {
- fprintf(stdout, "Connection to server failed: %s\n",
- PQerrorMessage(conn));
- PQfinish(conn);
- return;
- }
- }
- // ============================ MAIN FUNCTIONS ================================
- void * addUser(int id, char * name)
- {
- char cmd[200];
- PGresult *res;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM users
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)!=0){
- printf (ILL_PARAMS);
- return NULL;
- }
- cmd[0] = '\0';
- sprintf(cmd, "INSERT INTO users VALUES %d %s", id, name);
- res = PQexec(conn, cmd);
- checkCmd(res);
- PQfinish(conn);
- return NULL;
- }
- void * addEditor(int id)
- {
- char cmd[200];
- PGresult *res;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM users
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0){
- printf (ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM editor
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)!=0){
- printf (ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "INSERT INTO editor VALUES %d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- PQfinish(conn);
- return NULL;
- }
- void * addAdmin(int id)
- {
- char cmd[200];
- PGresult *res;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM users
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0){
- printf (ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM admin
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)!=0){
- printf (ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM editor
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0){
- sprintf(cmd, "INSERT INTO editor VALUES %d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- }
- sprintf(cmd, "INSERT INTO admin VALUES %d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- PQfinish(conn);
- return NULL;
- }
- void * addLink(char * fromTitle, char * toTitle)
- {
- char cmd[200];
- PGresult *res1, *res2;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM article
- WHERE title=%s", fromTitle);
- res1 = PQexec(conn, cmd);
- checkQuery(res1);
- sprintf(cmd, "SELECT * FROM article
- WHERE title=%s", toTitle);
- res2 = PQexec(conn, cmd);
- checkQuery(res2);
- if ((PQntuples(res1)==0) || (PQntuples(res2)==0)) {
- printf(ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "INSERT INTO link VALUES %s %s", fromTitle, toTitle);
- res1 = PQexec(conn, cmd);
- checkCmd(res1);
- PQfinish(conn);
- return NULL;
- }
- void * addViewed(int id, char * title, char * date)
- {
- char cmd[200];
- PGresult *res1, *res2;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM users
- WHERE id=%d", id);
- res1 = PQexec(conn, cmd);
- checkQuery(res1);
- sprintf(cmd, "SELECT * FROM version
- WHERE title=%s", title);
- res2 = PQexec(conn, cmd);
- checkQuery(res2);
- if ((PQntuples(res1)==0) || (PQntuples(res2)==0)) {
- printf(ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "INSERT INTO viewed VALUES %d %s DATE(%s)", id, title, date);
- res1 = PQexec(conn, cmd);
- checkCmd(res1);
- PQfinish(conn);
- return NULL;
- }
- void * addVersion(int id, char * date, char * title, char * content)
- {
- char cmd[200];
- PGresult *res;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM editor WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0) {
- printf(ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM article WHERE title=%s", title);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0) {
- sprintf(cmd, "INSERT INTO article VALUES %s ", title);
- res = PQexec(conn, cmd);
- checkCmd(res);
- }
- sprintf(cmd, "INSERT INTO version VALUES %d DATE (%s) %s %s", id, date, title, content);
- res = PQexec(conn, cmd);
- checkCmd(res);
- PQfinish(conn);
- return NULL;
- }
- void * addAccepted(int eid, int aid, char * title, char * vdate, char * adate)
- {
- char cmd[200];
- PGresult *res1, *res2;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM admin
- WHERE id=%d", aid);
- res1 = PQexec(conn, cmd);
- checkQuery(res1);
- sprintf(cmd, "SELECT * FROM editor
- WHERE id=%d", eid);
- res2 = PQexec(conn, cmd);
- if(!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK){
- fprintf(stdout, "Error executing query: %s\n",
- PQresultErrorMessage(res2));
- PQclear(res2);
- return NULL;
- }
- if ((PQntuples(res1)==0) || (PQntuples(res2)==0)) {
- printf(ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM version
- WHERE title=%s AND date= %s", title, vdate);
- res1 = PQexec(conn, cmd);
- checkQuery(res1);
- if ((PQntuples(res1)==0) || (cmpDates(adate,vdate)==-1)) {
- printf(ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "INSERT INTO accepted VALUES %d, %d, %s, DATE(%s), DATE(%s)",eid, aid, title,vdate,adate);
- res1 = PQexec(conn, cmd);
- checkCmd(res1);
- PQfinish(conn);
- return NULL;
- }
- void * removeUser(int id, int opt, int newId)
- {
- char cmd[200];
- PGresult *res,*res1,*res2;
- PGconn *conn;
- conn = PQconnectdb("host=pgsql.cs.technion.ac.il" "dbname=USERNAME user=USERNAME password=PASSWORD");
- checkConn(conn);
- sprintf(cmd, "SELECT * FROM users
- WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkQuery(res);
- if (PQntuples(res)==0){
- printf (ILL_PARAMS);
- return NULL;
- }
- sprintf(cmd, "SELECT * FROM viewed
- WHERE id=%d", id);
- res1 = PQexec(conn, cmd);
- checkCmd(res1);
- sprintf(cmd, "SELECT * FROM accepted
- WHERE aid=%d", id);
- res2 = PQexec(conn, cmd);
- checkCmd(res2);
- if ( (PQntuples(res1)!=0) && (PQntuples(res2)!=0) && (opt==REJECT)) {
- printf(ILL_PARAMS);
- return NULL;
- }
- switch (opt) {
- case DELETE:
- sprintf(cmd, "DELETE FROM viewed WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- sprintf(cmd, "DELETE FROM accepted WHERE aid=%d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- sprintf(cmd, "DELETE FROM accepted WHERE eid=%d",id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- sprintf(cmd,"DELETE FROM viewed WHERE title, date IN
- SELECT title, date FROM viewed
- WHERE date < ALL(SELECT adate FROM accepted WHERE accepted.title=viewed.title)");
- res = PQexec(conn,cmd);
- checkCmd(res);
- break;
- case CHANGE:
- sprintf(cmd, "SELECT * FROM editor WHERE id=%d", id);
- res1 = PQexec(conn, cmd);
- checkQuery (res1);
- if (PQntuples(res1) >0) {
- sprintf(cmd, "SELECT * FROM editor WHERE id=%d", newId);
- res2 = PQexec(conn, cmd);
- checkQuery (res2);
- if (PQntuples(res2)==0) {
- printf(ILL_PARAMS);
- return NULL;
- }
- }
- sprintf(cmd, "SELECT * FROM accepted WHERE aid=%d", id);
- res1 = PQexec(conn, cmd);
- checkQuery (res1);
- if (PQntuples(res1) >0) {
- sprintf(cmd, "SELECT * FROM admin WHERE id=%d", newId);
- res2 = PQexec(conn, cmd);
- checkQuery (res2);
- if (PQntuples(res2)==0) {
- printf(ILL_PARAMS);
- return NULL;
- }
- }
- sprintf(cmd, "UPDATE version SET id=%d WHERE id=%d", newId, id);
- res = PQexec(conn, cmd);
- checkCmd (res);
- sprintf(cmd, "UPDATE accepted SET eid=%d WHERE eid=%d", newId, id);
- res = PQexec(conn, cmd);
- checkCmd (res);
- sprintf(cmd, "UPDATE accepted SET aid=%d WHERE aid=%d", newId, id);
- res = PQexec(conn, cmd);
- checkCmd (res);
- break;
- default: printf("error! default case reached in removeUSer()!.\n");
- exit(1);
- break;
- }
- sprintf(cmd, "DELETE FROM users WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- sprintf(cmd, "DELETE FROM editor WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- sprintf(cmd, "DELETE FROM admin WHERE id=%d", id);
- res = PQexec(conn, cmd);
- checkCmd(res);
- }
- int main()
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement