summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/sql/dyntest2.pgc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/sql/dyntest2.pgc')
-rw-r--r--src/interfaces/ecpg/test/sql/dyntest2.pgc139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/test/sql/dyntest2.pgc b/src/interfaces/ecpg/test/sql/dyntest2.pgc
new file mode 100644
index 00000000000..9673525503d
--- /dev/null
+++ b/src/interfaces/ecpg/test/sql/dyntest2.pgc
@@ -0,0 +1,139 @@
+/* dynamic SQL test program
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+exec sql include sql3types;
+exec sql include sqlca;
+exec sql include ../regression;
+
+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 COUNT;
+ int INTVAR, BOOLVAR;
+ int INDEX;
+ int INDICATOR;
+ 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;
+exec sql end declare section;
+ int done=0;
+
+ exec sql var BOOLVAR is bool;
+
+ ECPGdebug(1, stderr);
+
+ QUERY="select rulename, ev_class, ev_attr, ev_type, is_instead, ev_qual from pg_rewrite";
+
+ exec sql whenever sqlerror do error();
+
+ exec sql allocate descriptor MYDESC;
+
+ exec sql connect to REGRESSDB1;
+
+ 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("Count %d\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,
+ :NULLABLE=nullable, :NAME=name,
+ :INDICATOR=indicator;
+ printf("%2d\t%s (type: %d length: %d precision: %d scale: %d\n"
+ "\toctet_length: %d returned_octet_length: %d nullable: %d)\n\t= "
+ ,INDEX,NAME,TYPE,LENGTH,PRECISION,SCALE
+ ,OCTET_LENGTH,RETURNED_OCTET_LENGTH,NULLABLE);
+ 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_NUMERIC:
+ case SQL3_DECIMAL:
+ if (SCALE==0)
+ {
+ exec sql get descriptor MYDESC value :INDEX :INTVAR=data;
+ printf("%d\n",INTVAR);
+ }
+ else
+ {
+ exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;
+ printf("%.*f\n",SCALE,FLOATVAR);
+ }
+ break;
+ case SQL3_INTEGER:
+ case SQL3_SMALLINT:
+ exec sql get descriptor MYDESC value :INDEX :INTVAR=data;
+ printf("%d\n",INTVAR);
+ break;
+ case SQL3_FLOAT:
+ case SQL3_REAL:
+ exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;
+ printf("%.*f\n",PRECISION,FLOATVAR);
+ 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_INTERVAL:
+ exec sql get descriptor MYDESC value :INDEX :STRINGVAR=data;
+ printf("\"%s\"\n",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;
+
+ return 0;
+}