added man pages for utils.

lots of gmdb2 work.
added statistics collection.
This commit is contained in:
brianb
2003-01-05 14:57:50 +00:00
parent cc362c42e9
commit 320f03c401
23 changed files with 1239 additions and 123 deletions

View File

@@ -1,4 +1,4 @@
bin_PROGRAMS = mdb-export mdb-array mdb-schema mdb-tables mdb-parsecsv mdb-header mdb-sql mdb-ver prtable prcat prdata prkkd prdump prole updrow
bin_PROGRAMS = mdb-export mdb-array mdb-schema mdb-tables mdb-parsecsv mdb-header mdb-sql mdb-ver prtable prcat prdata prkkd prdump prole updrow prindex
LIBS = $(GLIB_LIBS) $(READLINE_LIBS) @LEXLIB@
INCLUDES = -I$(top_srcdir)/include $(GLIB_CFLAGS)
LDADD = ../libmdb/libmdb.la

View File

@@ -24,8 +24,16 @@
#include <string.h>
#include "mdbsql.h"
void dump_results(MdbSQL *sql);
void dump_results_pp(MdbSQL *sql);
#if SQL
int headers = 1;
int footers = 1;
int pretty_print = 1;
char *delimiter;
#ifndef HAVE_READLINE
char *readline(char *prompt)
{
@@ -65,6 +73,166 @@ int parse(MdbSQL *sql, char *buf)
}
}
void
do_set_cmd(MdbSQL *sql, char *s)
{
char *level1, *level2;
level1 = strtok(s, " \t\n");
if (!strcmp(level1,"stats")) {
level2 = strtok(NULL, " \t");
if (!strcmp(level2,"on")) {
mdb_stats_on(sql->mdb);
} else if (!strcmp(level2,"off")) {
mdb_stats_off(sql->mdb);
mdb_dump_stats(sql->mdb);
} else {
printf("Unknown stats option %s\n", level2);
}
} else {
printf("Unknown set command %s\n", level1);
}
}
void
run_query(MdbSQL *sql, char *mybuf)
{
if (!parse(sql, mybuf) && sql->cur_table) {
mdbsql_bind_all(sql);
if (pretty_print)
dump_results_pp(sql);
else
dump_results(sql);
}
}
void print_value(char *v, int sz, int first)
{
int i;
int vlen;
if (first) {
fprintf(stdout,"|");
}
vlen = strlen(v);
for (i=0;i<sz;i++) {
fprintf(stdout,"%c",i >= vlen ? ' ' : v[i]);
}
fprintf(stdout,"|");
}
static void print_break(int sz, int first)
{
int i;
if (first) {
fprintf(stdout,"+");
}
for (i=0;i<sz;i++) {
fprintf(stdout,"-");
}
fprintf(stdout,"+");
}
void
dump_results(MdbSQL *sql)
{
int j;
MdbSQLColumn *sqlcol;
unsigned long row_count = 0;
if (headers) {
for (j=0;j<sql->num_columns-1;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
fprintf(stdout, "%s%s", sqlcol->name, delimiter);
}
sqlcol = g_ptr_array_index(sql->columns,sql->num_columns-1);
fprintf(stdout, "%s", sqlcol->name);
fprintf(stdout,"\n");
}
while(mdb_fetch_row(sql->cur_table)) {
row_count++;
for (j=0;j<sql->num_columns-1;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
fprintf(stdout, "%s%s", sql->bound_values[j], delimiter);
}
sqlcol = g_ptr_array_index(sql->columns,sql->num_columns-1);
fprintf(stdout, "%s", sql->bound_values[sql->num_columns-1]);
fprintf(stdout,"\n");
}
if (footers) {
if (!row_count)
fprintf(stdout, "No Rows retrieved\n");
else if (row_count==1)
fprintf(stdout, "1 Row retrieved\n");
else
fprintf(stdout, "%d Rows retrieved\n", row_count);
}
mdb_sql_reset(sql);
}
void
dump_results_pp(MdbSQL *sql)
{
int j;
MdbSQLColumn *sqlcol;
unsigned long row_count = 0;
/* print header */
if (headers) {
for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
print_break(sqlcol->disp_size, !j);
}
fprintf(stdout,"\n");
for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
print_value(sqlcol->name,sqlcol->disp_size,!j);
}
fprintf(stdout,"\n");
}
for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
print_break(sqlcol->disp_size, !j);
}
fprintf(stdout,"\n");
/* print each row */
while(mdb_fetch_row(sql->cur_table)) {
row_count++;
for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
print_value(sql->bound_values[j],sqlcol->disp_size,!j);
}
fprintf(stdout,"\n");
}
/* footer */
for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j);
print_break(sqlcol->disp_size, !j);
}
fprintf(stdout,"\n");
if (footers) {
if (!row_count)
fprintf(stdout, "No Rows retrieved\n");
else if (row_count==1)
fprintf(stdout, "1 Row retrieved\n");
else
fprintf(stdout, "%d Rows retrieved\n", row_count);
}
/* clean up */
for (j=0;j<sql->num_columns;j++) {
if (sql->bound_values[j]) free(sql->bound_values[j]);
}
/* the column and table names are no good now */
mdb_sql_reset(sql);
}
void myexit(int r)
{
free(delimiter);
exit(r);
}
main(int argc, char **argv)
{
char *s;
@@ -74,11 +242,54 @@ char *mybuf;
int bufsz = 4096;
int done = 0;
MdbSQL *sql;
int opt;
FILE *in = NULL, *out = NULL;
if (!isatty(fileno(stdin))) {
in = stdin;
}
while ((opt=getopt(argc, argv, "hfpd:i:o:"))!=-1) {
switch (opt) {
case 'd':
delimiter = malloc(strlen(optarg)+1);
strcpy(delimiter, optarg);
break;
case 'p':
pretty_print=0;
break;
case 'H':
headers=0;
break;
case 'F':
footers=0;
break;
case 'i':
if (!strcmp(optarg, "stdin"))
in = stdin;
else if (!(in = fopen(optarg, "r"))) {
fprintf(stderr,"Unable to open file %s\n", optarg);
exit(1);
}
break;
case 'o':
if (!(out = fopen(optarg, "w"))) {
fprintf(stderr,"Unable to open file %s\n", optarg);
exit(1);
}
break;
default:
fprintf(stdout,"Unknown option.\nUsage: %s [-HFp] [-d <delimiter>] [-i <file>] [-o <file>] [<database>]\n", argv[0]);
exit(1);
}
}
if (!delimiter) {
delimiter = strdup("\t");
}
/* initialize the SQL engine */
sql = mdb_sql_init();
if (argc>1) {
mdb_sql_open(sql, argv[1]);
if (argc>optind) {
mdb_sql_open(sql, argv[optind]);
}
/* give the buffer an initial size */
@@ -86,15 +297,20 @@ MdbSQL *sql;
mybuf = (char *) malloc(bufsz);
mybuf[0]='\0';
sprintf(prompt,"1 => ");
s=readline(prompt);
if (in) {
s=malloc(256);
if (!fgets(s, 256, in)) myexit(0);
} else {
sprintf(prompt,"1 => ");
s=readline(prompt);
}
while (!done) {
if (!strcmp(s,"go")) {
if (line==1 && !strncmp(s,"set ", 4)) {
do_set_cmd(sql, &s[4]);
line = 0;
if (!parse(sql, mybuf) && sql->cur_table) {
mdbsql_bind_all(sql);
mdbsql_dump_results(sql);
}
} else if (!strcmp(s,"go")) {
line = 0;
run_query(sql, mybuf);
mybuf[0]='\0';
} else if (!strcmp(s,"reset")) {
line = 0;
@@ -109,16 +325,27 @@ MdbSQL *sql;
/* preserve line numbering for the parser */
strcat(mybuf,"\n");
}
sprintf(prompt,"%d => ",++line);
free(s);
s=readline(prompt);
if (in) {
s=malloc(256);
if (!fgets(s, 256, in)) {
/* if we have something in the buffer, run it */
if (strlen(mybuf))
run_query(sql, mybuf);
myexit(0);
}
if (s[strlen(s)-1]=='\n') s[strlen(s)-1]=0;
} else {
sprintf(prompt,"%d => ",++line);
s=readline(prompt);
}
if (!strcmp(s,"exit") || !strcmp(s,"quit") || !strcmp(s,"bye")) {
done = 1;
}
}
mdb_sql_exit(sql);
exit(0);
myexit(0);
}
#else
int main(int argc, char **argv)

View File

@@ -74,7 +74,7 @@ char *sargname = NULL;
void dump_ole(MdbTableDef *table, char *colname, char *sargname)
{
int i, found = 0;
char ole_data[12000];
char ole_data[200000];
int len;
MdbColumn *col;
MdbSarg sarg;