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

Commit96ac738

Browse files
committed
From: Michael Meskes <meskes@topsystem.de>
No more shift/reduce conflicts. Also all other bugs I know about are fixed.
1 parent1a6de07 commit96ac738

File tree

13 files changed

+159
-84
lines changed

13 files changed

+159
-84
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,12 @@ Wed Feb 25 15:46:50 CET 1998
6262
- corrected whenever continue handling
6363
- removed whenever break
6464

65+
Fri Feb 27 10:51:38 CET 1998
66+
67+
- corrected parser to accept '::int2'
68+
69+
Fri Feb 27 12:00:55 CET 1998
70+
71+
- removed all shift/reduce conflicts
72+
- allow syntax 'fetch cursor' as well as 'fetch in cursor'
73+

‎src/interfaces/ecpg/TODO

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,4 @@ There is no way yet to fill a complete array with one call except arrays of
5959

6060
ecpg cannot use pointer variables except [unsigned] char *
6161

62+
List all commands as sqlcommand, not just S_SYMBOL

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ boolECPGconnect(const char *dbname);
55
boolECPGdo(int,char*,...);
66
boolECPGcommit(int);
77
boolECPGrollback(int);
8-
boolECPGfinish();
9-
boolECPGstatus();
8+
boolECPGfinish(void);
9+
boolECPGstatus(void);
1010

1111
voidECPGlog(constchar*format,...);
1212

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ enum ECPGttype
4343
};
4444

4545
#defineIS_SIMPLE_TYPE(type) ((type) >= ECPGt_char && (type) <= ECPGt_varchar2)
46+
47+
constchar*ECPGtype_name(enumECPGttype);

‎src/interfaces/ecpg/lib/Makefile.in

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ SO_MINOR_VERSION=0
88

99
PORTNAME=@PORTNAME@
1010

11+
ifdefKRBVERS
12+
CFLAGS+=$(KRBFLAGS)
13+
endif
14+
1115
# Shared library stuff
1216
shlib :=
1317
install-shlib-dep :=
@@ -20,10 +24,12 @@ ifeq ($(PORTNAME), linux)
2024
endif
2125
endif
2226
ifeq ($(PORTNAME), bsd)
23-
install-shlib-dep := install-shlib
24-
shlib := libecpg.so.$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
25-
LDFLAGS_SL = -x -Bshareable -Bforcearchive
26-
CFLAGS +=$(CFLAGS_SL)
27+
ifdef BSD_SHLIB
28+
install-shlib-dep := install-shlib
29+
shlib := libecpg.so.$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
30+
LDFLAGS_SL = -x -Bshareable -Bforcearchive
31+
CFLAGS +=$(CFLAGS_SL)
32+
endif
2733
endif
2834
#ifeq ($(PORTNAME), i386_solaris)
2935
# install-shlib-dep := install-shlib
@@ -61,6 +67,6 @@ uninstall::
6167
libecpg.a : libecpg.a(ecpglib.o) libecpg.a(typename.o)
6268

6369
ecpglib.o : ecpglib.c ../include/ecpglib.h ../include/ecpgtype.h
64-
$(CC) -I../include$(PQ_INCLUDE) -c ecpglib.c
70+
$(CC)$(CFLAGS)-I../include$(PQ_INCLUDE) -c ecpglib.c
6571
typename.o : typename.c ../include/ecpgtype.h
66-
$(CC) -I../include$(PQ_INCLUDE) -c typename.c
72+
$(CC)$(CFLAGS)-I../include$(PQ_INCLUDE) -c typename.c

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
#include<stdarg.h>
1919
#include<string.h>
2020

21+
#include<libpq-fe.h>
22+
#include<libpq/pqcomm.h>
2123
#include<ecpgtype.h>
2224
#include<ecpglib.h>
2325
#include<sqlca.h>
24-
#include<libpq-fe.h>
25-
#include<libpq/pqcomm.h>
2626

2727
staticPGconn*simple_connection=NULL;
2828
staticintsimple_debug=0;
@@ -639,14 +639,14 @@ ECPGconnect(const char *dbname)
639639

640640

641641
bool
642-
ECPGstatus()
642+
ECPGstatus(void)
643643
{
644644
returnPQstatus(simple_connection)!=CONNECTION_BAD;
645645
}
646646

647647

648648
bool
649-
ECPGfinish()
649+
ECPGfinish(void)
650650
{
651651
if (simple_connection!=NULL)
652652
{

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ usage(char *progname)
2929
int
3030
main(intargc,char*constargv[])
3131
{
32-
charc,
33-
out_option=0;
34-
intfnr;
32+
intfnr,c,out_option=0;
3533

3634
while ((c=getopt(argc,argv,"vdo:"))!=EOF)
3735
{

‎src/interfaces/ecpg/preproc/pgc.l

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ do [dD][oO]
2828
end[eE][nN][dD]
2929
exec[eE][xX][eE][cC]
3030
execute[eE][xX][eE][cC][uU][tT][eE]
31+
fetch [fF][eE][tT][cC][hH]
3132
found[fF][oO][uU][nN][dD]
33+
from [fF][rR][oO][mM]
3234
go[gG][oO]
3335
goto [gG][oO][tT][oO]
3436
immediate [iI][mM][mM][eE][dD][iI][aA][tT][eE]
3537
include [iI][nN][cC][lL][uU][dD][eE]
38+
in[iI][nN]
3639
into[iI][nN][tT][oO]
3740
not[nN][oO][tT]
3841
open[oO][pP][eE][nN]
@@ -63,17 +66,20 @@ work [wW][oO][rR][kK]
6366
<SQL>{commit}{dbg(SQL_COMMIT);return SQL_COMMIT; }
6467
<SQL>{release}{dbg(SQL_RELEASE);return SQL_RELEASE; }
6568
<SQL>{work}{dbg(SQL_WORK);return SQL_WORK; }
69+
<SQL>{fetch}{dbg(SQL_FETCH);return SQL_FETCH; }
6670
<SQL>{rollback}{dbg(SQL_ROLLBACK);return SQL_ROLLBACK; }
6771
<SQL>{whenever}{dbg(SQL_WHENEVER);return SQL_WHENEVER; }
6872
<SQL>{sqlerror}{dbg(SQL_SQLERROR);return SQL_SQLERROR; }
6973
<SQL>{sqlprint}{dbg(SQL_SQLPRINT);return SQL_SQLPRINT; }
7074
<SQL>{not}{ws}{found}{dbg(SQL_NOT_FOUND);return SQL_NOT_FOUND; }
7175
<SQL>{continue}{dbg(SQL_CONTINUE);return SQL_CONTINUE; }
7276
<SQL>{into}{dbg(SQL_INTO);return SQL_INTO; }
77+
<SQL>{in}{dbg(SQL_IN);return SQL_IN; }
7378
<SQL>{goto}{dbg(SQL_GOTO);return SQL_GOTO; }
7479
<SQL>{go}{ws}{to}{dbg(SQL_GOTO);return SQL_GOTO; }
7580
<SQL>{stop}{dbg(SQL_STOP);return SQL_STOP; }
7681
<SQL>{do}{dbg(SQL_DO);return SQL_DO; }
82+
<SQL>{from}{dbg(SQL_FROM);return SQL_FROM; }
7783

7884
{length}{dbg(S_LENGTH);return S_LENGTH; }
7985

@@ -144,6 +150,7 @@ struct{ dbg(S_STRUCT); return S_STRUCT; }
144150
\*{dbg(*);return('*'); }
145151

146152
<SQL>":"{dbg(:);return':'; }
153+
<SQL>"::"{dbg(SQL_CONV);return SQL_CONV; }
147154

148155
{ws}{ ECHO; }
149156
.{dbg(.);return S_ANYTHING; }

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

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ print_action(struct when *w)
4242
{
4343
switch (w->code)
4444
{
45-
case W_CONTINUE:fprintf(yyout,"continue;");
46-
break;
47-
case W_BREAK:fprintf(yyout,"break;");
48-
break;
4945
case W_SQLPRINT:fprintf(yyout,"sqlprint();");
5046
break;
5147
case W_GOTO:fprintf(yyout,"goto %s;", w->str);
@@ -224,12 +220,12 @@ dump_variables(struct arguments * list)
224220
structwhenaction;
225221
}
226222

227-
%token<tagname>SQL_STARTSQL_SEMISQL_STRINGSQL_INTO
223+
%token<tagname>SQL_STARTSQL_SEMISQL_STRINGSQL_INTOSQL_IN
228224
%token<tagname>SQL_BEGINSQL_ENDSQL_DECLARESQL_SECTIONSQL_INCLUDE
229225
%token<tagname>SQL_CONNECTSQL_OPENSQL_EXECUTESQL_IMMEDIATE
230226
%token<tagname>SQL_COMMITSQL_ROLLBACKSQL_RELEASESQL_WORKSQL_WHENEVER
231-
%token<tagname>SQL_SQLERRORSQL_NOT_FOUNDSQL_CONTINUE
232-
%token<tagname>SQL_DOSQL_GOTOSQL_SQLPRINTSQL_STOP
227+
%token<tagname>SQL_SQLERRORSQL_NOT_FOUNDSQL_CONTINUESQL_FROMSQL_FETCH
228+
%token<tagname>SQL_DOSQL_GOTOSQL_SQLPRINTSQL_STOPSQL_CONV
233229

234230
%token<tagname>S_SYMBOLS_LENGTHS_ANYTHINGS_LABEL
235231
%token<tagname>S_VARCHARS_VARCHAR2
@@ -241,11 +237,11 @@ dump_variables(struct arguments * list)
241237
%type<type>typetype_detailedvarchar_typesimple_typestruct_typestring_type
242238
/* % type <type> array_type pointer_type*/
243239
%type<symbolname>symbollabel
244-
%type<tagname>maybe_storage_clausevarchar_tagdb_name
240+
%type<tagname>maybe_storage_clausevarchar_tagdb_namecursor
245241
%type<type_enum>simple_tagchar_tag
246242
%type<indexsize>indexlength
247243
%type<action>action
248-
%type<tagname>canythingsqlanythingboth_anythingvartextcommit_release
244+
%type<tagname>canythingsqlanythingboth_anythingvartextcommit_releasesqlcommand
249245

250246
%%
251247
prog :statements;
@@ -262,6 +258,7 @@ statement : sqldeclaration
262258
|sqlexecute
263259
|sqlwhenever
264260
|sqlstatement
261+
|sqlfetch
265262
|cthing
266263
|blockstart
267264
|blockend;
@@ -573,9 +570,30 @@ label : S_LABEL {
573570
$<symbolname>$ = name;
574571
}
575572

573+
sqlfetch:SQL_STARTSQL_FETCH {
574+
reset_variables();
575+
fprintf(yyout,"ECPGdo(__LINE__,\"fetch in");
576+
}cursor {
577+
fwrite(yytext, yyleng,1, yyout);
578+
fwrite("",1,1, yyout);
579+
}SQL_INTOinto_listSQL_SEMI {
580+
/* Dump*/
581+
fprintf(yyout,"\",");
582+
dump_variables(argsinsert);
583+
fprintf(yyout,"ECPGt_EOIT,");
584+
dump_variables(argsresult);
585+
fprintf(yyout,"ECPGt_EORT );");
586+
whenever_action();
587+
}
588+
589+
cursor:SQL_INS_SYMBOL|S_SYMBOL;
590+
576591
sqlstatement :SQL_START {/* Reset stack*/
577592
reset_variables();
578593
fprintf(yyout,"ECPGdo(__LINE__,\"");
594+
}sqlcommand {
595+
fwrite(yytext, yyleng,1, yyout);
596+
fwrite("",1,1, yyout);
579597
}sqlstatement_wordsSQL_SEMI {
580598
/* Dump*/
581599
fprintf(yyout,"\",");
@@ -584,7 +602,10 @@ sqlstatement : SQL_START { /* Reset stack */
584602
dump_variables(argsresult);
585603
fprintf(yyout,"ECPGt_EORT );");
586604
whenever_action();
587-
};
605+
}
606+
607+
/* FIXME: instead of S_SYMBOL we should list all possible commands*/
608+
sqlcommand :S_SYMBOL|SQL_DECLARE;
588609

589610
sqlstatement_words :sqlstatement_word
590611
|sqlstatement_wordssqlstatement_word;
@@ -594,7 +615,10 @@ sqlstatement_word : ':' symbol
594615
add_variable(&argsinsert, find_variable($2));
595616
fprintf(yyout," ;;");
596617
}
597-
|SQL_INTOinto_list { }
618+
|SQL_INTOinto_listSQL_FROM {
619+
fwrite(yytext, yyleng,1, yyout);
620+
fwrite("",1,1, yyout);
621+
}
598622
|sqlanything
599623
{
600624
fwrite(yytext, yyleng,1, yyout);
@@ -610,7 +634,7 @@ sqlstatement_word : ':' symbol
610634
into_list :':'symbol {
611635
add_variable(&argsresult, find_variable($2));
612636
}
613-
|into_list','':'symbol{
637+
|into_list','':'symbol{
614638
add_variable(&argsresult, find_variable($4));
615639
};
616640

@@ -627,10 +651,10 @@ sqlanything : both_anything;
627651
both_anything :S_LENGTH|S_VARCHAR|S_VARCHAR2
628652
|S_LONG|S_SHORT|S_INT|S_CHAR|S_FLOAT|S_DOUBLE|S_BOOL
629653
|SQL_OPEN|SQL_CONNECT
630-
|SQL_STRING
654+
|SQL_STRING|SQL_CONV
631655
|SQL_BEGIN|SQL_END
632-
|SQL_DECLARE|SQL_SECTION
633-
|SQL_INCLUDE
656+
|SQL_DECLARE|SQL_SECTION|SQL_FETCH|SQL_FROM
657+
|SQL_INCLUDE|SQL_IN
634658
|S_SYMBOL|S_LABEL
635659
|S_STATIC|S_EXTERN|S_AUTO|S_CONST|S_REGISTER|S_STRUCT
636660
|'['|']'|','|'='|'*'|'('|')'

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include<stdlib.h>
44

55
#include"type.h"
6+
#include"extern.h"
67

78
/* malloc + error check */
89
void*

‎src/interfaces/ecpg/test/mm.sql

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +0,0 @@
1-
createtablemeskes(name char8, born int4, age int2);
2-
3-
insert into meskes(name, born)values ('Petra',19661202,31);
4-
insert into meskes(name, born)values ('Michael',19660117,32);
5-
insert into meskes(name, born)values ('Carsten',19910103,7);
6-
insert into meskes(name, born)values ('Marc',19930907,4);
7-
insert into meskes(name, born)values ('Chris',19970923,0);
8-

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp