summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/dyntest.pgc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/dyntest.pgc')
-rw-r--r--src/interfaces/ecpg/test/dyntest.pgc192
1 files changed, 0 insertions, 192 deletions
diff --git a/src/interfaces/ecpg/test/dyntest.pgc b/src/interfaces/ecpg/test/dyntest.pgc
deleted file mode 100644
index 0561e44db1..0000000000
--- a/src/interfaces/ecpg/test/dyntest.pgc
+++ /dev/null
@@ -1,192 +0,0 @@
-/* dynamic SQL test program
- *
- * $PostgreSQL: pgsql/src/interfaces/ecpg/test/dyntest.pgc,v 1.12 2006/03/11 16:57:43 momjian Exp $
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-exec sql include sql3types;
-exec sql include sqlca;
-
-static void error(void)
-{ printf("#%ld:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
- exit(1);
-}
-
-int main(int argc,char **argv)
-{ exec sql begin declare section;
- int COUNT;
- int INTVAR;
- int INDEX;
- int INDICATOR;
- bool BOOLVAR;
- int TYPE,LENGTH,OCTET_LENGTH,PRECISION,SCALE,NULLABLE,RETURNED_OCTET_LENGTH;
- int DATETIME_INTERVAL_CODE;
- char NAME[120];
- char STRINGVAR[1024];
- float FLOATVAR;
- double DOUBLEVAR;
- char QUERY[1024];
- char DB[1024];
- exec sql end declare section;
- int done=0;
- FILE *dbgs;
-
- if ((dbgs = fopen("log", "w")) != NULL)
- ECPGdebug(1, dbgs);
-
- snprintf(QUERY,sizeof QUERY,"select * from %s",argc>1 && argv[1][0]?argv[1]:"pg_tables");
-
- exec sql whenever sqlerror do error();
-
- exec sql allocate descriptor MYDESC;
-
- strncpy(DB,argc>2?argv[2]:"mm",sizeof DB);
- exec sql connect to :DB;
-
- exec sql prepare MYQUERY from :QUERY;
- exec sql declare MYCURS cursor for MYQUERY;
-
- exec sql open MYCURS;
-
- while (1)
- { exec sql fetch in MYCURS into sql descriptor MYDESC;
-
- if (sqlca.sqlcode) break;
-
- exec sql get descriptor MYDESC :COUNT = count;
- if (!done)
- { printf("%d Columns\n",COUNT);
- for (INDEX=1;INDEX<=COUNT;++INDEX)
- { exec sql get descriptor MYDESC value :INDEX
- :TYPE = type,
- :LENGTH = length, :OCTET_LENGTH=octet_length,
- :PRECISION = precision, :SCALE=scale,
- :NULLABLE=nullable, :NAME=name,
- :RETURNED_OCTET_LENGTH=returned_octet_length;
- printf("%s ",NAME);
- switch (TYPE)
- { case SQL3_BOOLEAN:
- printf("bool ");
- break;
- case SQL3_NUMERIC:
- printf("numeric(%d,%d) ",PRECISION,SCALE);
- break;
- case SQL3_DECIMAL:
- printf("decimal(%d,%d) ",PRECISION,SCALE);
- break;
- case SQL3_INTEGER:
- printf("integer ");
- break;
- case SQL3_SMALLINT:
- printf("smallint ");
- break;
- case SQL3_FLOAT:
- printf("float(%d,%d) ",PRECISION,SCALE);
- break;
- case SQL3_REAL:
- printf("real ");
- break;
- case SQL3_DOUBLE_PRECISION:
- printf("double precision ");
- break;
- case SQL3_DATE_TIME_TIMESTAMP:
- exec sql get descriptor MYDESC value :INDEX
- :DATETIME_INTERVAL_CODE=datetime_interval_code;
- switch(DATETIME_INTERVAL_CODE)
- { case SQL3_DDT_DATE:
- printf("date "); break;
- case SQL3_DDT_TIME:
- printf("time "); break;
- case SQL3_DDT_TIMESTAMP:
- printf("timestamp "); break;
- case SQL3_DDT_TIME_WITH_TIME_ZONE:
- printf("time with time zone "); break;
- case SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE:
- printf("timestamp with time zone "); break;
- }
- break;
- case SQL3_INTERVAL:
- printf("interval ");
- break;
- case SQL3_CHARACTER:
- if (LENGTH>0) printf("char(%d) ",LENGTH);
- else printf("char(?) ");
- break;
- case SQL3_CHARACTER_VARYING:
- if (LENGTH>0) printf("varchar(%d) ",LENGTH);
- else printf("varchar() ");
- break;
- default:
- if (TYPE<0) printf("<OID %d> ",-TYPE);
- else printf("<SQL3 %d> ",TYPE);
- break;
- }
- if (!NULLABLE) printf("not null ");
- if (OCTET_LENGTH>0) printf("[%d bytes]",OCTET_LENGTH);
- putchar('\n');
- }
- putchar('\n');
- done=1;
- }
-
- for (INDEX=1;INDEX<=COUNT;++INDEX)
- { exec sql get descriptor MYDESC value :INDEX
- :TYPE = type, :SCALE=scale, :PRECISION = precision,
- :INDICATOR=indicator;
- if (INDICATOR==-1) printf("NULL");
- else switch (TYPE)
- { case SQL3_BOOLEAN:
- exec sql get descriptor MYDESC value :INDEX :BOOLVAR=data;
- printf(BOOLVAR?"true":"false");
- break;
- case SQL3_NUMERIC:
- case SQL3_DECIMAL:
- if (SCALE==0) /* we might even print leading zeros "%0*d" */
- { exec sql get descriptor MYDESC value :INDEX :INTVAR=data;
- printf("%*d",PRECISION,INTVAR);
- }
- else
- { exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;
- printf("%*.*f",PRECISION+1,SCALE,FLOATVAR);
- }
- break;
- case SQL3_INTEGER:
- case SQL3_SMALLINT:
- exec sql get descriptor MYDESC value :INDEX :INTVAR=data;
- printf("%d",INTVAR);
- break;
- case SQL3_FLOAT:
- case SQL3_REAL:
- exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;
- printf("%f",FLOATVAR);
- break;
- case SQL3_DOUBLE_PRECISION:
- exec sql get descriptor MYDESC value :INDEX :DOUBLEVAR=data;
- printf("%f",DOUBLEVAR);
- break;
- case SQL3_DATE_TIME_TIMESTAMP:
- case SQL3_INTERVAL:
- case SQL3_CHARACTER:
- case SQL3_CHARACTER_VARYING:
- default:
- exec sql get descriptor MYDESC value :INDEX :STRINGVAR=data;
- printf("'%s'",STRINGVAR);
- break;
- }
- putchar('|');
- }
- putchar('\n');
- }
-
- exec sql close MYCURS;
-
- exec sql deallocate descriptor MYDESC;
-
- if (dbgs != NULL)
- fclose(dbgs);
-
- return 0;
-}