Re: Schema Generator, Data Dictionary Questions
Posted in 1993
In article <C91npK.249@portal.hq.videocart.com> bgale@portal.hq.videocart.com (Bill Gale) writes: } PROBLEMS } } At this point I am having trouble reverse engineering values in the } syscolumns.collength field back to their english equivalents which were } used to build the column when the table was created (or last altered). } } QUESTIONS } } I was wondering if anyone out there in Informixland already has heard } of or built such a product? } Amazing... I just got done writing this little routine for my new utility now in BETA testing... your welcome to use it. The function is called from within a 4GL program. You pass it syscolumns.coltype and syscolumns.collength and it returns the english words. Here --------- Snip Here --------- Snip Here --------- Snip Here --------- Snip /* ***************************************************** * * Copyright(c) 1993 by David A. Snyder. * * This document contains information that is * the property of David A. Snyder. * * INFORMIX -- Informix Software Inc. * * Title: col2word.c * ***************************************************** */ #include "decimal.h" #include "sqlca.h" #include "sqltypes.h" #include "varchar.h" #include "datetime.h" char *dtetim[][10] = { {"YEAR","YEAR(1)","YEAR(2)","YEAR(3)","YEAR","YEAR(5)","YEAR(6)","YEAR(7)","YEAR(8)","YEAR(9)"}, {"","","","","","","","","",""}, {"MONTH","MONTH(1)","MONTH","MONTH(3)","MONTH(4)","MONTH(5)","MONTH(6)","MONTH(7)","MONTH(8)","MONTH(9)"}, {"","","","","","","","","",""}, {"DAY","DAY(1)","DAY","DAY(3)","DAY(4)","DAY(5)","DAY(6)","DAY(7)","DAY(8)","DAY(9)"}, {"","","","","","","","","",""}, {"HOUR","HOUR(1)","HOUR","HOUR(3)","HOUR(4)","HOUR(5)","HOUR(6)","HOUR(7)","HOUR(8)","HOUR(9)"}, {"","","","","","","","","",""}, {"MINUTE","MINUTE(1)","MINUTE","MINUTE(3)","MINUTE(4)","MINUTE(5)","MINUTE(6)","MINUTE(7)","MINUTE(8)","MINUTE(9)"}, {"","","","","","","","","",""}, {"SECOND","SECOND(1)","SECOND","SECOND(3)","SECOND(4)","SECOND(5)","SECOND(6)","SECOND(7)","SECOND(8)","SECOND(9)"}, {"FRACTION(1)","","","","","","","","",""}, {"FRACTION","FRACTION(1)","FRACTION(2)","FRACTION(3)","FRACTION(4)","FRACTION(5)","","","",""}, {"FRACTION(3)","","","","","","","","",""}, {"FRACTION(4)","","","","","","","","",""}, {"FRACTION(5)","","","","","","","","",""} }; coltype_2_words(arg) int arg; { char words[50], verbage[41], *nulls; int prec, scale, len; short coltype, collength; popshort(&collength); popshort(&coltype); switch (coltype & SQLTYPE) { case SQLCHAR: sprintf(verbage, "CHAR(%d)", collength); break; case SQLSMINT: strcpy(verbage, "SMALLINT"); break; case SQLINT: strcpy(verbage, "INTEGER"); break; case SQLDECIMAL: prec = PRECTOT(collength); scale = PRECDEC(collength); if (scale == 255) sprintf(verbage, "DECIMAL(%d)", prec); else sprintf(verbage, "DECIMAL(%d,%d)", prec, scale); break; case SQLSMFLOAT: strcpy(verbage, "SMALLFLOAT"); break; case SQLFLOAT: strcpy(verbage, "FLOAT"); break; case SQLMONEY: prec = PRECTOT(collength); scale = PRECDEC(collength); if (scale == 255) sprintf(verbage, "MONEY(%d)", prec); else sprintf(verbage, "MONEY(%d,%d)", prec, scale); break; case SQLSERIAL: strcpy(verbage, "SERIAL"); break; case SQLDATE: strcpy(verbage, "DATE"); break; case SQLDTIME: prec = TU_START(collength); scale = TU_END(collength); sprintf(verbage, "DATETIME %s to %s", dtetim[prec][0], dtetim[scale][(scale == TU_FRAC) ? 2 : 0]); break; case SQLBYTES: strcpy(verbage, "BYTE"); break; case SQLTEXT: strcpy(verbage, "TEXT"); break; case SQLVCHAR: prec = VCMAX(collength); scale = VCMIN(collength); sprintf(verbage, "VARCHAR(%d,%d)", prec, scale); break; case SQLINTERVAL: prec = TU_START(collength); scale = TU_END(collength); len = TU_LEN(collength) - (scale - prec); sprintf(verbage, "INTERVAL %s to %s", dtetim[prec][(prec == TU_FRAC) ? 0 : len], dtetim[scale][(scale == TU_FRAC) ? 2 : 0]); break; } if (coltype & SQLNONULL) nulls = " NOT NULL"; else nulls = ""; sprintf(words, "%s%s", verbage, nulls); retquote(words); return(1); } Here --------- Snip Here --------- Snip Here --------- Snip Here --------- Snip DAS -- David Snyder @ Snide Computer Services - Folcroft, PA Current Release is db4glgen-3.15 UUCP: ..!uunet!das13!dave INTERNET: dave.snyder@snide.com