Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
f3dda5be
Commit
f3dda5be
authored
19 years ago
by
Michael Meskes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Data transferred binary is now put into the variables verbatim.
Also added a test case for a binary cursor.
parent
73e35660
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
153 additions
and
58 deletions
+153
-58
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ChangeLog
+9
-0
src/interfaces/ecpg/ecpglib/Makefile
src/interfaces/ecpg/ecpglib/Makefile
+2
-2
src/interfaces/ecpg/ecpglib/data.c
src/interfaces/ecpg/ecpglib/data.c
+51
-5
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/Makefile
+2
-2
src/interfaces/ecpg/test/test5.pgc
src/interfaces/ecpg/test/test5.pgc
+89
-49
No files found.
src/interfaces/ecpg/ChangeLog
View file @
f3dda5be
...
...
@@ -1962,6 +1962,15 @@ Fri Dec 2 16:00:10 CET 2005
- Added special handling of CONNECTION variable that is used by ECPG
instead of given to the backend.
Fr Jan 13 17:29:30 CET 2006
- Fixed a fixed size buffer in preproc.y to be variable size since an
overflow could occur on the fixed one.
Tu Jan 17 18:53:03 CET 2006
- Data transferred binary is now put into the variables verbatim.
- Set ecpg library version to 5.2.
- Set ecpg version to 4.2.1.
This diff is collapsed.
Click to expand it.
src/interfaces/ecpg/ecpglib/Makefile
View file @
f3dda5be
...
...
@@ -4,7 +4,7 @@
#
# Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.3
7 2005/12/09 21:19:35 petere
Exp $
# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.3
8 2006/01/17 19:49:23 meskes
Exp $
#
#-------------------------------------------------------------------------
...
...
@@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
NAME
=
ecpg
SO_MAJOR_VERSION
=
5
SO_MINOR_VERSION
=
3
SO_MINOR_VERSION
=
2
DLTYPE
=
library
override CPPFLAGS
:
= -DFRONTEND -I$(top_srcdir)/src/interfaces/ecpg/include
\
...
...
This diff is collapsed.
Click to expand it.
src/interfaces/ecpg/ecpglib/data.c
View file @
f3dda5be
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.
29 2005/10/15 02:49:47 momjian
Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.
30 2006/01/17 19:49:23 meskes
Exp $ */
#define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h"
...
...
@@ -45,11 +45,12 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
long
ind_offset
,
enum
ARRAY_TYPE
isarray
,
enum
COMPAT_MODE
compat
,
bool
force_indicator
)
{
struct
sqlca_t
*
sqlca
=
ECPGget_sqlca
();
char
*
pval
=
(
char
*
)
PQgetvalue
(
results
,
act_tuple
,
act_field
);
int
value_for_indicator
=
0
;
ECPGlog
(
"ECPGget_data line %d: RESULT: %s offset: %ld array: %s
\n
"
,
lineno
,
pval
?
pval
:
""
,
offset
,
isarray
?
"Yes"
:
"No"
)
;
char
*
pval
=
(
char
*
)
PQgetvalue
(
results
,
act_tuple
,
act_field
);
int
binary
=
PQfformat
(
results
,
act_field
)
;
int
size
=
PQgetlength
(
results
,
act_tuple
,
act_field
);
int
value_for_indicator
=
0
;
ECPGlog
(
"ECPGget_data line %d: RESULT: %s offset: %ld array: %s
\n
"
,
lineno
,
pval
?
(
binary
?
"BINARY"
:
pval
)
:
"EMPTY"
,
offset
,
isarray
?
"Yes"
:
"No"
);
/* We will have to decode the value */
/*
...
...
@@ -131,6 +132,50 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
do
{
if
(
binary
)
{
if
(
pval
)
{
if
(
varcharsize
==
0
||
varcharsize
*
offset
>=
size
)
memcpy
((
char
*
)
((
long
)
var
+
offset
*
act_tuple
),
pval
,
size
);
else
{
memcpy
((
char
*
)
((
long
)
var
+
offset
*
act_tuple
),
pval
,
varcharsize
*
offset
);
if
(
varcharsize
*
offset
<
size
)
{
/* truncation */
switch
(
ind_type
)
{
case
ECPGt_short
:
case
ECPGt_unsigned_short
:
*
((
short
*
)
(
ind
+
ind_offset
*
act_tuple
))
=
size
;
break
;
case
ECPGt_int
:
case
ECPGt_unsigned_int
:
*
((
int
*
)
(
ind
+
ind_offset
*
act_tuple
))
=
size
;
break
;
case
ECPGt_long
:
case
ECPGt_unsigned_long
:
*
((
long
*
)
(
ind
+
ind_offset
*
act_tuple
))
=
size
;
break
;
#ifdef HAVE_LONG_LONG_INT_64
case
ECPGt_long_long
:
case
ECPGt_unsigned_long_long
:
*
((
long
long
int
*
)
(
ind
+
ind_offset
*
act_tuple
))
=
size
;
break
;
#endif
/* HAVE_LONG_LONG_INT_64 */
default:
break
;
}
sqlca
->
sqlwarn
[
0
]
=
sqlca
->
sqlwarn
[
1
]
=
'W'
;
}
}
pval
+=
size
;
}
}
else
{
switch
(
type
)
{
long
res
;
...
...
@@ -619,6 +664,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
if
(
*
pval
==
' '
)
++
pval
;
}
}
}
while
(
*
pval
!=
'\0'
&&
((
isarray
==
ECPG_ARRAY_ARRAY
&&
*
pval
!=
'}'
)
||
isarray
==
ECPG_ARRAY_VECTOR
));
return
(
true
);
...
...
This diff is collapsed.
Click to expand it.
src/interfaces/ecpg/preproc/Makefile
View file @
f3dda5be
...
...
@@ -4,7 +4,7 @@
#
# Copyright (c) 1998-2005, PostgreSQL Global Development Group
#
# $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.11
7 2005/12/09 21:19:36 petere
Exp $
# $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.11
8 2006/01/17 19:49:23 meskes
Exp $
#
#-------------------------------------------------------------------------
...
...
@@ -14,7 +14,7 @@ top_builddir = ../../../..
include
$(top_builddir)/src/Makefile.global
MAJOR_VERSION
=
4
MINOR_VERSION
=
3
MINOR_VERSION
=
2
PATCHLEVEL
=
1
override CPPFLAGS
:
= -I$(srcdir)/../include -I$(srcdir) $(CPPFLAGS)
\
...
...
This diff is collapsed.
Click to expand it.
src/interfaces/ecpg/test/test5.pgc
View file @
f3dda5be
...
...
@@ -7,60 +7,100 @@ EXEC SQL typedef short mmSmallInt;
EXEC SQL BEGIN DECLARE SECTION;
struct TBempl
{
mmInteger idnum;
mmChar name[21];
mmSmallInt accs;
};
{
mmInteger idnum;
mmChar name[21];
mmSmallInt accs;
mmChar byte[20];
};
EXEC SQL END DECLARE SECTION;
int main(void)
int
main (void)
{
EXEC SQL BEGIN DECLARE SECTION;
struct TBempl empl;
EXEC SQL END DECLARE SECTION;
FILE *dbgs;
EXEC SQL BEGIN DECLARE SECTION;
struct TBempl empl;
char *data = "\\001\\155\\000\\212";
union
{
mmSmallInt accs;
char t[2];
} a;
EXEC SQL END DECLARE SECTION;
FILE *dbgs;
int i;
if ((dbgs = fopen ("log", "w")) != NULL)
ECPGdebug (1, dbgs);
empl.idnum = 1;
EXEC SQL connect to mm;
if (sqlca.sqlcode)
{
printf ("connect error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
EXEC SQL create table empl
(idnum integer, name char (20), accs smallint, byte bytea);
if (sqlca.sqlcode)
{
printf ("create error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
EXEC SQL insert into empl values (1, 'first user', 320,:data);
if (sqlca.sqlcode)
{
printf ("insert error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
EXEC SQL select name, accs, byte into:empl.name,:empl.accs,:empl.byte from empl where idnum =:empl.idnum;
if (sqlca.sqlcode)
{
printf ("select error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte);
EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
EXEC SQL OPEN C;
EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte;
if (sqlca.sqlcode)
{
printf ("fetch error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
if ((dbgs = fopen("log", "w")) != NULL)
ECPGdebug(1, dbgs);
empl.idnum = 1;
EXEC SQL connect to mm;
if (sqlca.sqlcode)
{
printf("connect error = %ld\n", sqlca.sqlcode);
exit(sqlca.sqlcode);
}
printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte);
EXEC SQL create table empl
(
idnum integer,
name char(20),
accs smallint
);
if (sqlca.sqlcode)
{
printf("select error = %ld\n", sqlca.sqlcode);
exit(sqlca.sqlcode);
}
memset(empl.name, 0, 21L);
memset(empl.byte, '#', 20L);
EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
EXEC SQL OPEN B;
EXEC SQL FETCH B INTO :empl.name,:a.accs,:empl.byte;
if (sqlca.sqlcode)
{
printf ("fetch error = %ld\n", sqlca.sqlcode);
exit (sqlca.sqlcode);
}
EXEC SQL insert into empl values (1, 'first user', 20);
if (sqlca.sqlcode)
{
printf("select error = %ld\n", sqlca.sqlcode);
exit(sqlca.sqlcode);
}
EXEC SQL CLOSE B;
EXEC SQL select name, accs
into :empl.name, :empl.accs
from empl where idnum = :empl.idnum;
if (sqlca.sqlcode)
{
printf("select error = %ld\n", sqlca.sqlcode);
exit(sqlca.sqlcode);
}
printf("name=%s, accs=%d\n", empl.name, empl.accs);
EXEC SQL disconnect;
fclose(dbgs);
exit(0);
i=a.t[0];
a.t[0]=a.t[1];
a.t[1]=i;
printf ("name=%s, accs=%d byte=", empl.name, a.accs);
for (i=0; i<20; i++)
{
if (empl.byte[i] == '#')
break;
printf("(%o)", (unsigned char)empl.byte[i]);
}
printf("\n");
EXEC SQL disconnect;
fclose (dbgs);
exit (0);
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment