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

Commite48cfac

Browse files
author
Michael Meskes
committed
Arrays can be read as arrays or as character strings now.
1 parent04ab0cb commite48cfac

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,6 +1821,10 @@ Sun Jun 27 13:50:58 CEST 2004
18211821
- Variables that are out of scope, were not removed all the time.
18221822
- Make a varchar NULL set everything to 0 when not using indicators.
18231823
- Synced parser.
1824+
1825+
Mon Jun 28 11:08:42 CEST 2004
1826+
1827+
- Arrays can be read as arrays or as character strings now.
18241828
- Set pgtypes library version to 1.2.
18251829
- Set ecpg version to 3.2.0.
18261830
- Set compat library version to 1.2.

‎src/interfaces/ecpg/ecpglib/data.c

Lines changed: 17 additions & 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.24 2004/06/27 12:28:39 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.25 2004/06/28 11:47:41 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -152,6 +152,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
152152
ECPGraise(lineno,ECPG_INT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
153153
return (false);
154154
}
155+
pval=scan_length;
155156
}
156157
else
157158
res=0L;
@@ -184,6 +185,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
184185
ECPGraise(lineno,ECPG_UINT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
185186
return (false);
186187
}
188+
pval=scan_length;
187189
}
188190
else
189191
ures=0L;
@@ -216,6 +218,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
216218
ECPGraise(lineno,ECPG_INT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
217219
return (false);
218220
}
221+
pval=scan_length;
219222
}
220223
else
221224
*((long longint*) (var+offset*act_tuple))= (long long)0;
@@ -233,6 +236,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
233236
ECPGraise(lineno,ECPG_UINT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
234237
return (false);
235238
}
239+
pval=scan_length;
236240
}
237241
else
238242
*((unsigned long longint*) (var+offset*act_tuple))= (long long)0;
@@ -258,6 +262,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
258262
ECPGraise(lineno,ECPG_FLOAT_FORMAT,ECPG_SQLSTATE_DATATYPE_MISMATCH,pval);
259263
return (false);
260264
}
265+
pval=scan_length;
261266
}
262267
else
263268
dres=0.0;
@@ -312,8 +317,9 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
312317

313318
caseECPGt_char:
314319
caseECPGt_unsigned_char:
320+
if (pval)
315321
{
316-
if (varcharsize==0)
322+
if (varcharsize==0||varcharsize>strlen(pval))
317323
strncpy((char*) ((long)var+offset*act_tuple),pval,strlen(pval)+1);
318324
else
319325
{
@@ -348,10 +354,12 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
348354
sqlca->sqlwarn[0]=sqlca->sqlwarn[1]='W';
349355
}
350356
}
357+
pval+=strlen(pval);
351358
}
352359
break;
353360

354361
caseECPGt_varchar:
362+
if (pval)
355363
{
356364
structECPGgeneric_varchar*variable=
357365
(structECPGgeneric_varchar*) ((long)var+offset*act_tuple);
@@ -394,6 +402,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
394402
variable->len=varcharsize;
395403
}
396404
}
405+
pval+=strlen(pval);
397406
}
398407
break;
399408

@@ -433,6 +442,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
433442
return (false);
434443
}
435444
}
445+
pval=scan_length;
436446
}
437447
else
438448
nres=PGTYPESnumeric_from_asc("0.0",&scan_length);
@@ -476,6 +486,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
476486
return (false);
477487
}
478488
}
489+
pval=scan_length;
479490
}
480491
else
481492
ires=PGTYPESinterval_from_asc("0 seconds",NULL);
@@ -517,6 +528,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
517528
}
518529

519530
*((date*) (var+offset*act_tuple))=ddres;
531+
pval=scan_length;
520532
}
521533
break;
522534

@@ -555,6 +567,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
555567
}
556568

557569
*((timestamp*) (var+offset*act_tuple))=tres;
570+
pval=scan_length;
558571
}
559572
break;
560573

@@ -571,7 +584,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
571584
++act_tuple;
572585

573586
/* set pval to the next entry */
574-
for (;string|| (*pval!=','&&*pval!='}');++pval)
587+
for (;string|| (*pval!=','&&*pval!='}'&&*pval!='\0');++pval)
575588
if (*pval=='"')
576589
string=string ? false : true;
577590

@@ -593,7 +606,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
593606
if (*pval==' ')
594607
++pval;
595608
}
596-
}while ((isarray==ECPG_ARRAY_ARRAY&&*pval!='}')||(isarray==ECPG_ARRAY_VECTOR&&*pval!='\0'));
609+
}while (*pval!='\0'&& ((isarray==ECPG_ARRAY_ARRAY&&*pval!='}')||isarray==ECPG_ARRAY_VECTOR));
597610

598611
return (true);
599612
}

‎src/interfaces/ecpg/test/test4.pgc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ EXEC SQL BEGIN DECLARE SECTION;
1313
int i = 1;
1414
int *did = &i;
1515
int a[10] = {9,8,7,6,5,4,3,2,1,0};
16-
char text[10] = "klmnopqrst";
16+
char text[25] = "klmnopqrst";
1717
char *t = (char *)malloc(10);
1818
double f;
1919
bool b = true;
@@ -64,6 +64,13 @@ EXEC SQL END DECLARE SECTION;
6464

6565
printf("Found text=%10.10s\n", t);
6666

67+
EXEC SQL SELECT a
68+
INTO :text
69+
FROM test
70+
WHERE f = :f;
71+
72+
printf("Found text=%s\n", text);
73+
6774
EXEC SQL DROP TABLE test;
6875

6976
EXEC SQL COMMIT;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp