summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/sql/dyntest.pgc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/sql/dyntest.pgc')
-rw-r--r--src/interfaces/ecpg/test/sql/dyntest.pgc310
1 files changed, 161 insertions, 149 deletions
diff --git a/src/interfaces/ecpg/test/sql/dyntest.pgc b/src/interfaces/ecpg/test/sql/dyntest.pgc
index c98b3d2067..04d0ef4246 100644
--- a/src/interfaces/ecpg/test/sql/dyntest.pgc
+++ b/src/interfaces/ecpg/test/sql/dyntest.pgc
@@ -3,186 +3,198 @@
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
exec sql include sql3types;
exec sql include sqlca;
exec sql include ../regression;
-static void error(void)
-{ printf("#%ld:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
- exit(1);
+static void
+error (void)
+{
+ printf ("\n#%ld:%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
+ exit (1);
}
-int main(int argc,char **argv)
-{ exec sql begin declare section;
+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,RETURNED_OCTET_LENGTH;
+ int TYPE, LENGTH, OCTET_LENGTH, PRECISION, SCALE, RETURNED_OCTET_LENGTH;
int DATETIME_INTERVAL_CODE;
- char NAME[120];
+ char NAME[120], BOOLVAR;
char STRINGVAR[1024];
- float FLOATVAR;
double DOUBLEVAR;
char *QUERY;
exec sql end declare section;
- int done=0;
+ int done = 0;
- ECPGdebug(1, stderr);
+ exec sql var BOOLVAR is bool;
- QUERY="select rulename, ev_class, ev_attr, ev_type, is_instead, ev_qual from pg_rewrite";
+ ECPGdebug (1, stderr);
- exec sql whenever sqlerror do error();
+ QUERY = "select * from dyntest";
+
+ exec sql whenever sqlerror
+ do
+ error ();
exec sql allocate descriptor MYDESC;
exec sql connect to REGRESSDB1;
- exec sql prepare MYQUERY from :QUERY;
+ exec sql create table dyntest (name char (14), d float8, i int,
+ bignumber int8, b boolean, comment text,
+ day date);
+ exec sql insert into dyntest values ('first entry', 14.7, 14, 123045607890, true, 'The world''''s most advanced open source database.', '1987-07-14');
+ exec sql insert into dyntest values ('second entry', 1407.87, 1407, 987065403210, false, 'The elephant never forgets.', '1999-11-5');
+
+ 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,
- :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 (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 fetch in MYCURS into sql descriptor MYDESC;
+
+ if (sqlca.sqlcode)
+ break;
+
+ exec sql get descriptor MYDESC:COUNT = count;
+ if (!done)
+ {
+ printf ("Found %d columns\n", COUNT);
+ done = 1;
+ }
+
+ for (INDEX = 1; INDEX <= COUNT; ++INDEX)
+ {
+ exec sql get descriptor MYDESC value :INDEX
+ :TYPE = type,
+ :LENGTH = length,
+ :OCTET_LENGTH = octet_length,
+ :RETURNED_OCTET_LENGTH = returned_octet_length,
+ :PRECISION = precision,
+ :SCALE = scale,
+ :NAME = name,
+ :INDICATOR = indicator;
+ printf ("%2d\t%s (type: %d length: %d precision: %d scale: %d = " , INDEX, NAME, TYPE, LENGTH, PRECISION, SCALE);
+ 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 ("text");
+ 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;
+ }
+ printf (")\n\toctet_length: %d returned_octet_length: %d)\n\t= ",
+ OCTET_LENGTH, RETURNED_OCTET_LENGTH);
+ if (INDICATOR == -1)
+ printf ("NULL\n");
+ else
+ switch (TYPE)
+ {
+ case SQL3_BOOLEAN:
+ exec sql get descriptor MYDESC value :INDEX :BOOLVAR = data;
+ printf ("%s\n", BOOLVAR ? "true" : "false");
+ break;
+ case SQL3_INTEGER:
+ case SQL3_SMALLINT:
+ exec sql get descriptor MYDESC value :INDEX :INTVAR = data;
+ printf ("%d\n", INTVAR);
+ break;
+ case SQL3_DOUBLE_PRECISION:
+ exec sql get descriptor MYDESC value :INDEX :DOUBLEVAR = data;
+ printf ("%.*f\n", PRECISION, DOUBLEVAR);
+ break;
+ case SQL3_DATE_TIME_TIMESTAMP:
+ exec sql get descriptor MYDESC value :INDEX
+ :DATETIME_INTERVAL_CODE = datetime_interval_code,
+ :STRINGVAR = data;
+ printf ("%d \"%s\"\n", DATETIME_INTERVAL_CODE, STRINGVAR);
+ break;
+ case SQL3_CHARACTER:
+ case SQL3_CHARACTER_VARYING:
+ exec sql get descriptor MYDESC value :INDEX :STRINGVAR = data;
+ printf ("\"%s\"\n", STRINGVAR);
+ break;
+ default:
+ exec sql get descriptor MYDESC value :INDEX :STRINGVAR = data;
+ printf ("<\"%s\">\n", STRINGVAR);
+ break;
+ }
+ }
+ }
exec sql close MYCURS;
- exec sql deallocate descriptor MYDESC;
- /* no exec sql disconnect; */
+ exec sql deallocate descriptor MYDESC;
return 0;
-}
+ }