#include #include #include 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; }