blob: 85f03d7e7de52ad5b30c554845045dedc85793a4 [file] [log] [blame]
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
exec sql include ../regression;
exec sql whenever sqlerror sqlprint;
static void
check_result_of_insert(void)
{
exec sql begin declare section;
int ivar1 = 0, ivar2 = 0;
exec sql end declare section;
exec sql select c1,c2 into :ivar1,:ivar2 from test;
printf("%d %d\n", ivar1, ivar2);
}
int main(void)
{
exec sql begin declare section;
int ivar1 = 1, ivar2 = 2;
char v_include_dq_name[16], v_include_ws_name[16], v_normal_name[16], v_query[64];
exec sql end declare section;
strcpy(v_normal_name, "normal_name");
strcpy(v_include_dq_name, "include_\"_name");
strcpy(v_include_ws_name, "include_ _name");
strcpy(v_query, "insert into test values(?,?)");
/*
* preparing for test
*/
exec sql connect to REGRESSDB1;
exec sql begin;
exec sql create table test (c1 int, c2 int);
exec sql commit work;
exec sql begin;
/*
* Non dynamic statement
*/
exec sql truncate test;
printf("+++++ Test for prepnormal +++++\n");
printf("insert into test values(:ivar1,:ivar2)\n");
exec sql insert into test values(:ivar1,:ivar2);
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for execute immediate +++++\n");
printf("execute immediate \"insert into test values(1,2)\"\n");
exec sql execute immediate "insert into test values(1,2)";
check_result_of_insert();
/*
* PREPARE FROM
*/
exec sql truncate test;
printf("+++++ Test for PREPARE ident FROM CString +++++\n");
printf("prepare ident_name from \"insert into test values(?,?)\"\n");
exec sql prepare ident_name from "insert into test values(?,?)";
printf("execute ident_name using :ivar1,:ivar2\n");
exec sql execute ident_name using :ivar1,:ivar2;
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for PREPARE char_variable_normal_name FROM char_variable +++++\n");
printf("prepare :v_normal_name from :v_query\n");
exec sql prepare :v_normal_name from :v_query;
printf("execute :v_normal_name using :ivar1,:ivar2\n");
exec sql execute :v_normal_name using :ivar1,:ivar2;
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for PREPARE char_variable_inc_dq_name FROM char_variable +++++\n");
printf("prepare :v_include_dq_name from :v_query\n");
exec sql prepare :v_include_dq_name from :v_query;
printf("execute :v_include_dq_name using :ivar1,:ivar2\n");
exec sql execute :v_include_dq_name using :ivar1,:ivar2;
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for PREPARE char_variable_inc_ws_name FROM char_variable +++++\n");
printf("prepare :v_include_ws_name from :v_query\n");
exec sql prepare :v_include_ws_name from :v_query;
printf("execute :v_include_ws_name using :ivar1,:ivar2\n");
exec sql execute :v_include_ws_name using :ivar1,:ivar2;
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for PREPARE CString_inc_ws_name FROM char_variable +++++\n");
printf("prepare \"include_ _name\" from :v_query\n");
exec sql prepare "include_ _name" from :v_query;
printf("exec sql execute \"include_ _name\" using :ivar1,:ivar2\n");
exec sql execute "include_ _name" using :ivar1,:ivar2;
check_result_of_insert();
exec sql truncate test;
printf("+++++ Test for PREPARE CString_normal_name FROM char_variable +++++\n");
printf("prepare \"norma_name\" from :v_query\n");
exec sql prepare "normal_name" from :v_query;
printf("exec sql execute \"normal_name\" using :ivar1,:ivar2\n");
exec sql execute "normal_name" using :ivar1,:ivar2;
check_result_of_insert();
/*
* PREPARE AS
*/
exec sql deallocate "ident_name";
exec sql deallocate "normal_name";
exec sql deallocate "include_ _name";
exec sql truncate test;
printf("+++++ Test for PREPARE ident(typelist) AS +++++\n");
printf("prepare ident_name(int,int) as insert into test values($1,$2)\n");
exec sql prepare ident_name(int,int) as insert into test values($1,$2);
printf("execute ident_name(:ivar1,:ivar2)\n");
exec sql execute ident_name(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "ident_name";
exec sql truncate test;
printf("+++++ Test for PREPARE CString_normal_name(typelist) AS +++++\n");
printf("prepare \"normal_name\"(int,int) as insert into test values($1,$2)\n");
exec sql prepare "normal_name"(int,int) as insert into test values($1,$2);
printf("execute \"normal_name\"(:ivar1,:ivar2)\n");
exec sql execute "normal_name"(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "normal_name";
exec sql truncate test;
printf("+++++ Test for PREPARE CString_include_ws_name(typelist) AS +++++\n");
printf("prepare \"include_ _name\"(int,int) as insert into test values($1,$2)\n");
exec sql prepare "include_ _name"(int,int) as insert into test values($1,$2);
printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
exec sql execute "include_ _name"(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "include_ _name";
exec sql truncate test;
printf("+++++ Test for PREPARE char_variable_normal_name(typelist) AS +++++\n");
printf("prepare :v_normal_name(int,int) as insert into test values($1,$2)\n");
exec sql prepare :v_normal_name(int,int) as insert into test values($1,$2);
printf("execute :v_normal_name(:ivar1,:ivar2)\n");
exec sql execute :v_normal_name(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "normal_name";
exec sql truncate test;
printf("+++++ Test for PREPARE char_variable_include_ws_name(typelist) AS +++++\n");
printf("prepare :v_include_ws_name(int,int) as insert into test values($1,$2)\n");
exec sql prepare :v_include_ws_name(int,int) as insert into test values($1,$2);
printf("execute :v_include_ws_name(:ivar1,:ivar2)\n");
exec sql execute :v_include_ws_name(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "include_ _name";
exec sql truncate test;
printf("+++++ Test for EXECUTE :v_normal_name(const,const) +++++\n");
printf("prepare :v_normal_name from :v_query\n");
exec sql prepare :v_normal_name from :v_query;
printf("execute :v_normal_name(1,2)\n");
exec sql execute :v_normal_name(1,2);
check_result_of_insert();
exec sql deallocate "normal_name";
exec sql truncate test;
printf("+++++ Test for EXECUTE :v_normal_name(expr,expr) +++++\n");
printf("prepare :v_normal_name from :v_query\n");
exec sql prepare :v_normal_name from :v_query;
printf("execute :v_normal_name(0+1,1+1)\n");
exec sql execute :v_normal_name(0+1,1+1);
check_result_of_insert();
exec sql deallocate "normal_name";
exec sql truncate test;
printf("+++++ Test for combination PREPARE FROM and EXECUTE ident(typelist) +++++\n");
printf("prepare ident_name from :v_query\n");
exec sql prepare ident_name from :v_query;
printf("execute ident_name(:ivar1,:ivar2)\n");
exec sql execute ident_name(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "ident_name";
exec sql truncate test;
printf("+++++ Test for combination PREPARE FROM and EXECUTE CString_include_ws_name(typelist) +++++\n");
printf("prepare \"include_ _name\" from :v_query\n");
exec sql prepare "include_ _name" from :v_query;
printf("execute \"include_ _name\"(:ivar1,:ivar2)\n");
exec sql execute "include_ _name"(:ivar1,:ivar2);
check_result_of_insert();
exec sql deallocate "include_ _name";
exec sql drop table test;
exec sql commit work;
return 0;
}