Skip to content

Commit 8715789

Browse files
author
Michael Meskes
committed
Made sure SET DESCRIPTOR accepts all data types including constants.
1 parent a72dd7a commit 8715789

File tree

9 files changed

+161
-137
lines changed

9 files changed

+161
-137
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,6 +1825,15 @@ Sun Jun 27 13:50:58 CEST 2004
18251825
Mon Jun 28 11:08:42 CEST 2004
18261826

18271827
- Arrays can be read as arrays or as character strings now.
1828+
1829+
Wed Jun 30 16:56:32 CEST 2004
1830+
1831+
- Added SET DESCRIPTOR command.
1832+
- Cleaned up error handling in preprocessor.
1833+
1834+
Sun Jul 4 16:53:53 CEST 2004
1835+
1836+
- Made sure SET DESCRIPTOR accepts all data types including constants.
18281837
- Set pgtypes library version to 1.2.
18291838
- Set ecpg version to 3.2.0.
18301839
- Set compat library version to 1.2.

src/interfaces/ecpg/ecpglib/data.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.25 2004/06/28 11:47:41 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.26 2004/07/04 15:02:22 meskes Exp $ */
22

33
#define POSTGRES_ECPG_INTERNAL
44
#include "postgres_fe.h"
@@ -76,10 +76,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
7676
* and 0 if not
7777
*/
7878
if (PQgetisnull(results, act_tuple, act_field))
79-
{
80-
printf("MM NULL\n");
8179
value_for_indicator = -1;
82-
}
8380

8481
switch (ind_type)
8582
{

src/interfaces/ecpg/ecpglib/descriptor.c

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* dynamic SQL support routines
22
*
3-
* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.9 2004/07/01 18:32:58 meskes Exp $
3+
* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.10 2004/07/04 15:02:22 meskes Exp $
44
*/
55

66
#define POSTGRES_ECPG_INTERNAL
@@ -436,6 +436,7 @@ ECPGset_desc(int lineno, char *desc_name, int index,...)
436436
va_list args;
437437
struct descriptor *desc;
438438
struct descriptor_item *desc_item;
439+
struct variable *var;
439440

440441
for (desc = all_descriptors; desc; desc = desc->next)
441442
{
@@ -463,76 +464,67 @@ ECPGset_desc(int lineno, char *desc_name, int index,...)
463464
desc->items = desc_item;
464465
}
465466

467+
if (!(var = (struct variable *) ECPGalloc(sizeof(struct variable), lineno)))
468+
return false;
469+
466470
va_start(args, index);
467471

468472
do
469473
{
470474
enum ECPGdtype itemtype;
471-
long varcharsize;
472-
long offset;
473-
long arrsize;
474-
enum ECPGttype vartype;
475-
void *var;
475+
enum ECPGttype type;
476+
const char *tobeinserted = NULL;
477+
bool malloced;
476478

477479
itemtype = va_arg(args, enum ECPGdtype);
478480

479481
if (itemtype == ECPGd_EODT)
480482
break;
481483

482-
vartype = va_arg(args, enum ECPGttype);
483-
var = va_arg(args, void *);
484-
varcharsize = va_arg(args, long);
485-
arrsize = va_arg(args, long);
486-
offset = va_arg(args, long);
484+
type = va_arg(args, enum ECPGttype);
485+
ECPGget_variable(&args, type, var, false);
487486

488487
switch (itemtype)
489488
{
490489
case ECPGd_data:
491490
{
492-
// FIXME: how to do this in general?
493-
switch (vartype)
491+
if (!ECPGstore_input(lineno, true, var, &tobeinserted, &malloced))
494492
{
495-
case ECPGt_char:
496-
desc_item->data = strdup((char *)var);
497-
break;
498-
case ECPGt_int:
499-
{
500-
char buf[20];
501-
snprintf(buf, 20, "%d", *(int *)var);
502-
desc_item->data = strdup(buf);
503-
break;
504-
}
505-
default:
506-
abort();
493+
ECPGfree(var);
494+
return false;
507495
}
496+
497+
desc_item->data = (char *) tobeinserted;
498+
tobeinserted = NULL;
508499
break;
509500
}
510501

511502
case ECPGd_indicator:
512-
set_int_item(lineno, &desc_item->indicator, var, vartype);
503+
set_int_item(lineno, &desc_item->indicator, var->pointer, var->type);
513504
break;
514505

515506
case ECPGd_length:
516-
set_int_item(lineno, &desc_item->length, var, vartype);
507+
set_int_item(lineno, &desc_item->length, var->pointer, var->type);
517508
break;
518509

519510
case ECPGd_precision:
520-
set_int_item(lineno, &desc_item->precision, var, vartype);
511+
set_int_item(lineno, &desc_item->precision, var->pointer, var->type);
521512
break;
522513

523514
case ECPGd_scale:
524-
set_int_item(lineno, &desc_item->scale, var, vartype);
515+
set_int_item(lineno, &desc_item->scale, var->pointer, var->type);
525516
break;
526517

527518
case ECPGd_type:
528-
set_int_item(lineno, &desc_item->type, var, vartype);
519+
set_int_item(lineno, &desc_item->type, var->pointer, var->type);
529520
break;
530521

531522
default:
532523
{
533524
char type_str[20];
534525
snprintf(type_str, sizeof(type_str), "%d", itemtype);
535526
ECPGraise(lineno, ECPG_UNKNOWN_DESCRIPTOR_ITEM, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, type_str);
527+
ECPGfree(var);
536528
return false;
537529
}
538530
}
@@ -544,6 +536,7 @@ ECPGset_desc(int lineno, char *desc_name, int index,...)
544536
}*/
545537
}
546538
while (true);
539+
ECPGfree(var);
547540

548541
return true;
549542
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy