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

Commitabd310a

Browse files
author
Michael Meskes
committed
Allow constants in using clauses.
1 parent5fc9f3d commitabd310a

File tree

7 files changed

+38
-8
lines changed

7 files changed

+38
-8
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,6 +1501,10 @@ Thu Jun 19 10:08:26 CEST 2003
15011501

15021502
- Added missing rdayofweek function for Informix compatibility.
15031503
- Fixed fetch into char pointer.
1504+
1505+
Fri Jun 20 13:23:07 CEST 2003
1506+
1507+
- Enabled constants in using clause.
15041508
- Set ecpg version to 3.0.0
15051509
- Set ecpg library to 4.0.0
15061510
- Set pgtypes library to 1.0.0

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.10 2003/06/15 04:07:58 momjian Exp $ */
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.11 2003/06/20 12:00:59 meskes Exp $ */
22

33
/*
44
* The aim is to get a simpler inteface to the database routines.
@@ -775,6 +775,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
775775
*malloced_p= true;
776776
}
777777
break;
778+
caseECPGt_const:
778779
caseECPGt_char_variable:
779780
{
780781
intslen=strlen((char*)var->value);
@@ -1214,7 +1215,7 @@ ECPGexecute(struct statement * stmt)
12141215
{
12151216
ECPGlog("ECPGexecute line %d: ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
12161217
stmt->lineno,notify->relname,notify->be_pid);
1217-
PQfreemem(notify);
1218+
PQfreemem(notify);
12181219
}
12191220

12201221
returnstatus;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/typename.c,v 1.5 2003/06/17 07:28:22 meskes Exp $ */
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/typename.c,v 1.6 2003/06/20 12:00:59 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -56,6 +56,8 @@ ECPGtype_name(enum ECPGttype typ)
5656
return"Timestamp";
5757
caseECPGt_interval:
5858
return"Interval";
59+
caseECPGt_char_const:
60+
return"Const";
5961
default:
6062
abort();
6163
}

‎src/interfaces/ecpg/include/ecpgtype.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ enum ECPGttype
5353
ECPGt_union,
5454
ECPGt_descriptor,/* sql descriptor, no C variable */
5555
ECPGt_char_variable,
56+
ECPGt_const,/* a constant is needed sometimes */
5657
ECPGt_EOIT,/* End of insert types. */
5758
ECPGt_EORT,/* End of result types. */
5859
ECPGt_NO_INDICATOR/* no indicator */

‎src/interfaces/ecpg/preproc/preproc.y

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.234 2003/06/19 09:52:11 meskes Exp $*/
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.235 2003/06/20 12:00:59 meskes Exp $*/
22

33
/* Copyright comment*/
44
%{
@@ -475,7 +475,7 @@ adjust_informix(struct arguments *list)
475475
%type<str>ECPGGetDescriptorHeaderECPGColLabelsingle_var_declaration
476476
%type<str>reserved_keywordunreserved_keywordecpg_intervalopt_ecpg_using
477477
%type<str>col_name_keywordfunc_name_keywordprecisionopt_scale
478-
%type<str>ECPGTypeNameusing_listECPGColLabelCommon
478+
%type<str>ECPGTypeNameusing_listECPGColLabelCommonUsingConst
479479
%type<str>inf_val_listinf_col_listusing_descriptorinto_descriptor
480480
%type<str>ecpg_into_using
481481

@@ -5196,7 +5196,19 @@ ecpg_into: INTO into_list{ $$ = EMPTY; }
51965196
|into_descriptor{$$ =$1; }
51975197
;
51985198

5199-
using_list:civar|civar','using_list;
5199+
using_list:UsingConst|UsingConst','using_list;
5200+
5201+
UsingConst:AllConst
5202+
{
5203+
if ($1[1] !='?')/* found a constant*/
5204+
{
5205+
char *length = mm_alloc(sizeof("INT_MAX")+1);
5206+
5207+
sprintf(length,"%d", strlen($1));
5208+
add_variable(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
5209+
}
5210+
}
5211+
;
52005212

52015213
/*
52025214
* As long as the prepare statement is not supported by the backend, we will

‎src/interfaces/ecpg/preproc/type.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ get_type(enum ECPGttype type)
169169
* quoted */
170170
return ("ECPGt_char_variable");
171171
break;
172+
caseECPGt_const:/* constant string quoted */
173+
return ("ECPGt_const");
174+
break;
172175
caseECPGt_numeric:
173176
return ("ECPGt_numeric");
174177
break;
@@ -381,6 +384,14 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
381384
sprintf(variable,"&(%s%s)",prefix ?prefix :"",name);
382385
sprintf(offset,"sizeof(Date)");
383386
break;
387+
caseECPGt_const:
388+
389+
/*
390+
* just dump the const as string
391+
*/
392+
sprintf(variable,"\"%s\"",name);
393+
sprintf(offset,"strlen(\"%s\")",name);
394+
break;
384395
default:
385396

386397
/*

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ exec sql begin declare section;
2727
struct birthinfo ind_birth;
2828
} ind_personal, *i;
2929
ind ind_children;
30-
c testname="Petra";
3130
char *query="select name, born, age, married, children from meskes where name = :var1";
3231
exec sql end declare section;
3332

@@ -92,7 +91,7 @@ exec sql end declare section;
9291
exec sql declare prep cursor for MM;
9392

9493
strcpy(msg, "open");
95-
exec sql open prep using:testname;
94+
exec sql open prep using'Petra';
9695

9796
exec sql whenever not found do break;
9897

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp