Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8715789

Browse files
author
Michael Meskes
committed
Made sure SET DESCRIPTOR accepts all data types including constants.
1 parenta72dd7a commit8715789

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
#definePOSTGRES_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
#definePOSTGRES_ECPG_INTERNAL
@@ -436,6 +436,7 @@ ECPGset_desc(int lineno, char *desc_name, int index,...)
436436
va_listargs;
437437
structdescriptor*desc;
438438
structdescriptor_item*desc_item;
439+
structvariable*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= (structvariable*)ECPGalloc(sizeof(structvariable),lineno)))
468+
return false;
469+
466470
va_start(args,index);
467471

468472
do
469473
{
470474
enumECPGdtypeitemtype;
471-
longvarcharsize;
472-
longoffset;
473-
longarrsize;
474-
enumECPGttypevartype;
475-
void*var;
475+
enumECPGttypetype;
476+
constchar*tobeinserted=NULL;
477+
boolmalloced;
476478

477479
itemtype=va_arg(args,enumECPGdtype);
478480

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

482-
vartype=va_arg(args,enumECPGttype);
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,enumECPGttype);
485+
ECPGget_variable(&args,type,var, false);
487486

488487
switch (itemtype)
489488
{
490489
caseECPGd_data:
491490
{
492-
// FIXME: how to do this in general?
493-
switch (vartype)
491+
if (!ECPGstore_input(lineno, true,var,&tobeinserted,&malloced))
494492
{
495-
caseECPGt_char:
496-
desc_item->data=strdup((char*)var);
497-
break;
498-
caseECPGt_int:
499-
{
500-
charbuf[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
caseECPGd_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
caseECPGd_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
caseECPGd_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
caseECPGd_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
caseECPGd_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
chartype_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)

[8]ページ先頭

©2009-2025 Movatter.jp