1
- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.11 2003/06/20 12:00:59 meskes Exp $ */
1
+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.12 2003/06/25 10:44:21 meskes Exp $ */
2
2
3
3
/*
4
4
* The aim is to get a simpler inteface to the database routines.
@@ -88,7 +88,7 @@ quote_postgres(char *arg, int lineno)
88
88
* ind_offset - indicator offset
89
89
*/
90
90
static bool
91
- create_statement (int lineno , struct connection * connection , struct statement * * stmt , char * query , va_list ap )
91
+ create_statement (int lineno , int compat , int force_indicator , struct connection * connection , struct statement * * stmt , char * query , va_list ap )
92
92
{
93
93
struct variable * * list = & ((* stmt )-> inlist );
94
94
enum ECPGttype type ;
@@ -99,6 +99,8 @@ create_statement(int lineno, struct connection * connection, struct statement **
99
99
(* stmt )-> command = query ;
100
100
(* stmt )-> connection = connection ;
101
101
(* stmt )-> lineno = lineno ;
102
+ (* stmt )-> compat = compat ;
103
+ (* stmt )-> force_indicator = force_indicator ;
102
104
103
105
list = & ((* stmt )-> inlist );
104
106
@@ -428,7 +430,7 @@ ECPGstore_result(const PGresult *results, int act_field,
428
430
429
431
if (!ECPGget_data (results , act_tuple , act_field , stmt -> lineno ,
430
432
var -> type , var -> ind_type , current_data_location ,
431
- var -> ind_value , len , 0 , 0 , isarray ))
433
+ var -> ind_value , len , 0 , 0 , isarray , stmt -> compat , stmt -> force_indicator ))
432
434
status = false;
433
435
else
434
436
{
@@ -447,7 +449,7 @@ ECPGstore_result(const PGresult *results, int act_field,
447
449
{
448
450
if (!ECPGget_data (results , act_tuple , act_field , stmt -> lineno ,
449
451
var -> type , var -> ind_type , var -> value ,
450
- var -> ind_value , var -> varcharsize , var -> offset , var -> ind_offset , isarray ))
452
+ var -> ind_value , var -> varcharsize , var -> offset , var -> ind_offset , isarray , stmt -> compat , stmt -> force_indicator ))
451
453
status = false;
452
454
}
453
455
}
@@ -505,10 +507,16 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
505
507
* tobeinserted_p = "null" ;
506
508
break ;
507
509
#endif /* HAVE_LONG_LONG_INT_64 */
510
+ case ECPGt_NO_INDICATOR :
511
+ if (stmt -> force_indicator == false && stmt -> compat == ECPG_COMPAT_INFORMIX )
512
+ {
513
+ if (ECPGis_informix_null (var -> type , var -> value ))
514
+ * tobeinserted_p = "null" ;
515
+ }
516
+ break ;
508
517
default :
509
518
break ;
510
519
}
511
-
512
520
if (* * tobeinserted_p == '\0' )
513
521
{
514
522
switch (var -> type )
@@ -1222,7 +1230,7 @@ ECPGexecute(struct statement * stmt)
1222
1230
}
1223
1231
1224
1232
bool
1225
- ECPGdo (int lineno , const char * connection_name , char * query ,...)
1233
+ ECPGdo (int lineno , int compat , int force_indicator , const char * connection_name , char * query ,...)
1226
1234
{
1227
1235
va_list args ;
1228
1236
struct statement * stmt ;
@@ -1244,7 +1252,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
1244
1252
1245
1253
/* construct statement in our own structure */
1246
1254
va_start (args , query );
1247
- if (create_statement (lineno , con , & stmt , query , args ) == false)
1255
+ if (create_statement (lineno , compat , force_indicator , con , & stmt , query , args ) == false)
1248
1256
{
1249
1257
setlocale (LC_NUMERIC , oldlocale );
1250
1258
ECPGfree (oldlocale );
@@ -1280,7 +1288,8 @@ bool
1280
1288
ECPGdo_descriptor (int line , const char * connection ,
1281
1289
const char * descriptor , const char * query )
1282
1290
{
1283
- return ECPGdo (line , connection , (char * ) query , ECPGt_EOIT ,
1291
+ return ECPGdo (line , ECPG_COMPAT_PGSQL , true, connection , (char * ) query , ECPGt_EOIT ,
1284
1292
ECPGt_descriptor , descriptor , 0L , 0L , 0L ,
1285
1293
ECPGt_NO_INDICATOR , NULL , 0L , 0L , 0L , ECPGt_EORT );
1286
1294
}
1295
+
0 commit comments