libdrizzle Developer Documentation

examples/simple.c
Go to the documentation of this file.
00001 /*
00002  * Drizzle Client & Protocol Library
00003  *
00004  * Copyright (C) 2008 Eric Day (eday@oddments.org)
00005  * All rights reserved.
00006  *
00007  * Use and distribution licensed under the BSD license.  See
00008  * the COPYING file in this directory for full text.
00009  */
00010 
00011 #include <stdio.h>
00012 #include <stdlib.h>
00013 #include <string.h>
00014 #include <unistd.h>
00015 
00016 #include <libdrizzle/drizzle_client.h>
00017 
00018 int main(int argc, char *argv[])
00019 {
00020   int c;
00021   const char *db= "INFORMATION_SCHEMA";
00022   const char *host= NULL;
00023   bool mysql= false;
00024   in_port_t port= 0;
00025   const char *query= "SELECT TABLE_SCHEMA,TABLE_NAME FROM TABLES";
00026   drizzle_verbose_t verbose= DRIZZLE_VERBOSE_NEVER;
00027   drizzle_st drizzle;
00028   drizzle_con_st con;
00029   drizzle_result_st result;
00030   drizzle_return_t ret;
00031   int x;
00032   char **row;
00033 
00034   while ((c = getopt(argc, argv, "d:h:mp:q:v")) != -1)
00035   {
00036     switch(c)
00037     {
00038     case 'd':
00039       db= optarg;
00040       break;
00041 
00042     case 'h':
00043       host= optarg;
00044       break;
00045 
00046     case 'm':
00047       mysql= true;
00048       break;
00049 
00050     case 'p':
00051       port= (in_port_t)atoi(optarg);
00052       break;
00053 
00054     case 'q':
00055       query= optarg;
00056       break;
00057 
00058     case 'v':
00059       verbose++;
00060       break;
00061 
00062     default:
00063       printf("usage: %s [-d <db>] [-h <host>] [-m] [-p <port>] [-q <query>] "
00064              "[-v]\n", argv[0]);
00065       printf("\t-d <db>    - Database to use for query\n");
00066       printf("\t-h <host>  - Host to listen on\n");
00067       printf("\t-m         - Use the MySQL protocol\n");
00068       printf("\t-p <port>  - Port to listen on\n");
00069       printf("\t-q <query> - Query to run\n");
00070       printf("\t-v         - Increase verbosity level\n");
00071       return 1;
00072     }
00073   }
00074 
00075   if (drizzle_create(&drizzle) == NULL)
00076   {
00077     printf("drizzle_create:NULL\n");
00078     return 1;
00079   }
00080 
00081   drizzle_set_verbose(&drizzle, verbose);
00082 
00083   if (drizzle_con_create(&drizzle, &con) == NULL)
00084   {
00085     printf("drizzle_con_create:NULL\n");
00086     return 1;
00087   }
00088 
00089   if (mysql)
00090     drizzle_con_add_options(&con, DRIZZLE_CON_MYSQL);
00091 
00092   drizzle_con_set_tcp(&con, host, port);
00093   drizzle_con_set_db(&con, db);
00094 
00095   (void)drizzle_query_str(&con, &result, query, &ret);
00096   if (ret != DRIZZLE_RETURN_OK)
00097   {
00098     printf("drizzle_query:%s\n", drizzle_con_error(&con));
00099     return 1;
00100   }
00101 
00102   ret= drizzle_result_buffer(&result);
00103   if (ret != DRIZZLE_RETURN_OK)
00104   {
00105     printf("drizzle_result_buffer:%s\n", drizzle_con_error(&con));
00106     return 1;
00107   }
00108 
00109   while ((row= (char **)drizzle_row_next(&result)) != NULL)
00110   {
00111     for (x= 0; x < drizzle_result_column_count(&result); x++)
00112       printf("%s%s", x == 0 ? "" : ":", row[x] == NULL ? "NULL" : row[x]);
00113     printf("\n");
00114   }
00115 
00116   drizzle_result_free(&result);
00117   drizzle_con_free(&con);
00118   drizzle_free(&drizzle);
00119 
00120   return 0;
00121 }