Skip to content

Commit 6fb3c3f

Browse files
author
Michael Meskes
committed
*** empty log message ***
1 parent 06d95d9 commit 6fb3c3f

File tree

6 files changed

+99
-55
lines changed

6 files changed

+99
-55
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,3 +674,14 @@ Thu Oct 7 15:12:58 CEST 1999
674674
- Set ecpg version to 2.6.6
675675
- Set library version to 3.0.4
676676

677+
Tue Oct 12 07:26:50 CEST 1999
678+
679+
- Simplified C part of parser.
680+
681+
Fri Oct 15 17:05:25 CEST 1999
682+
683+
- Synced preproc.y with gram.y.
684+
- Synced pgc.l with scan.l.
685+
- Synced keyword.c.
686+
- Finished C parser changes, so initializers are correctly parsed.
687+
- Set ecpg version to 2.6.7

src/interfaces/ecpg/TODO

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ support for dynamic SQL with unknown number of variables with DESCRIPTORS
1313

1414
The line numbering is not exact.
1515

16+
What happens to the output variable during read if there was an
17+
indicator-error?
18+
19+
Add a semantic check level, e.g. check if a table really exists.
20+
1621
Missing statements:
17-
- exec slq ifdef
22+
- exec sql ifdef
1823
- exec sql allocate
1924
- exec sql deallocate
2025
- SQLSTATE

src/interfaces/ecpg/preproc/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
33

44
MAJOR_VERSION=2
55
MINOR_VERSION=6
6-
PATCHLEVEL=6
6+
PATCHLEVEL=7
77

88
CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
99
-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \

src/interfaces/ecpg/preproc/keywords.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.18 1999/10/08 11:05:02 meskes Exp $
10+
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.19 1999/10/15 19:02:08 meskes Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -61,6 +61,7 @@ static ScanKeyword ScanKeywords[] = {
6161
{"coalesce", COALESCE},
6262
{"collate", COLLATE},
6363
{"column", COLUMN},
64+
{"comment", COMMENT},
6465
{"commit", COMMIT},
6566
{"committed", COMMITTED},
6667
{"constraint", CONSTRAINT},

src/interfaces/ecpg/preproc/pgc.l

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
/* This is a modified version of src/backend/parser/scan.l */
23
%{
34
#include <ctype.h>
@@ -90,6 +91,10 @@ xhstop {quote}
9091
xhinside [^']*
9192
xhcat {quote}{space}*\n{space}*{quote}
9293

94+
/* C version of hex number
95+
*/
96+
xch 0[xX][0-9A-Fa-f]*
97+
9398
/* Extended quote
9499
* xqdouble implements SQL92 embedded quote
95100
* xqcat allows strings to cross input lines
@@ -150,10 +155,10 @@ real (((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digi
150155

151156
param \${integer}
152157

153-
comment ("--"|"//").*\n
158+
comment ("--"|"//").*
154159
ccomment "//".*\n
155160

156-
space [ \t\n\f]
161+
space [ \t\n\r\f]
157162
other .
158163

159164
/* some stuff needed for ecpg */
@@ -242,7 +247,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
242247
}
243248
<xq>{xqstop} {
244249
BEGIN(SQL);
245-
/* yylval.str = mm_strdup(scanstr(literal));*/
246250
yylval.str = mm_strdup(literal);
247251
return SCONST;
248252
}
@@ -319,13 +323,6 @@ cppline {space}*#.*(\\{space}*\n)*\n*
319323
if (*endptr != '\0' || errno == ERANGE)
320324
{
321325
errno = 0;
322-
#if 0
323-
yylval.dval = strtod(((char *)yytext),&endptr);
324-
if (*endptr != '\0' || errno == ERANGE)
325-
yyerror("ERROR: Bad integer input");
326-
yyerror("WARNING: Integer input is out of range; promoted to float");
327-
return FCONST;
328-
#endif
329326
yylval.str = mm_strdup((char*)yytext);
330327
return SCONST;
331328
}
@@ -414,6 +411,19 @@ cppline {space}*#.*(\\{space}*\n)*\n*
414411
<SQL>{other} { return yytext[0]; }
415412
<C>{exec}{space}*{sql} { BEGIN SQL; return SQL_START; }
416413
<C>{ccomment} { /* ignore */ }
414+
<C>{xch} {
415+
char* endptr;
416+
417+
errno = 0;
418+
yylval.ival = strtol((char *)yytext,&endptr,16);
419+
if (*endptr != '\0' || errno == ERANGE)
420+
{
421+
errno = 0;
422+
yylval.str = mm_strdup((char*)yytext);
423+
return SCONST;
424+
}
425+
return ICONST;
426+
}
417427
<C>{cppline} {
418428
yylval.str = mm_strdup((char*)yytext);
419429
return(CPP_LINE);
@@ -470,7 +480,7 @@ cppline {space}*#.*(\\{space}*\n)*\n*
470480
<C>\[ { return('['); }
471481
<C>\] { return(']'); }
472482
<C>\= { return('='); }
473-
<C>{other} { return S_ANYTHING; }
483+
<C>{other} { return S_ANYTHING; }
474484
<C>{exec}{space}{sql}{space}{define} {BEGIN(def_ident);}
475485
<def_ident>{space} {}
476486
<def_ident>{identifier} {

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
724724
*/
725725
%token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYZE,
726726
BACKWARD, BEFORE, BINARY,
727-
CACHE, CLUSTER, COPY, CREATEDB, CREATEUSER, CYCLE,
727+
CACHE, CLUSTER, COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE,
728728
DATABASE, DELIMITERS, DO,
729729
EACH, ENCODING, EXCLUSIVE, EXPLAIN, EXTEND,
730730
FORWARD, FUNCTION, HANDLER,
@@ -785,7 +785,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
785785
%type <str> update_target_el opt_id relation_name database_name
786786
%type <str> access_method attr_name class index_name name func_name
787787
%type <str> file_name AexprConst ParamNo TypeId
788-
%type <str> in_expr_nodes a_expr b_expr TruncateStmt
788+
%type <str> in_expr_nodes a_expr b_expr TruncateStmt CommentStmt
789789
%type <str> opt_indirection expr_list extract_list extract_arg
790790
%type <str> position_list substr_list substr_from
791791
%type <str> trim_list in_expr substr_for attr attrs
@@ -839,15 +839,15 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
839839
%type <str> constraints_set_mode
840840

841841
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
842-
%type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
843-
%type <str> storage_clause opt_initializer vartext c_anything blockstart
844-
%type <str> blockend variable_list variable var_anything do_anything
842+
%type <str> indicator ECPGExecute ecpg_expr ECPGPrepare
843+
%type <str> storage_clause opt_initializer c_anything blockstart
844+
%type <str> blockend variable_list variable c_thing c_term
845845
%type <str> opt_pointer cvariable ECPGDisconnect dis_name
846846
%type <str> stmt symbol opt_symbol ECPGRelease execstring server_name
847-
%type <str> connection_object opt_server opt_port c_thing opt_reference
847+
%type <str> connection_object opt_server opt_port c_stuff opt_reference
848848
%type <str> user_name opt_user char_variable ora_user ident
849-
%type <str> db_prefix server opt_options opt_connection_name
850-
%type <str> ECPGSetConnection c_line cpp_line s_enum ECPGTypedef
849+
%type <str> db_prefix server opt_options opt_connection_name c_list
850+
%type <str> ECPGSetConnection cpp_line s_enum ECPGTypedef c_args
851851
%type <str> enum_type civariableonly ECPGCursorStmt ECPGDeallocate
852852
%type <str> ECPGFree ECPGDeclare ECPGVar sql_variable_declarations
853853
%type <str> sql_declaration sql_variable_list sql_variable opt_at
@@ -882,6 +882,7 @@ opt_at: SQL_AT connection_target { connection = $2; }
882882
stmt: AddAttrStmt { output_statement($1, 0); }
883883
| AlterUserStmt { output_statement($1, 0); }
884884
| ClosePortalStmt { output_statement($1, 0); }
885+
| CommentStmt { output_statement($1, 0); }
885886
| CopyStmt { output_statement($1, 0); }
886887
| CreateStmt { output_statement($1, 0); }
887888
| CreateAsStmt { output_statement($1, 0); }
@@ -1892,7 +1893,23 @@ opt_portal_name: IN name { $$ = cat2_str(make1_str("in"), $2); }
18921893
| /*EMPTY*/ { $$ = make1_str(""); }
18931894
;
18941895

1895-
1896+
/*****************************************************************************
1897+
*
1898+
* QUERY:
1899+
* comment on [ table <relname> | column <relname>.<attribu
1900+
* is 'text'
1901+
*
1902+
*****************************************************************************/
1903+
CommentStmt: COMMENT ON COLUMN relation_name '.' attr_name IS Sconst
1904+
{
1905+
cat2_str(cat5_str(make1_str("comment on column"), $4, make1_str(","), $6, make1_str("is")), $8);
1906+
}
1907+
| COMMENT ON TABLE relation_name IS Sconst
1908+
{
1909+
cat4_str(make1_str("comment on table"), $4, make1_str("is"), $6);
1910+
}
1911+
;
1912+
18961913
/*****************************************************************************
18971914
*
18981915
* QUERY:
@@ -4195,6 +4212,7 @@ ColId: ident { $$ = $1; }
41954212
| BACKWARD { $$ = make1_str("backward"); }
41964213
| BEFORE { $$ = make1_str("before"); }
41974214
| CACHE { $$ = make1_str("cache"); }
4215+
| COMMENT { $$ = make1_str("comment"); }
41984216
| COMMITTED { $$ = make1_str("committed"); }
41994217
| CONSTRAINTS { $$ = make1_str("constraints"); }
42004218
| CREATEDB { $$ = make1_str("createdb"); }
@@ -4265,6 +4283,7 @@ ColId: ident { $$ = $1; }
42654283
| TIMEZONE_HOUR { $$ = make1_str("timezone_hour"); }
42664284
| TIMEZONE_MINUTE { $$ = make1_str("timezone_minute"); }
42674285
| TRIGGER { $$ = make1_str("trigger"); }
4286+
| TRUNCATE { $$ = make1_str("truncate"); }
42684287
| TRUSTED { $$ = make1_str("trusted"); }
42694288
| TYPE_P { $$ = make1_str("type"); }
42704289
| VALID { $$ = make1_str("valid"); }
@@ -4673,8 +4692,7 @@ type: simple_type
46734692
{
46744693
$$.type_str = $1;
46754694
$$.type_enum = ECPGt_int;
4676-
4677-
$$.type_dimension = -1;
4695+
$$.type_dimension = -1;
46784696
$$.type_index = -1;
46794697
}
46804698
| symbol
@@ -4689,7 +4707,7 @@ type: simple_type
46894707
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
46904708
}
46914709

4692-
enum_type: s_enum '{' c_line '}'
4710+
enum_type: s_enum '{' c_list '}'
46934711
{
46944712
$$ = cat4_str($1, make1_str("{"), $3, make1_str("}"));
46954713
}
@@ -4828,7 +4846,7 @@ variable: opt_pointer symbol opt_array_bounds opt_initializer
48284846
}
48294847

48304848
opt_initializer: /* empty */ { $$ = make1_str(""); }
4831-
| '=' vartext { $$ = make2_str(make1_str("="), $2); }
4849+
| '=' c_term { $$ = make2_str(make1_str("="), $2); }
48324850

48334851
opt_pointer: /* empty */ { $$ = make1_str(""); }
48344852
| '*' { $$ = make1_str("*"); }
@@ -5367,7 +5385,7 @@ action : SQL_CONTINUE {
53675385
$<action>$.command = strdup($3);
53685386
$<action>$.str = cat2_str(make1_str("goto "), $3);
53695387
}
5370-
| DO name '(' dotext ')' {
5388+
| DO name '(' c_args ')' {
53715389
$<action>$.code = W_DO;
53725390
$<action>$.command = make4_str($2, make1_str("("), $4, make1_str(")"));
53735391
$<action>$.str = cat2_str(make1_str("do"), mm_strdup($<action>$.command));
@@ -5377,7 +5395,7 @@ action : SQL_CONTINUE {
53775395
$<action>$.command = NULL;
53785396
$<action>$.str = make1_str("break");
53795397
}
5380-
| SQL_CALL name '(' dotext ')' {
5398+
| SQL_CALL name '(' c_args ')' {
53815399
$<action>$.code = W_DO;
53825400
$<action>$.command = make4_str($2, make1_str("("), $4, make1_str(")"));
53835401
$<action>$.str = cat2_str(make1_str("call"), mm_strdup($<action>$.command));
@@ -5726,11 +5744,8 @@ into_list : coutputvariable | into_list ',' coutputvariable;
57265744

57275745
ecpgstart: SQL_START { reset_variables();}
57285746

5729-
dotext: /* empty */ { $$ = make1_str(""); }
5730-
| dotext do_anything { $$ = make2_str($1, $2); }
5731-
5732-
vartext: var_anything { $$ = $1; }
5733-
| vartext var_anything { $$ = make2_str($1, $2); }
5747+
c_args: /* empty */ { $$ = make1_str(""); }
5748+
| c_list { $$ = $1; }
57345749

57355750
coutputvariable : cvariable indicator {
57365751
add_variable(&argsresult, find_variable($1), ($2 == NULL) ? &no_indicator : find_variable($2));
@@ -5754,6 +5769,7 @@ indicator: /* empty */ { $$ = NULL; }
57545769

57555770
ident: IDENT { $$ = $1; }
57565771
| CSTRING { $$ = make3_str(make1_str("\""), $1, make1_str("\"")); };
5772+
57575773
/*
57585774
* C stuff
57595775
*/
@@ -5762,13 +5778,27 @@ symbol: IDENT { $$ = $1; }
57625778

57635779
cpp_line: CPP_LINE { $$ = $1; }
57645780

5765-
c_line: c_anything { $$ = $1; }
5766-
| c_line c_anything
5767-
{
5768-
$$ = make2_str($1, $2);
5769-
}
5781+
c_stuff: c_anything { $$ = $1; }
5782+
| c_stuff c_anything
5783+
{
5784+
$$ = cat2_str($1, $2);
5785+
}
5786+
| c_stuff '(' c_stuff ')'
5787+
{
5788+
$$ = cat4_str($1, make1_str("("), $3, make1_str(")"));
5789+
}
5790+
5791+
c_list: c_term { $$ = $1; }
5792+
| c_term ',' c_list { $$ = make3_str($1, make1_str(","), $3); }
5793+
5794+
c_term: c_stuff { $$ = $1; }
5795+
| '{' c_list '}' { $$ = make3_str(make1_str("{"), $2, make1_str("}")); }
57705796

5771-
c_thing: c_anything | ';' { $$ = make1_str(";"); }
5797+
c_thing: c_anything { $$ = $1; }
5798+
| '(' { $$ = make1_str("("); }
5799+
| ')' { $$ = make1_str(")"); }
5800+
| ',' { $$ = make1_str(","); }
5801+
| ';' { $$ = make1_str(";"); }
57725802

57735803
c_anything: IDENT { $$ = $1; }
57745804
| CSTRING { $$ = make3_str(make1_str("\""), $1, make1_str("\"")); }
@@ -5800,22 +5830,9 @@ c_anything: IDENT { $$ = $1; }
58005830
| S_ANYTHING { $$ = make_name(); }
58015831
| '[' { $$ = make1_str("["); }
58025832
| ']' { $$ = make1_str("]"); }
5803-
| '(' { $$ = make1_str("("); }
5804-
| ')' { $$ = make1_str(")"); }
5833+
/* | '(' { $$ = make1_str("("); }
5834+
| ')' { $$ = make1_str(")"); }*/
58055835
| '=' { $$ = make1_str("="); }
5806-
| ',' { $$ = make1_str(","); }
5807-
5808-
do_anything: IDENT { $$ = $1; }
5809-
| CSTRING { $$ = make3_str(make1_str("\""), $1, make1_str("\""));}
5810-
| Iconst { $$ = $1; }
5811-
| Fconst { $$ = $1; }
5812-
| ',' { $$ = make1_str(","); }
5813-
5814-
var_anything: IDENT { $$ = $1; }
5815-
| CSTRING { $$ = make3_str(make1_str("\""), $1, make1_str("\"")); }
5816-
| Iconst { $$ = $1; }
5817-
| Fconst { $$ = $1; }
5818-
| '{' c_line '}' { $$ = make3_str(make1_str("{"), $2, make1_str("}")); }
58195836

58205837
blockstart : '{' {
58215838
braces_open++;

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