1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2005,2008 Oracle. All rights reserved. 5 * 6 * $Id: query_main.c,v 1.13 2008/01/08 20:58:23 bostic Exp $ 7 */ 8 9#include "csv.h" 10#include "csv_local.h" 11#include "csv_extern.h" 12 13static int usage(void); 14 15/* 16 * Globals 17 */ 18DB_ENV *dbenv; /* Database environment */ 19DB *db; /* Primary database */ 20int verbose; /* Program verbosity */ 21char *progname; /* Program name */ 22 23int 24main(int argc, char *argv[]) 25{ 26 int ch, done, ret, t_ret; 27 char **clist, **clp, *home; 28 29 /* Initialize globals. */ 30 dbenv = NULL; 31 db = NULL; 32 if ((progname = strrchr(argv[0], '/')) == NULL) 33 progname = argv[0]; 34 else 35 ++progname; 36 verbose = 0; 37 38 /* Initialize arguments. */ 39 home = NULL; 40 ret = 0; 41 42 /* Allocate enough room for command-list arguments. */ 43 if ((clp = clist = 44 (char **)calloc((size_t)argc + 1, sizeof(char *))) == NULL) { 45 fprintf(stderr, "%s: %s\n", progname, strerror(ENOMEM)); 46 return (EXIT_FAILURE); 47 } 48 49 /* Process arguments. */ 50 while ((ch = getopt(argc, argv, "c:h:v")) != EOF) 51 switch (ch) { 52 case 'c': 53 *clp++ = optarg; 54 break; 55 case 'h': 56 home = optarg; 57 break; 58 case 'v': 59 ++verbose; 60 break; 61 case '?': 62 default: 63 return (usage()); 64 } 65 argc -= optind; 66 argv += optind; 67 68 if (*argv != NULL) 69 return (usage()); 70 71 /* Create or join the database environment. */ 72 if (csv_env_open(home, 1) != 0) 73 return (EXIT_FAILURE); 74 75 /* Handle the queries. */ 76 if (clp == clist) 77 ret = query_interactive(); 78 else 79 for (clp = clist, done = 0; *clp != NULL && !done; ++clp) 80 if ((ret = query(*clp, &done)) != 0) 81 break; 82 83 /* Close the database environment. */ 84 if ((t_ret = csv_env_close()) != 0 && ret == 0) 85 ret = t_ret; 86 87 return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE); 88} 89 90/* 91 * usage -- 92 * Program usage message. 93 */ 94static int 95usage(void) 96{ 97 (void)fprintf(stderr, "usage: %s [-v] [-c cmd] [-h home]\n", progname); 98 return (EXIT_FAILURE); 99} 100