ftp.nice.ch/pub/next/unix/database/msql-1.0.9.sd.tar.gz#/msql-1.0.9/src/msql/relshow.c

This is relshow.c in view mode; [Download] [Up]

/*
**	relshow.c	- Display the database structure
**
**
** Copyright (c) 1993-95  David J. Hughes
** Copyright (c) 1995  Hughes Technologies Pty Ltd
**
** Permission to use, copy, and distribute for non-commercial purposes,
** is hereby granted without fee, providing that the above copyright
** notice appear in all copies and that both the copyright notice and this
** permission notice appear in supporting documentation.
**
** This software is provided "as is" without any expressed or implied warranty.
**
** ID = "$Id:"
**
*/



#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <netdb.h>

#include <common/portability.h>
#include "msql_priv.h"
#include "msql.h"


char	PROGNAME[] = "Relshow";

void usage()
{
	printf("\nUsage : relshow [-h host] [dbName [relName]]\n\n");
	printf("         Where   dbName is the name of a database\n");
	printf("                 relname is the name of a relation\n\n");
	printf("If no database is given, list the known databases\n");
	printf("If no relation is given, list relations in the database\n");
	printf("If database and relation given, list fields and field types\n");
	printf("   in the given relation\n\n\007");
}




main(argc,argv)
	int	argc;
	char	*argv[];
{
	char	dbShow = 0,
		relShow = 0,
		fieldShow = 0;
	char	typeName[10];
	int	sock,
		argsLeft,
		errFlag = 0,
		c;
	m_row	cur;
	m_result *res;
	m_field	*curField;
        char    *host = NULL;
        extern  int optind;
        extern  char *optarg;


        while((c=getopt(argc,argv,"h:"))!= -1)
        {
                switch(c)
                {
                        case 'h':
                                if (host)
                                        errFlag++;
                                else
                                        host = optarg;
                                break;
                        case '?':
                                errFlag++;
                                break;
                }
        }

	argsLeft = argc - optind;

	/*
	** Work out what we here to do
	*/

	switch(argsLeft)
	{
		case 0:	dbShow++;
			break;
		case 1: relShow++;
			break;
		case 2:	fieldShow++;
			break;
		default:usage();
			exit(1);
	}


	/*
	**  Fire up mSQL
	*/

	if ((sock = msqlConnect(host)) < 0)
	{
		printf("\nError connecting to database : %s\n\n", msqlErrMsg);
		exit(1);
	}

	if (!dbShow)
	{
		if(msqlSelectDB(sock,argv[optind]) < 0)
		{
			printf("\n%s\n\n",msqlErrMsg);
			msqlClose(sock);
			exit(1);
		}
	}


	/*
	** List the available databases if required
	*/

	if (dbShow)
	{
		res = msqlListDBs(sock);
		if (!res)
		{
			printf("\nERROR : Couldn't get database list!\n");
			exit(1);
		}
		printf("\n\n  +-----------------+\n");
		printf("  |    Databases    |\n");
		printf("  +-----------------+\n");
		while((cur = msqlFetchRow(res)))
		{
			printf("  | %-15.15s |\n", cur[0]);
		}
		printf("  +-----------------+\n\n");
		msqlFreeResult(res);
		msqlClose(sock);
		exit(0);

	}


	/*
	** List the available relations if required
	*/

	if (relShow)
	{

		res = msqlListTables(sock);
		if (!res)
		{
			printf("\n");
			printf("ERROR : Unable to list tables in database %s\n",
				argv[optind]);
			exit(1);
		}
		printf("\n\nDatabase = %s\n\n",argv[optind]);
		printf("  +---------------------+\n");
		printf("  |       Table         |\n");
		printf("  +---------------------+\n");
		while((cur = msqlFetchRow(res)))
		{
			printf("  | %-19.19s |\n", cur[0]);
		}
		printf("  +---------------------+\n\n");
		msqlFreeResult(res);
		msqlClose(sock);
		exit(0);
	}


	/*
	** List the attributes and types if required
	*/

	if (fieldShow)
	{
		/*
		** Get the list of attributes
		*/

		res = msqlListFields(sock,argv[optind+1]);
		if (!res)
		{
			printf("ERROR : Couldn't find %s in %s!\n\n",
				argv[optind+1], argv[optind]);
			exit(1);
		}

		/*
		** Display the information
		*/

		printf("\nDatabase = %s\n",argv[optind]);
		printf("\nTable    = %s\n\n",argv[optind + 1]);
		printf(" +-----------------+----------+--------+----------+-----+\n");
		printf(" |     Field       |   Type   | Length | Not Null | Key |\n");
		printf(" +-----------------+----------+--------+----------+-----+\n");
		while((curField = msqlFetchField(res)))
		{
			
			printf(" | %-15.15s | ",curField->name);
			switch(curField->type)
			{
				case INT_TYPE:
					strcpy(typeName,"int");
					break;

				case CHAR_TYPE:
					strcpy(typeName,"char");
					break;

				case REAL_TYPE:
					strcpy(typeName,"real");
					break;

				default:
					strcpy(typeName,"Unknown");
					break;
			}
			printf("%-8.8s |",typeName);
			printf(" %-6d |",curField->length);
			printf(" %-8.8s |", IS_NOT_NULL(curField->flags)?
				"Y":"N");
			printf(" %-3.3s |\n", IS_PRI_KEY(curField->flags)?
				"Y":"N");
		}
		printf(" +-----------------+----------+--------+----------+-----+");
		printf("\n\n");
		msqlFreeResult(res);
		msqlClose(sock);
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.