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

Commit03ad5da

Browse files
author
Michael Meskes
committed
- Only use typedefs inside their scope.
- Variables that are out of scope, were not removed all the time.- Make a varchar NULL set everything to 0 when not using indicators.- Synced parser.
1 parent4eb5f0a commit03ad5da

File tree

10 files changed

+116
-34
lines changed

10 files changed

+116
-34
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,6 +1814,13 @@ Thu Jun 17 13:50:06 CEST 2004
18141814
Sun Jun 20 12:44:01 CEST 2004
18151815

18161816
- Synced parser and keyword list.
1817+
1818+
Sun Jun 27 13:50:58 CEST 2004
1819+
1820+
- Only use typedefs inside their scope.
1821+
- Variables that are out of scope, were not removed all the time.
1822+
- Make a varchar NULL set everything to 0 when not using indicators.
1823+
- Synced parser.
18171824
- Set pgtypes library version to 1.2.
18181825
- Set ecpg version to 3.2.0.
18191826
- Set compat library version to 1.2.

‎src/interfaces/ecpg/compatlib/informix.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,12 +1002,12 @@ ECPG_informix_get_var(int number)
10021002
int
10031003
rsetnull(intt,char*ptr)
10041004
{
1005-
ECPGset_informix_null(t,ptr);
1005+
ECPGset_noind_null(t,ptr);
10061006
return0;
10071007
}
10081008

10091009
int
10101010
risnull(intt,char*ptr)
10111011
{
1012-
return (ECPGis_informix_null(t,ptr));
1012+
return (ECPGis_noind_null(t,ptr));
10131013
}

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.23 2004/05/05 15:03:04 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.24 2004/06/27 12:28:39 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -76,7 +76,10 @@ 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");
7981
value_for_indicator=-1;
82+
}
8083

8184
switch (ind_type)
8285
{
@@ -107,7 +110,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
107110
* Informix has an additional way to specify NULLs
108111
* note that this uses special values to denote NULL
109112
*/
110-
ECPGset_informix_null(type,var+offset*act_tuple);
113+
ECPGset_noind_null(type,var+offset*act_tuple);
111114
}
112115
else
113116
{
@@ -411,7 +414,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
411414
if (INFORMIX_MODE(compat))
412415
{
413416
/* Informix wants its own NULL value here instead of an error */
414-
ECPGset_informix_null(ECPGt_numeric,nres);
417+
ECPGset_noind_null(ECPGt_numeric,nres);
415418
}
416419
else
417420
{
@@ -454,7 +457,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
454457
if (INFORMIX_MODE(compat))
455458
{
456459
/* Informix wants its own NULL value here instead of an error */
457-
ECPGset_informix_null(ECPGt_interval,ires);
460+
ECPGset_noind_null(ECPGt_interval,ires);
458461
}
459462
else
460463
{
@@ -493,7 +496,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
493496
if (INFORMIX_MODE(compat))
494497
{
495498
/* Informix wants its own NULL value here instead of an error */
496-
ECPGset_informix_null(ECPGt_date,&ddres);
499+
ECPGset_noind_null(ECPGt_date,&ddres);
497500
}
498501
else
499502
{
@@ -531,7 +534,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
531534
if (INFORMIX_MODE(compat))
532535
{
533536
/* Informix wants its own NULL value here instead of an error */
534-
ECPGset_informix_null(ECPGt_timestamp,&tres);
537+
ECPGset_noind_null(ECPGt_timestamp,&tres);
535538
}
536539
else
537540
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.33 2004/05/05 15:03:04 meskes Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.34 2004/06/27 12:28:40 meskes Exp $ */
22

33
/*
44
* The aim is to get a simpler inteface to the database routines.
@@ -532,7 +532,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
532532
caseECPGt_NO_INDICATOR:
533533
if (stmt->force_indicator== false)
534534
{
535-
if (ECPGis_informix_null(var->type,var->value))
535+
if (ECPGis_noind_null(var->type,var->value))
536536
*tobeinserted_p="null";
537537
}
538538
break;

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/misc.c,v 1.20 2004/03/14 14:47:33 momjian Exp $ */
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/misc.c,v 1.21 2004/06/27 12:28:40 meskes Exp $ */
22

33
#definePOSTGRES_ECPG_INTERNAL
44
#include"postgres_fe.h"
@@ -266,7 +266,7 @@ ECPGlog(const char *format,...)
266266
}
267267

268268
void
269-
ECPGset_informix_null(enumECPGttypetype,void*ptr)
269+
ECPGset_noind_null(enumECPGttypetype,void*ptr)
270270
{
271271
switch (type)
272272
{
@@ -301,6 +301,7 @@ ECPGset_informix_null(enum ECPGttype type, void *ptr)
301301
break;
302302
caseECPGt_varchar:
303303
*(((structECPGgeneric_varchar*)ptr)->arr)=0x00;
304+
((structECPGgeneric_varchar*)ptr)->len=0;
304305
break;
305306
caseECPGt_decimal:
306307
memset((char*)ptr,0,sizeof(decimal));
@@ -331,7 +332,7 @@ _check(unsigned char *ptr, int length)
331332
}
332333

333334
bool
334-
ECPGis_informix_null(enumECPGttypetype,void*ptr)
335+
ECPGis_noind_null(enumECPGttypetype,void*ptr)
335336
{
336337
switch (type)
337338
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ voidECPGraise_backend(int line, PGresult *result, PGconn *conn, int compat);
7777
boolECPGget_desc_header(int,char*,int*);
7878
boolECPGget_desc(int,char*,int,...);
7979

80-
voidECPGset_informix_null(enumECPGttype,void*);
81-
boolECPGis_informix_null(enumECPGttype,void*);
80+
voidECPGset_noind_null(enumECPGttype,void*);
81+
boolECPGis_noind_null(enumECPGttype,void*);
8282
boolECPGdescribe(int,bool,constchar*,...);
8383

8484
/* dynamic result allocation */

‎src/interfaces/ecpg/preproc/extern.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ extern struct typedefs *get_typedef(char *);
8282
externvoidadjust_array(enumECPGttype,char**,char**,char*,char*,int,bool);
8383
externvoidreset_variables(void);
8484
externvoidcheck_indicator(structECPGtype*);
85+
externvoidremove_typedefs(int);
8586
externvoidremove_variables(int);
8687
externstructvariable*new_variable(constchar*,structECPGtype*,int);
8788
externScanKeyword*ScanKeywordLookup(char*text);

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

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.288 2004/06/20 10:45:47 meskes Exp $*/
1+
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.289 2004/06/27 12:28:42 meskes Exp $*/
22

33
/* Copyright comment*/
44
%{
@@ -542,7 +542,7 @@ add_additional_variables(char *name, bool insert)
542542
%type<str>inf_val_listinf_col_listusing_descriptorinto_descriptor
543543
%type<str>ecpg_into_usingprepared_namestruct_union_type_with_symbol
544544
%type<str>ECPGunreservedECPGunreserved_intervalcvariable
545-
%type<str>AlterDbOwnerStmtOptTableSpaceOwnerCreateTableSpaceStmt
545+
%type<str>AlterOwnerStmtOptTableSpaceOwnerCreateTableSpaceStmt
546546
%type<str>DropTableSpaceStmtindirectionindirection_el
547547

548548
%type<struct_union>s_struct_union_symbol
@@ -578,7 +578,7 @@ statement: ecpgstart opt_at stmt ';'{ connection = NULL; }
578578
|c_thing{ fprintf(yyout,"%s",$1); free($1); }
579579
|CPP_LINE{ fprintf(yyout,"%s",$1); free($1); }
580580
|'{'{ braces_open++; fputs("{", yyout); }
581-
|'}'{ remove_variables(braces_open--); fputs("}", yyout); }
581+
|'}'{remove_typedefs(braces_open);remove_variables(braces_open--); fputs("}", yyout); }
582582
;
583583

584584
opt_at:ATconnection_target
@@ -594,9 +594,9 @@ opt_at: AT connection_target
594594
};
595595

596596
stmt:AlterDatabaseSetStmt{ output_statement($1,0, connection); }
597-
|AlterDbOwnerStmt{ output_statement($1,0, connection); }
598597
|AlterDomainStmt{ output_statement($1,0, connection); }
599598
|AlterGroupStmt{ output_statement($1,0, connection); }
599+
|AlterOwnerStmt{ output_statement($1,0, connection); }
600600
|AlterSeqStmt{ output_statement($1,0, connection); }
601601
|AlterTableStmt{ output_statement($1,0, connection); }
602602
|AlterUserSetStmt{ output_statement($1,0, connection); }
@@ -2385,12 +2385,42 @@ RenameStmt: ALTER AGGREGATE func_name '(' aggr_argtype ')' RENAME TO name
23852385
{$$ = cat_str(6, make_str("alter trigger"),$3, make_str("on"),$5, make_str("rename to"),$8); }
23862386
|ALTERUSERUserIdRENAMETOUserId
23872387
{$$ = cat_str(4, make_str("alter user"),$3, make_str("rename to"),$6); }
2388+
|ALTERTABLESPACEnameRENAMETOname
2389+
{$$ = cat_str(4, make_str("alter tablespace"),$3, make_str("rename to"),$6); }
23882390
;
23892391

23902392
opt_column:COLUMN{$$ = make_str("column"); }
23912393
|/*EMPTY*/{$$ = EMPTY; }
23922394
;
23932395

2396+
/*****************************************************************************
2397+
*
2398+
* ALTER THING name OWNER TO newname.
2399+
*
2400+
*****************************************************************************/
2401+
2402+
AlterOwnerStmt:ALTERAGGREGATEfunc_name'('aggr_argtype')'OWNERTOUserId
2403+
{$$ = cat_str(6, make_str("alter aggregate"),$3, make_str("("),$5, make_str(") owner to"),$9); }
2404+
|ALTERCONVERSION_Pany_nameOWNERTOUserId
2405+
{$$ = cat_str(4, make_str("alter conversion"),$3, make_str("owner to"),$6); }
2406+
|ALTERDATABASEdatabase_nameOWNERTOUserId
2407+
{$$ = cat_str(4, make_str("alter database"),$3, make_str("owner to"),$6); }
2408+
|ALTERDOMAIN_Pdatabase_nameOWNERTOUserId
2409+
{$$ = cat_str(4, make_str("alter domain"),$3, make_str("owner to"),$6); }
2410+
|ALTERFUNCTIONfunc_namefunc_argsOWNERTOUserId
2411+
{$$ = cat_str(5, make_str("alter function"),$3,$4, make_str("owner to"),$7); }
2412+
|ALTEROPERATORany_operator'('oper_argtypes')'OWNERTOUserId
2413+
{$$ = cat_str(6, make_str("alter operator"),$3, make_str("("),$5, make_str(") owner to"),$9); }
2414+
|ALTEROPERATORCLASSany_nameUSINGaccess_methodOWNERTOUserId
2415+
{$$ = cat_str(6, make_str("alter operator class"),$4, make_str("using"),$6, make_str("owner to"),$9); }
2416+
|ALTERSCHEMAnameOWNERTOUserId
2417+
{$$ = cat_str(4, make_str("alter schema"),$3, make_str("owner to"),$6); }
2418+
|ALTERTYPE_Pany_nameOWNERTOUserId
2419+
{$$ = cat_str(4, make_str("alter type"),$3, make_str("owner to"),$6); }
2420+
|ALTERTABLESPACEnameOWNERTOUserId
2421+
{$$ = cat_str(4, make_str("alter tablespace"),$3, make_str("owner to"),$6); }
2422+
;
2423+
23942424

23952425
/*****************************************************************************
23962426
*
@@ -2589,8 +2619,6 @@ opt_equal: '='{ $$ = make_str("="); }
25892619
*
25902620
*****************************************************************************/
25912621

2592-
AlterDbOwnerStmt:ALTERDATABASEdatabase_nameOWNERTOUserId
2593-
{$$ = cat_str(4, make_str("alter database"),$3, make_str("owner to"),$6); }
25942622
AlterDatabaseSetStmt:ALTERDATABASEdatabase_nameSETset_rest
25952623
{$$ = cat_str(4, make_str("alter database"),$3, make_str("set"),$5); }
25962624
|ALTERDATABASEdatabase_nameVariableResetStmt
@@ -2632,8 +2660,6 @@ AlterDomainStmt:
26322660
{$$ = cat_str(4, make_str("alter domain"),$3, make_str("add"),$5); }
26332661
|ALTERDOMAIN_Pany_nameDROPCONSTRAINTnameopt_drop_behavior
26342662
{$$ = cat_str(5, make_str("alter domain"),$3, make_str("drop constraint"),$6,$7); }
2635-
|ALTERDOMAIN_Pany_nameOWNERTOUserId
2636-
{$$ = cat_str(4, make_str("alter domain"),$3, make_str("owner to"),$6); }
26372663
;
26382664

26392665
opt_as:AS{$$ = make_str("as"); }
@@ -4582,6 +4608,7 @@ type_declaration: S_TYPEDEF
45824608
/* initial definition*/
45834609
this->next = types;
45844610
this->name =$5;
4611+
this->brace_level = braces_open;
45854612
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
45864613
this->type->type_enum =$3.type_enum;
45874614
this->type->type_str = mm_strdup($5);
@@ -4897,6 +4924,7 @@ struct_union_type_with_symbol: s_struct_union_symbol
48974924
/* initial definition*/
48984925
this->next = types;
48994926
this->name = mm_strdup(su_type.type_str);
4927+
this->brace_level = braces_open;
49004928
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
49014929
this->type->type_enum = su_type.type_enum;
49024930
this->type->type_str = mm_strdup(su_type.type_str);
@@ -5417,6 +5445,7 @@ ECPGTypedef: TYPE_P
54175445
/* initial definition*/
54185446
this->next = types;
54195447
this->name =$3;
5448+
this->brace_level = braces_open;
54205449
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
54215450
this->type->type_enum =$5.type_enum;
54225451
this->type->type_str = mm_strdup($3);

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,26 +123,27 @@ struct cursor
123123

124124
structtypedefs
125125
{
126-
char*name;
127-
structthis_type*type;
128-
structECPGstruct_member*struct_member_list;
129-
structtypedefs*next;
126+
char*name;
127+
structthis_type*type;
128+
structECPGstruct_member*struct_member_list;
129+
intbrace_level;
130+
structtypedefs*next;
130131
};
131132

132133
struct_defines
133134
{
134-
char*old;
135-
char*new;
136-
intpertinent;
135+
char*old;
136+
char*new;
137+
intpertinent;
137138
struct_defines*next;
138139
};
139140

140141
/* This is a linked list of the variable names and types. */
141142
structvariable
142143
{
143-
char*name;
144+
char*name;
144145
structECPGtype*type;
145-
intbrace_level;
146+
intbrace_level;
146147
structvariable*next;
147148
};
148149

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

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,47 @@ find_variable(char *name)
275275
return (p);
276276
}
277277

278+
void
279+
remove_typedefs(intbrace_level)
280+
{
281+
structtypedefs*p,
282+
*prev;
283+
284+
for (p=prev=types;p;)
285+
{
286+
if (p->brace_level >=brace_level)
287+
{
288+
/* remove it */
289+
if (p==types)
290+
prev=types=p->next;
291+
else
292+
prev->next=p->next;
293+
294+
if (p->type->type_enum==ECPGt_struct||p->type->type_enum==ECPGt_union)
295+
free(p->struct_member_list);
296+
free(p->type);
297+
free(p->name);
298+
free(p);
299+
if (prev==types)
300+
p=types;
301+
else
302+
p=prev ?prev->next :NULL;
303+
}
304+
else
305+
{
306+
prev=p;
307+
p=prev->next;
308+
}
309+
}
310+
}
311+
278312
void
279313
remove_variables(intbrace_level)
280314
{
281315
structvariable*p,
282316
*prev;
283317

284-
for (p=prev=allvariables;p;p=p ?p->next :NULL)
318+
for (p=prev=allvariables;p;)
285319
{
286320
if (p->brace_level >=brace_level)
287321
{
@@ -326,10 +360,16 @@ remove_variables(int brace_level)
326360
ECPGfree_type(p->type);
327361
free(p->name);
328362
free(p);
329-
p=prev;
363+
if (prev==allvariables)
364+
p=allvariables;
365+
else
366+
p=prev ?prev->next :NULL;
330367
}
331368
else
369+
{
332370
prev=p;
371+
p=prev->next;
372+
}
333373
}
334374
}
335375

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp