46 #define ESQL_FILE_ID_VAR_NAME "uci_esqlxc_file" 47 #define NOT_FOUND_MACRO_NAME "SQL_NOT_FOUND" 48 #define WARN_CHAR_MACRO_NAME "SQL_WARNING_CHAR" 53 #define REPETITIVE_SERIAL_NO (repetitive_no++) 54 #define FP c_out_stream 69 static const char *
NL =
" ";
83 static void tr_static (
const char *
stmt,
int length,
bool repeat,
int num_in_vars,
HOST_REF * in_vars,
84 const char *in_desc_name,
int num_out_vars,
HOST_REF * out_vars,
const char *out_desc_name);
85 static void tr_open_cs (
int cs_no,
const char *
stmt,
int length,
int stmt_no,
bool readonly,
int num_in_vars,
86 HOST_REF * in_vars,
const char *desc_name);
87 static void tr_fetch_cs (
int cs_no,
int num_out_vars,
HOST_REF * out_vars,
const char *desc_name);
93 static void tr_describe (
int stmt_no,
const char *desc_name);
94 static void tr_execute (
int stmt_no,
int num_in_vars,
HOST_REF * in_vars,
const char *in_desc_name,
int num_out_vars,
95 HOST_REF * out_vars,
const char *out_desc_name);
99 HOST_REF * out_vars,
const char *desc_name);
109 static char *
escape_string (
const char *,
int length,
int *counter);
125 "DB_TYPE_C_TIMESTAMP",
127 "DB_TYPE_C_MONETARY",
133 "DB_TYPE_C_VARNCHAR",
134 "DB_TYPE_C_STRING_CONST",
191 fprintf (
FP,
" uci_end();%s",
NL);
194 fprintf (
FP,
"}%s",
NL);
257 const char *bufsize_str;
270 fprintf (
FP,
"fprintf(stderr, \"uci_connect(%%s, %%s, %%s)\\n\", ");
272 fprintf (
FP,
"%s, ", buf_str);
273 if (user_name ==
NULL)
275 fprintf (
FP,
" \"(char *)0\", \"(char *)0\"); %s",
NL);
280 fprintf (
FP,
" %s, ", buf_str);
283 fprintf (
FP,
" \"(char *)0\"); %s",
NL);
288 fprintf (
FP,
" %s); %s", buf_str,
NL);
293 fprintf (
FP,
" uci_connect(%s, ", buf_str);
294 if (user_name ==
NULL)
296 fprintf (
FP,
"(char *)0, (char *)0);%s",
NL);
302 fprintf (
FP,
"%s, ", buf_str);
305 fprintf (
FP,
"(char *)0);%s",
NL);
311 fprintf (
FP,
"%s);%s", buf_str,
NL);
327 fprintf (
FP,
" uci_disconnect();%s",
NL);
342 fprintf (
FP,
"fprintf(stderr, \"uci_commit()\\n\"); %s",
NL);
344 fprintf (
FP,
" uci_commit();%s",
NL);
359 fprintf (
FP,
"fprintf(stderr, \"uci_rollback()\\n\"); %s",
NL);
361 fprintf (
FP,
" uci_rollback();%s",
NL);
382 int num_out_vars,
HOST_REF * out_vars,
const char *out_desc_name)
392 for (i = 0; i < num_in_vars; i++)
397 else if (in_desc_name !=
NULL)
399 fprintf (
FP,
" uci_put_descriptor(%s);%s", in_desc_name,
NL);
406 fprintf (
FP,
"fprintf(stderr, " "\"uci_static(%%d, \\\"%%s\\\", %%ld, %%d)\\n\", %d, \"",
409 fprintf (
FP,
"\", %ld, %d); %s", (
long) length, (num_out_vars <= 0) ? -1 : num_out_vars,
NL);
413 fprintf (
FP,
"\", %ld, %d);%s", (
long) length, (num_out_vars <= 0) ? -1 : num_out_vars,
NL);
421 if (num_out_vars > 0)
423 for (i = 0; i < num_out_vars; i++)
428 else if (out_desc_name !=
NULL)
431 fprintf (
FP,
" uci_get_descriptor(-1, %s);%s", out_desc_name,
NL);
451 bool need_newline =
false;
453 if (length == 0 || stmt ==
NULL)
458 for (ctr = 0; ctr < length; ctr++)
460 fputc (stmt[ctr],
FP);
461 need_newline = need_newline || (ctr && !(ctr % 75));
462 if (need_newline && stmt[ctr] ==
',')
468 need_newline =
false;
487 tr_open_cs (
int cs_no,
const char *stmt,
int length,
int stmt_no,
bool readonly,
int num_in_vars,
HOST_REF * in_vars,
488 const char *desc_name)
498 for (i = 0; i < num_in_vars; i++)
503 else if (desc_name !=
NULL)
505 fprintf (
FP,
" uci_put_descriptor(%s);%s", desc_name,
NL);
512 fprintf (
FP,
"fprintf(stderr," "\"uci_open_cs(%%d, \\\"%%s\\\", %%ld, %%d, %%d)\\n\", %d, ", cs_no);
515 fprintf (
FP,
"\"(char *)0\", ");
521 fprintf (
FP,
"\", ");
523 fprintf (
FP,
"%ld, %d, %d); %s", (
long) length, stmt_no, readonly,
NL);
525 fprintf (
FP,
" uci_open_cs(%d, ", cs_no);
528 fprintf (
FP,
"(char *)0, ");
534 fprintf (
FP,
"\", ");
542 fprintf (
FP,
"%ld, %d, %d);%s", (
long) length, stmt_no, readonly,
NL);
574 if (num_out_vars > 0)
576 fprintf (
FP,
"fprintf(stderr, \"uci_fetch_cs(%d, %d)\\n\"); %s", cs_no, num_out_vars,
NL);
578 else if (desc_name !=
NULL)
580 fprintf (
FP,
"fprintf(stderr, " "\"uci_fetch_cs(%d, (%s)->sqldesc)\\n\"); %s", cs_no, desc_name,
NL);
584 fprintf (
FP,
"fprintf(stderr, \"uci_fetch_cs(%%d, -1)\\n\", %d); %s", cs_no,
NL);
587 if (num_out_vars > 0)
590 fprintf (
FP,
" uci_fetch_cs(%d, %d);%s", cs_no, num_out_vars,
NL);
592 for (i = 0; i < num_out_vars; i++)
597 else if (desc_name !=
NULL)
600 fprintf (
FP,
" uci_fetch_cs(%d, (%s)->sqldesc);%s", cs_no, desc_name,
NL);
602 fprintf (
FP,
" uci_get_descriptor(%d, %s);%s", cs_no, desc_name,
NL);
608 fprintf (
FP,
" uci_fetch_cs(%d, -1);%s", cs_no,
NL);
639 fprintf (
FP,
" uci_psh_curr_csr_oid(%d);%s", cs_no,
NL);
645 for (i = 0; i < num_in_vars; i++)
654 fprintf (
FP,
"fprintf(stderr, " "\"uci_static(%%d, \\\"%%s\\\", %%ld, 0)\\n\", %d, \"",
657 fprintf (
FP,
"\", %ld); %s", (
long) length,
NL);
661 fprintf (
FP,
"\", %ld, 0);%s", (
long) length,
NL);
681 fprintf (
FP,
"fprintf(stderr, \"uci_delete_cs(%d)\\n\"); %s", cs_no,
NL);
683 fprintf (
FP,
" uci_delete_cs(%d);%s", cs_no,
NL);
702 fprintf (
FP,
"fprintf(stderr, \"uci_close_cs(%d)\\n\"); %s", cs_no,
NL);
704 fprintf (
FP,
" uci_close_cs(%d);%s", cs_no,
NL);
721 const char *bufsize_str;
735 fprintf (
FP,
"fprintf(stderr, " "\"uci_prepare(%%d, \\\"%%s\\\", %%d)\\n\", %d, %s, %s); %s", stmt_no, buf_str,
738 fprintf (
FP,
" uci_prepare(%d, %s, %s);%s", stmt_no, buf_str, bufsize_str,
NL);
756 fprintf (
FP,
" uci_describe(%d, %s);%s", stmt_no, desc_name,
NL);
779 tr_execute (
int stmt_no,
int num_in_vars,
HOST_REF * in_vars,
const char *in_desc_name,
int num_out_vars,
780 HOST_REF * out_vars,
const char *out_desc_name)
789 for (i = 0; i < num_in_vars; i++)
794 else if (in_desc_name !=
NULL)
797 fprintf (
FP,
" uci_put_descriptor(%s);%s", in_desc_name,
NL);
804 if (num_out_vars > 0)
806 fprintf (
FP,
"fprintf(stderr, \"uci_execute(%d, %d)\\n\"); %s", stmt_no, num_out_vars,
NL);
808 else if (out_desc_name !=
NULL)
810 fprintf (
FP,
"fprintf(stderr," " \"uci_execute(%d, (%s)->sqldesc)\\n\"); %s", stmt_no, out_desc_name,
NL);
814 fprintf (
FP,
"fprintf(stderr, \"uci_execute(%d, -1)\\n\"); %s", stmt_no,
NL);
818 if (num_out_vars > 0)
821 fprintf (
FP,
" uci_execute(%d, %d);%s", stmt_no, num_out_vars,
NL);
823 for (i = 0; i < num_out_vars; i++)
828 else if (out_desc_name !=
NULL)
831 fprintf (
FP,
" uci_execute(%d, (%s)->sqldesc);%s", stmt_no, out_desc_name,
NL);
833 fprintf (
FP,
" uci_get_descriptor(-1, %s);%s", out_desc_name,
NL);
838 fprintf (
FP,
" uci_execute(%d, -1);%s", stmt_no,
NL);
857 const char *bufsize_str;
863 fprintf (
FP,
"fprintf(stderr, " "\"uci_execute_immediate(\\\"%%s\\\", %%d)\\n\", %s, %s); %s", buf_str,
866 fprintf (
FP,
" uci_execute_immediate(%s, %s);%s", buf_str, bufsize_str,
NL);
888 fprintf (
FP,
"{%s",
NL);
893 #if defined(PRODUCE_ANSI_CODE) 894 fprintf (
FP,
" static const char *uci_attr_names[%d] = {", num_attrs);
896 fprintf (
FP,
" static char *uci_attr_names[%d] = {", num_attrs);
898 for (i = 0; i < num_attrs; i++)
900 fprintf (
FP,
"%s\"%s\"", (i > 0 ?
"," :
""), attr_names[i]);
902 fprintf (
FP,
"};%s",
NL);
907 fprintf (
FP,
" uci_object_describe(%s, %d, uci_attr_names, %s);%s",
pp_get_expr (obj), num_attrs, desc_name,
NL);
932 const char *desc_name)
936 fprintf (
FP,
"{%s",
NL);
941 #if defined(PRODUCE_ANSI_CODE) 942 fprintf (
FP,
" static const char *uci_attr_names[%d] = {", num_attrs);
944 fprintf (
FP,
" static char *uci_attr_names[%d] = {", num_attrs);
946 for (i = 0; i < num_attrs; i++)
948 fprintf (
FP,
"%s\"%s\"", (i > 0 ?
"," :
""), attr_names[i]);
950 fprintf (
FP,
"};%s",
NL);
958 if (num_out_vars > 0)
961 "fprintf(stderr, " "\"uci_object_fetch(%%s, %%d, uci_attr_names, %%d)\\n\"" ", \"%s\", %d, %d); %s",
964 else if (desc_name !=
NULL)
967 "fprintf(stderr, " "\"uci_object_fetch(%%s, %%d, uci_attr_names, %%s)\\n\"" 968 ", \"%s\", %d, \"(%s)->sqldesc\"); %s",
pp_get_expr (obj), num_attrs, desc_name,
NL);
972 fprintf (
FP,
"fprintf(stderr, " "\"uci_object_fetch(%%s, %%d, uci_attr_names, -1)\\n\"" ", \"%s\", %d); %s",
976 if (num_out_vars > 0)
979 fprintf (
FP,
" uci_object_fetch(%s, %d, uci_attr_names, %d);%s",
pp_get_expr (obj), num_attrs, num_out_vars,
NL);
981 for (i = 0; i < num_out_vars; i++)
986 else if (desc_name !=
NULL)
989 fprintf (
FP,
" uci_object_fetch(%s, %d, uci_attr_names, (%s)->sqldesc);%s",
pp_get_expr (obj), num_attrs,
992 fprintf (
FP,
" uci_get_descriptor(-1, %s);%s", desc_name,
NL);
997 fprintf (
FP,
" uci_object_fetch(%s, %d, uci_attr_names, -1);%s",
pp_get_expr (obj), num_attrs,
NL);
1027 for (i = 0; i < num_in_vars; i++)
1035 fprintf (
FP,
"fprintf(stderr, \"uci_static(%%d, \\\"%%s\\\", %%ld, 0)\\n\"" ", %d, \"",
1038 fprintf (
FP,
"\", %ld); %s", (
long) length,
NL);
1043 fprintf (
FP,
"\",%ld, 0);%s", (
long) length,
NL);
1124 char *type_str =
NULL;
1125 const char *prec_str =
NULL;
1126 const char *scale_str =
NULL;
1127 const char *ctype_str =
NULL;
1128 const char *buf_str =
NULL;
1129 const char *bufsize_str =
NULL;
1130 const char *fmt =
"db_col_type(%s)";
1143 type_str = (
char *)
"DB_TYPE_SHORT";
1144 ctype_str =
"DB_TYPE_C_SHORT";
1151 type_str = (
char *)
"DB_TYPE_INTEGER";
1152 ctype_str =
"DB_TYPE_C_INT";
1159 type_str = (
char *)
"DB_TYPE_BIGINT";
1160 ctype_str =
"DB_TYPE_C_BITINT";
1167 type_str = (
char *)
"DB_TYPE_INTEGER";
1168 ctype_str =
"DB_TYPE_C_LONG";
1175 type_str = (
char *)
"DB_TYPE_FLOAT";
1176 ctype_str =
"DB_TYPE_C_FLOAT";
1183 type_str = (
char *)
"DB_TYPE_DOUBLE";
1184 ctype_str =
"DB_TYPE_C_DOUBLE";
1191 type_str = (
char *)
"DB_TYPE_VARCHAR";
1192 ctype_str =
"DB_TYPE_C_CHAR";
1205 type_str = (
char *)
"DB_TYPE_CHAR";
1206 ctype_str =
"DB_TYPE_C_CHAR";
1215 type_str = (
char *)
"DB_TYPE_NCHAR";
1216 ctype_str =
"DB_TYPE_C_NCHAR";
1225 type_str = (
char *)
"DB_TYPE_VARNCHAR";
1226 ctype_str =
"DB_TYPE_C_NCHAR";
1238 type_str = (
char *)
"DB_TYPE_BIT";
1239 ctype_str =
"DB_TYPE_C_BIT";
1248 type_str = (
char *)
"DB_TYPE_VARBIT";
1249 ctype_str =
"DB_TYPE_C_BIT";
1258 type_str = (
char *)
"DB_TYPE_SET";
1259 ctype_str =
"DB_TYPE_C_SET";
1266 type_str = (
char *)
"DB_TYPE_MULTISET";
1267 ctype_str =
"DB_TYPE_C_SET";
1274 type_str = (
char *)
"DB_TYPE_SEQUENCE";
1275 ctype_str =
"DB_TYPE_C_SET";
1284 ctype_str =
"DB_TYPE_C_SET";
1291 type_str = (
char *)
"DB_TYPE_TIME";
1292 ctype_str =
"DB_TYPE_C_TIME";
1300 type_str = (
char *)
"DB_TYPE_TIMESTAMP";
1301 ctype_str =
"DB_TYPE_C_TIMESTAMP";
1309 type_str = (
char *)
"DB_TYPE_DATE";
1310 ctype_str =
"DB_TYPE_C_DATE";
1318 type_str = (
char *)
"DB_TYPE_MONETARY";
1319 ctype_str =
"DB_TYPE_C_MONETARY";
1327 type_str = (
char *)
"DB_TYPE_OBJECT";
1328 ctype_str =
"DB_TYPE_C_OBJECT";
1335 type_str = (
char *)
"DB_TYPE_DB_VALUE";
1349 type_str = (
char *)
"DB_TYPE_UNKNOWN";
1356 fprintf (
FP,
"%s, %s, %s, %s, %s, %s);%s", type_str, prec_str, scale_str, ctype_str, buf_str, bufsize_str,
NL);
1361 free ((
void *) type_str);
1402 fprintf (
FP,
"NULL");
1404 fprintf (
FP,
");%s",
NL);
1421 switch (on_not_found.
action)
1425 fprintf (
FP,
"goto %s;%s", on_not_found.
name,
NL);
1431 fprintf (
FP,
"%s();%s", on_not_found.
name,
NL);
1443 fprintf (
FP,
" if(uci_get_sqlcode () < 0) ");
1450 fprintf (
FP,
"fprintf(stderr, \"uci_stop()\\n\"); %s",
NL);
1452 fprintf (
FP,
"uci_stop();%s",
NL);
1458 fprintf (
FP,
"goto %s;%s", on_error.
name,
NL);
1464 fprintf (
FP,
"%s();%s", on_error.
name,
NL);
1477 switch (on_warning.
action)
1483 fprintf (
FP,
"fprintf(stderr, \"uci_stop()\\n\"); %s",
NL);
1485 fprintf (
FP,
"uci_stop();%s",
NL);
1491 fprintf (
FP,
"goto %s;%s", on_warning.
name,
NL);
1497 fprintf (
FP,
"%s();%s", on_warning.
name,
NL);
1520 char *out_str =
NULL;
1522 char *end = (
char *) in_str + length - 1;
1524 char temp_buffer[1024];
1537 if (length * 4 + 1 <= 1024)
1539 out_str = temp_buffer;
1543 out_str = (
char *)
pp_malloc (length * 4 + 1);
1547 while (in_str <= end)
1554 if ((*in_str ==
'"') || (*in_str ==
'\'') || (*in_str ==
'\\') || (*in_str ==
'\n') || (*in_str ==
'\f'))
1568 if (*in_str ==
'\000')
1602 if (out_str == temp_buffer)
1604 int sz = (int) (temp - out_str) + 1;
1607 memcpy (out_str, temp_buffer, sz);
1609 *counter = add_count;
static void emit_end(void)
static void tr_delete_cs(int cs_no)
static const char * c_type_to_db_type_c[]
static void tr_static(const char *stmt, int length, bool repeat, int num_in_vars, HOST_REF *in_vars, const char *in_desc_name, int num_out_vars, HOST_REF *out_vars, const char *out_desc_name)
static void emit_put_db_value(HOST_REF *host)
static void emit_start(int leading_brace)
static void tr_set_line_terminator(const char *)
static void tr_execute_immediate(HOST_REF *stmt)
ESQL_TRANSLATE_TABLE esql_Translate_table
static void tr_object_update(const char *set_expr, int length, bool repetitive, int num_in_vars, HOST_REF *in_vars)
static void emit_whenever(void)
#define WARN_CHAR_MACRO_NAME
static void tr_rollback(void)
static void tr_print_n_string(char *stmt, int length)
static void tr_disconnect(void)
void esql_yyverror(const char *,...)
static void tr_object_fetch(HOST_REF *obj, int num_attrs, const char **attr_names, int num_out_vars, HOST_REF *out_vars, const char *desc_name)
static void emit_get_db_value(int cs_no, HOST_REF *host)
char * pp_get_ind_addr_expr(HOST_REF *ref)
#define REPETITIVE_SERIAL_NO
static void tr_connect(HOST_REF *db_name, HOST_REF *user_name, HOST_REF *passwd)
const char * pp_get_msg(int msg_set, int msg_num)
static void tr_describe(int stmt_no, const char *desc_name)
static void tr_commit(void)
char * pp_get_expr(HOST_REF *ref)
static void tr_execute(int stmt_no, int num_in_vars, HOST_REF *in_vars, const char *in_desc_name, int num_out_vars, HOST_REF *out_vars, const char *out_desc_name)
#define ESQL_FILE_ID_VAR_NAME
static void tr_open_cs(int cs_no, const char *stmt, int length, int stmt_no, bool readonly, int num_in_vars, HOST_REF *in_vars, const char *desc_name)
static void tr_whenever(WHEN_CONDITION condition, WHEN_ACTION action, const char *name)
enum when_action WHEN_ACTION
#define NOT_FOUND_MACRO_NAME
static void tr_prepare_esql(int stmt_no, HOST_REF *stmt)
static void tr_update_cs(int cs_no, const char *text, int length, bool repetitive, int num_in_vars, HOST_REF *in_vars)
static void tr_object_describe(HOST_REF *obj, int num_attrs, const char **attr_names, const char *desc_name)
static FILE * c_out_stream
static void get_quasi_string(HOST_REF *ref, const char **buf_str, const char **bufsize_str)
void emit_line_directive(void)
static WHEN_DESC on_not_found
char * pp_get_output_size(HOST_REF *ref)
static void tr_close_cs(int cs_no)
enum when_condition WHEN_CONDITION
char * pp_get_input_size(HOST_REF *ref)
static char * escape_string(const char *, int length, int *counter)
#define free_and_init(ptr)
static void tr_set_out_stream(FILE *out_stream)
struct when_desc WHEN_DESC
C_TYPE pp_get_type(HOST_REF *ref)
static WHEN_DESC on_error
char * pp_get_addr_expr(HOST_REF *ref)
char * pp_get_precision(HOST_REF *ref)
static void tr_fetch_cs(int cs_no, int num_out_vars, HOST_REF *out_vars, const char *desc_name)
int pp_disable_varchar_length
static WHEN_DESC on_warning