kore

An easy to use, scalable and secure web application framework for writing web APIs in C.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

pgsql-sync.c (2572B)



      1 /*
      2  * Copyright (c) 2015 Joris Vink <joris@coders.se>
      3  *
      4  * Permission to use, copy, modify, and distribute this software for any
      5  * purpose with or without fee is hereby granted, provided that the above
      6  * copyright notice and this permission notice appear in all copies.
      7  *
      8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15  */
     16 
     17 /*
     18  * This example demonstrates how to use synchronous PGSQL queries
     19  * with Kore. For an asynchronous example see pgsql/ under examples/.
     20  *
     21  * This example does the same as the asynchronous one, select all entries
     22  * from a table called "coders".
     23  */
     24 
     25 #include <kore/kore.h>
     26 #include <kore/http.h>
     27 #include <kore/pgsql.h>
     28 
     29 int			init(int);
     30 int			page(struct http_request *);
     31 
     32 /* Called when our module is loaded (see config) */
     33 int
     34 init(int state)
     35 {
     36 	/* Register our database. */
     37 	kore_pgsql_register("db", "host=/tmp dbname=test");
     38 
     39 	return (KORE_RESULT_OK);
     40 }
     41 
     42 /* Page handler entry point (see config) */
     43 int
     44 page(struct http_request *req)
     45 {
     46 	struct kore_pgsql	sql;
     47 	char			*name;
     48 	int			rows, i;
     49 
     50 	req->status = HTTP_STATUS_INTERNAL_ERROR;
     51 
     52 	kore_pgsql_init(&sql);
     53 
     54 	/*
     55 	 * Initialise our kore_pgsql data structure with the database name
     56 	 * we want to connect to (note that we registered this earlier with
     57 	 * kore_pgsql_register()). We also say we will perform a synchronous
     58 	 * query (KORE_PGSQL_SYNC).
     59 	 */
     60 	if (!kore_pgsql_setup(&sql, "db", KORE_PGSQL_SYNC)) {
     61 		kore_pgsql_logerror(&sql);
     62 		goto out;
     63 	}
     64 
     65 	/*
     66 	 * Now we can fire off the query, once it returns we either have
     67 	 * a result on which we can operate or an error occurred.
     68 	 */
     69 	if (!kore_pgsql_query(&sql, "SELECT * FROM coders")) {
     70 		kore_pgsql_logerror(&sql);
     71 		goto out;
     72 	}
     73 
     74 	/*
     75 	 * Iterate over the result and dump it to somewhere.
     76 	 */
     77 	rows = kore_pgsql_ntuples(&sql);
     78 	for (i = 0; i < rows; i++) {
     79 		name = kore_pgsql_getvalue(&sql, i, 0);
     80 		kore_log(LOG_NOTICE, "name: '%s'", name);
     81 	}
     82 
     83 	/* All good. */
     84 	req->status = HTTP_STATUS_OK;
     85 
     86 out:
     87 	http_response(req, req->status, NULL, 0);
     88 
     89 	/* Don't forget to cleanup the kore_pgsql data structure. */
     90 	kore_pgsql_cleanup(&sql);
     91 
     92 	return (KORE_RESULT_OK);
     93 }