/* gsqld.C - Shell-Interface for Internet-SQL
 *           (c) Michael Koehne <kraehe@bakunin.norh.de>
 */

extern "C" { 
	#include "unistd.h"
	#include "stdlib.h"
	#include "stdio.h"
	#include "memory.h"
	#include "string.h"
#ifdef _SunOS
	extern int putenv();
	extern int fprintf();
	extern int fflush();
#endif
}

#include "tw_types.h"
#include "SqlManager.h"

SqlManager sql;
Text sql_stat(16);

char *database;
int sql_debug=0;
int sql_pc=0;
int demon=0;

int sql_backend(SqlParser *sql)
{	Text *res;
	int i;
	char *row;
	int flag;

	if (demon) fprintf(stdout,"- Seq BEGIN\n");

	res = sql->sql_getresult();
	if (res) {
		if (res->nlines) {
			for (i=0; i<res->nlines;i++) {
				if (demon)
					fprintf(stdout,"# %s\n",res->lines[i]);
				else
					fprintf(stderr,"%s\n",res->lines[i]);
				}
			}


		flag = 1;
		while ((row = sql->sql_getrow())) {
			if (flag) {
				if (demon) fprintf(stdout,"- Seq ROWS\n");
				flag=0;
				}
			if (demon)
				fprintf(stdout,"> %s\n",row);
			else	fprintf(stdout,"%s\n",row);
			free(row);
			}
		}

	if (demon) fprintf(stdout,"- Seq END\n");
	fflush(stdout);

	return(1);
	}

main(int argc,char **argv)
{	char statement[256];
	int stdinflag=1;
	LineStream *sql_stream;
	char *p,*q;

	database=0;

	p = argv[0]; while ((q=strchr(p,'/'))) p=q+1;
	if (!strcmp(p,"gsqld")) demon=1;

	while (--argc) {
		argv++;
		if (!memcmp(*argv,"-d",2)) parser_debug=1;
		else
		if (!memcmp(*argv,"-pc",3)) sql_pc=1;
		else
		if (!memcmp(*argv,"-s",2)) putenv(strdup((*argv)+2));
		else 
		if (!database)
			database=strdup(*argv);
		else {	strcpy(statement,*argv);
			strcat(statement,";");
			sql_stat.add_line(statement);
			stdinflag=0;
			}
		}

	sql.sql_backend = sql_backend;

	if (database) {
		sprintf(statement,"database %s;",database);
		sql_stat.add_line(0,statement);
		}

	if (sql_stat.nlines) {
		/*
		fprintf(stderr,"Init param\n");
		*/
		sql.sql_new(&sql_stat);
		}

	if (stdinflag) {
		/*
		fprintf(stderr,"Init stdin\n");
		*/
		sql_stream = new FileStream(0,O_RDONLY);
		sql.sql_new(sql_stream);
		delete sql_stream;
		}
	}
