DRDA, network protocol, and documentation
Hi all,
I'm working on an implementation of the DRDA protocol and am planning on
modifying postgresql to support DRDA. (DRDA is an Open Group standard
protocol for client to database communications, promoted mostly by IBM).
Anyway, as a first step towards this I was hoping to expand the
documentation of the Frontend/Backend Protocol and create some detailed
developer oriented documentation of the internals of the networking code.
Can someone point me towards any documentation that might currently be
available (I'm aware of the Developer's Guide), and any pointers on
getting started would be appreciated as well. ;-)
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream? Part of
what I'm aiming to do is make the network protocol stuff fairly modular so
you could support the current protocol, and DRDA, and presumably SQL*Net
or TDS (Microsoft/Sybases protocol), etc...
Cheers,
Brian
Brian Bruns <camber@ais.org> writes:
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream?
Pipedream, I'm afraid. No one has volunteered to actually do the work,
and I'm not sure that Oracle provides enough documentation to allow a
compatible implementation to be built, anyhow...
regards, tom lane
On Tue, 2002-02-05 at 15:39, Brian Bruns wrote:
Hi all,
I'm working on an implementation of the DRDA protocol and am planning on
modifying postgresql to support DRDA. (DRDA is an Open Group standard
protoc
Hopefully this will bring us PREPARE/EXECUTE support too.
BTW, does DRDA have a notion of LISTEN/NOTIFY ?
Anyway, as a first step towards this I was hoping to expand the
documentation of the Frontend/Backend Protocol and create some detailed
developer oriented documentation of the internals of the networking code.
Protocol is quite simple and AFAIK fully documented in Developers Guide.
The networking code seems to be "Traffic Cop" directory in
src/backend/tcop/postgresql.c
You could click around in lxr I set up for my personal use on my desktop
pc at
http://www.postsql.org/lxr/source/backend/tcop/postgres.c
and find out where things are defined/used
But you should probably set up something similar for your own use if you
want to do some serious hacking.
Can someone point me towards any documentation that might currently be
available (I'm aware of the Developer's Guide), and any pointers on
getting started would be appreciated as well. ;-)
socket.h is included only in a few places
[hannu@taru src]$ grep -l socket.h */*/*.c
backend/libpq/auth.c
backend/libpq/hba.c
backend/libpq/pqcomm.c
backend/postmaster/pgstat.c
backend/postmaster/postmaster.c
backend/tcop/postgres.c
interfaces/libpq/fe-auth.c
interfaces/libpq/fe-connect.c
interfaces/libpq/fe-misc.c
interfaces/odbc/columninfo.c
interfaces/odbc/connection.c
interfaces/odbc/drvconn.c
interfaces/odbc/socket.c
[hannu@taru src]$ grep -l socket.h */*/*/*.c
backend/utils/adt/inet_net_ntop.c
backend/utils/adt/inet_net_pton.c
backend/utils/adt/network.c
You can probably ignore interfaces/ for start and backend/utils/adt/ is
also most likely not about FE/BE communication
That leaves backend/tcop/ for main activity, backend/postmaster/ for
session start and backend/libpq/ for main library.
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream? Part of
what I'm aiming to do is make the network protocol stuff fairly modular so
you could support the current protocol, and DRDA, and presumably SQL*Net
or TDS (Microsoft/Sybases protocol), etc...
XML-over-HTTP/1.1 would also be really cool, even more so if server
could apply XSLT transforms to results on the fly :)
--------------
Hannu
On Tue, 2002-02-05 at 18:03, Tom Lane wrote:
Brian Bruns <camber@ais.org> writes:
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream?Pipedream, I'm afraid. No one has volunteered to actually do the work,
and I'm not sure that Oracle provides enough documentation to allow a
compatible implementation to be built, anyhow...
Also, from what I've been told, there is no such thing as SQL*Net
protocol, there is a whole lot of different protocols that quite often
refuse to talk to each other.
------------
Hannu
Marc Lavergne <mlavergn@richlava.com> writes:
This would involve far more than just a SQL*Net listener. Given the the
syntactic differences between Oracle and PostgreSQL, a whole
compatibility layer beyond the listener would be needed to allow for
interoperability. The listener piece would be relatively small potatoes
compared to building an Oracle<>PostgreSQL syntax translator or a
compatibility layer (the number of "bug" reports something like this is
capable of generating gives me cold sweats).
Yup. There are some people fooling with a more-Oracle-compatible parser
(eg, Oracle-style outer join syntax) but I fear that just scratches the
surface of trying to make something that's plug-compatible enough to
make Oracle users happy.
Still, having a SQL*Net listener would be a step forward, if anyone
cared to work on it.
regards, tom lane
Import Notes
Reply to msg id not found: 3C6011E6.6050202@richlava.com
On 5 Feb 2002, Hannu Krosing wrote:
On Tue, 2002-02-05 at 15:39, Brian Bruns wrote:
Hi all,
I'm working on an implementation of the DRDA protocol and am planning on
modifying postgresql to support DRDA. (DRDA is an Open Group standard
protocHopefully this will bring us PREPARE/EXECUTE support too.
BTW, does DRDA have a notion of LISTEN/NOTIFY ?
Not that I'm aware of, although the spec is really big so there are some
pieces I haven't fully groked. There is ongoing standards activities for
DRDA, but it's closed to TOG members apparently, but from what I can tell
they are adding lots of object features, IPv6 stuff, unicode, etc...
Protocol is quite simple and AFAIK fully documented in Developers Guide.
I ran it through ethereal, and got a pretty good flavor for it.
The networking code seems to be "Traffic Cop" directory in
src/backend/tcop/postgresql.c
Actually some is in libpq, some is in tcop, some in executor. Seems to be
a bit of a mess if you don't mind me saying so. ;-)
What I would propose is a net/ directory that has interface that is called
by all the other code, and net layer would call the appropriate protocol
stuff. So, all the protocol stuff will be in exactly one place.
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream? Part of
what I'm aiming to do is make the network protocol stuff fairly modular so
you could support the current protocol, and DRDA, and presumably SQL*Net
or TDS (Microsoft/Sybases protocol), etc...XML-over-HTTP/1.1 would also be really cool, even more so if server
could apply XSLT transforms to results on the fly :)
This could be supported as just another protocol ;-)
Brian
On Tue, 5 Feb 2002, Tom Lane wrote:
Marc Lavergne <mlavergn@richlava.com> writes:
This would involve far more than just a SQL*Net listener. Given the the
syntactic differences between Oracle and PostgreSQL, a whole
compatibility layer beyond the listener would be needed to allow for
interoperability. The listener piece would be relatively small potatoes
compared to building an Oracle<>PostgreSQL syntax translator or a
compatibility layer (the number of "bug" reports something like this is
capable of generating gives me cold sweats).Yup. There are some people fooling with a more-Oracle-compatible parser
(eg, Oracle-style outer join syntax) but I fear that just scratches the
surface of trying to make something that's plug-compatible enough to
make Oracle users happy.Still, having a SQL*Net listener would be a step forward, if anyone
cared to work on it.regards, tom lane
I have reverse engineered TDS (the MS/Sybase equivalent) so I assume
someone can do the same with SQL*Net/NET8 but that someone won't be me, we
are a Sybase/DB2 shop.
Brian
On Tue, 5 Feb 2002, Tom Lane wrote:
Brian Bruns <camber@ais.org> writes:
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream?Pipedream, I'm afraid. No one has volunteered to actually do the work,
and I'm not sure that Oracle provides enough documentation to allow a
compatible implementation to be built, anyhow...regards, tom lane
Well, I'm offering to modularize the code for anyone who wants to take on
the reverse engineering effort, they'll have an easy time integrating it
into postgresql.
Brian
BTW, My master plan is to add DRDA support to not only postgresql, but
MySQL, interbase, SAP DB, and anything else I can lay hands on. The idea
being a single client capable of talking to DB2/UDB, Informix (with
gateway), MS SQL Server (with SNA gateway) and all the open source DBs.
;-)
On Tue, 5 Feb 2002, Brian Bruns wrote:
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream? Part of
what I'm aiming to do is make the network protocol stuff fairly modular so
you could support the current protocol, and DRDA, and presumably SQL*Net
or TDS (Microsoft/Sybases protocol), etc...
I intend on looking into ways to implement SQL*Net/TNS etc. It's not
pretty but would be remarkably useful. I haven't started looking at it
yet because PostgreSQL doesn't support all of the Oracle's SQL
implementation. Until this happens there's really not much point.
Gavin
I'd have to agree on that point. Although there is probably an interesting
subset of querys that work, but let's face it this is for canned
commercial packages, otherwise the code would be ported including the
network stuff.
For my purposes (DRDA) the present SQL dialect is just fine since the DRDA
standard is really orthogonal to the SQL 9x standards. So, hopefully if I
don't get bogged down with other stuff, the infrastructure will be there
to plug into when the time comes...although it'd be nice to be aware of
some of the nuances before hand to accomadate them.
Brian
On Thu, 7 Feb 2002, Gavin Sherry wrote:
Show quoted text
I intend on looking into ways to implement SQL*Net/TNS etc. It's not
pretty but would be remarkably useful. I haven't started looking at it
yet because PostgreSQL doesn't support all of the Oracle's SQL
implementation. Until this happens there's really not much point.Gavin
On Thu, 2002-02-07 at 07:20, Brian Bruns wrote:
For my purposes (DRDA) the present SQL dialect is just fine since the DRDA
standard is really orthogonal to the SQL 9x standards. So, hopefully if I
don't get bogged down with other stuff, the infrastructure will be there
to plug into when the time comes...although it'd be nice to be aware of
some of the nuances before hand to accomadate them.
What is the relation of DRDA to SQL/CLI (SQL Call Level Interface, part
3 of the standard) ?
------------
Hannu
On 7 Feb 2002, Hannu Krosing wrote:
On Thu, 2002-02-07 at 07:20, Brian Bruns wrote:
For my purposes (DRDA) the present SQL dialect is just fine since the DRDA
standard is really orthogonal to the SQL 9x standards. So, hopefully if I
don't get bogged down with other stuff, the infrastructure will be there
to plug into when the time comes...although it'd be nice to be aware of
some of the nuances before hand to accomadate them.What is the relation of DRDA to SQL/CLI (SQL Call Level Interface, part
3 of the standard) ?
DRDA, SQL 9x, and SQL/CLI (ODBC) form a complimentary set of standards.
SQL 9x obviously specifies the SQL language and constructs. SQL/CLI
addressses application portability with an API. DRDA on the other hand is
a bits on the wire protocol. So one would have a program using the ODBC
API to send DRDA over the network to invoke SQL on the server.
DRDA clients do not necessarily have to be ODBC, indeed there are JDBC
ones. OpenDRDA (my little endeavour) will be an ODBC/SQL CLI driver on
the client side, and something of a non-standard interface on the server
(postgresql) side, if only because there is no standard for server side
interfaces. Actually I have the ODBC driver partially working against IBM
DB2, but it's still, of course, in the beginning stages.
Cheers,
Brian
On Thu, 2002-02-07 at 15:35, Brian Bruns wrote:
On 7 Feb 2002, Hannu Krosing wrote:
What is the relation of DRDA to SQL/CLI (SQL Call Level Interface, part
3 of the standard) ?DRDA, SQL 9x, and SQL/CLI (ODBC) form a complimentary set of standards.
SQL 9x obviously specifies the SQL language and constructs. SQL/CLI
addressses application portability with an API. DRDA on the other hand is
a bits on the wire protocol. So one would have a program using the ODBC
API to send DRDA over the network to invoke SQL on the server.
But I guess that you can't fake PREPARE/EXECUTE on client side anymore
if you want to be DRDA compatible?
Or is DRDA so low-level that it does not care what info it carries ?
Does DRDA have standard representation of datatypes on wire ?
If so, how will postgres extendable datatypes fit in there ?
I know that postgres's system tables have two sets of type i/o functions
typinput | regproc |
typoutput | regproc |
typreceive | regproc |
typsend | regproc |
which are currently initialised to the same real functions
hannu=# select count(*) from pg_type where typoutput <> typsend or
typinput <> typreceive;
count
-------
0
(1 row)
I suspect thet the typreceive and typsend were planned for some common
network representation, but such usage has probaly gone untested for a
very long time.
----------------
Hannu
On Thu, Feb 07, 2002 at 04:02:10PM +1100, Gavin Sherry wrote:
On Tue, 5 Feb 2002, Brian Bruns wrote:
I also noticed on the TODO list someone has put SQL*Net support as a
network protocol. Is this a serious plan or just a pipedream? Part of
what I'm aiming to do is make the network protocol stuff fairly modular so
you could support the current protocol, and DRDA, and presumably SQL*Net
or TDS (Microsoft/Sybases protocol), etc...I intend on looking into ways to implement SQL*Net/TNS etc. It's not
pretty but would be remarkably useful. I haven't started looking at it
yet because PostgreSQL doesn't support all of the Oracle's SQL
implementation. Until this happens there's really not much point.
I'd really like to see something that does XML queries, either over
HTTP (POST/PUT) or BEEP (RFC 3080, 3081). I can start work on
something generic (I've been meaning to start hacking pg anyway...).
A generic input format (application/vnd.postgresql-query) and a
generic XML schema that handles any query. Ideally, you'd have the
ability to designate an XML schema (SELECT [AS XML [SCHEMA 'blah']] ...),
and an xml schemas table that has a description of the data parts,
so the output XML is exactly right.
I'm still wrapping my brain around this concept, if anybody else
is interested in this let me know.
--
David Terrell | "When we said that you needed to cut the
dbt@meat.net | wires for ultimate security, we didn't
Nebcorp Prime Minister | mean that you should go wireless instead."
http://wwn.nebcorp.com/ | - Casper Dik
On 7 Feb 2002, Hannu Krosing wrote:
But I guess that you can't fake PREPARE/EXECUTE on client side anymore
if you want to be DRDA compatible?
DRDA has a facility for preparing and executing, but also for direct
execution. So, a server implementation would have to support all of the
AR Level 1 capabilities to be compatible. The client is a bit free-er to
choose how to send it's SQL. That is, the client has the option to fake a
prepare/execute but the server must service either method.
Does DRDA have standard representation of datatypes on wire ?
DRDA has a quite extensive list of datatype representations. The ordering
of bytes is server dictated (as opposed to TDS where it is client
dictated, so server does the byte swapping if necessary).
If so, how will postgres extendable datatypes fit in there ?
I know that postgres's system tables have two sets of type i/o functions
typinput | regproc |
typoutput | regproc |
typreceive | regproc |
typsend | regproc |which are currently initialised to the same real functions
hannu=# select count(*) from pg_type where typoutput <> typsend or
typinput <> typreceive;
count
-------
0
(1 row)
The server has the leeway to determine the DRDA representation for it's
dataytpes, and it is the clients responsibility to deal with it.
I suspect thet the typreceive and typsend were planned for some common
network representation, but such usage has probaly gone untested for a
very long time.
good question.
Brian
[2002-02-07 11:15] David Terrell said:
| I'd really like to see something that does XML queries, either over
[snip]
| I'm still wrapping my brain around this concept, if anybody else
| is interested in this let me know.
search for Jim Melton's SQLX initiative. The site (www.sqlx.org)
has not been available for quite a while, but I do have a copy of
the draft document if you'd like it.
b
--
"Develop your talent, man, and leave the world something. Records are
really gifts from people. To think that an artist would love you enough
to share his music with anyone is a beautiful thing." -- Duane Allman