Implementing SQL/PSM for PG 8.2

Started by Denis Lussierover 20 years ago36 messages
#1Denis Lussier
denis@enterprisedb.com

Hi All,

My company (EnterpriseDB) is very interested in helping to make ANSI-ISO SQL Stored Procedures part of standard BSD Postgres. The SQL/PSM standard is currently used in DB2 and is being implemented in MySQL 5.0. Note that I'm NOT a big fan of adding Oracle compatibility to PL/pgSQL, but, I'm biased in this regard because EnterpriseDB's SPL (Superset Procedural Language) supports Redwood (pl/sql) and Redmond (transact-sql) style programming.

For various technical and backward compatibility reasons, I don't think SQL/PSM should be a replacement for PL/pgSQL. Although I do think it should heavily leverage the solid foundation afforded by the PL/pgSQL code base. I think it should start as a separate project on PgFoundry. Once it is working and fully tested and rock solid and proven... I think it should then be considered to become part of the core & installed by default alongside plpgsql.

Please note that this is all appropriate for 8.2, because changes to the server side code are necessary to support ANSI stored proc signatures and flexible out/inout parameter passing. EnterpriseDB will publish those suggested server changes for review so that work can begin on plsqlpsm sooner rather than later.

What do y'all think?? I believe the first step is for us to create "plsqlpsm" as a BSD project in PgFoundry.

--Luss

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Denis Lussier (#1)
Re: Implementing SQL/PSM for PG 8.2

"Denis Lussier" <denis@enterprisedb.com> writes:

For various technical and backward compatibility reasons, I don't think
SQL/PSM should be a replacement for PL/pgSQL. Although I do think it
should heavily leverage the solid foundation afforded by the PL/pgSQL
code base.

"Solid"? I've wanted for quite some time to throw away plpgsql and
start over --- there are too many things that need rewritten in it,
starting with the parser. This project would be a great place to do
that.

regards, tom lane

#3Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Tom Lane (#2)
Re: Implementing SQL/PSM for PG 8.2

On Sun, 26 Jun 2005, Tom Lane wrote:

"Denis Lussier" <denis@enterprisedb.com> writes:

For various technical and backward compatibility reasons, I don't think
SQL/PSM should be a replacement for PL/pgSQL. Although I do think it
should heavily leverage the solid foundation afforded by the PL/pgSQL
code base.

"Solid"? I've wanted for quite some time to throw away plpgsql and
start over --- there are too many things that need rewritten in it,
starting with the parser. This project would be a great place to do
that.

What is wrong on plpgsql code? I see some problems with processing SQL
statements, with efectivity evaluation of expr, but parser is clean (in my
opinion).

what have to be rewriten?

Regards
Pavel Stehule

#4Andrew Dunstan
andrew@dunslane.net
In reply to: Denis Lussier (#1)
Re: Implementing SQL/PSM for PG 8.2

Is the intention here to make PSM a first class language (i.e. handled
by the main dbengine scanner/parser) of just another PL? If the latter
it seems far less worth doing. Doing this as a first class language,
however, would be great, just great.

As for pgfoundry, I think it's fair to say (from my various perspectives
as a pgfoundry admin, owner of a PL project there, and general hacker)
that experience is mixed on things that have close backend integration
requirements. In particular, I would advise you to conduct pretty much
all discussions abou the project on the -hackers list for a project like
this. That way you avoid giving anyone surprises, and you will get the
best and most wide-ranging advice and feedback.

cheers

andrew

Denis Lussier wrote:

Show quoted text

Hi All,

My company (EnterpriseDB) is very interested in helping to make ANSI-ISO SQL Stored Procedures part of standard BSD Postgres. The SQL/PSM standard is currently used in DB2 and is being implemented in MySQL 5.0. Note that I'm NOT a big fan of adding Oracle compatibility to PL/pgSQL, but, I'm biased in this regard because EnterpriseDB's SPL (Superset Procedural Language) supports Redwood (pl/sql) and Redmond (transact-sql) style programming.

For various technical and backward compatibility reasons, I don't think SQL/PSM should be a replacement for PL/pgSQL. Although I do think it should heavily leverage the solid foundation afforded by the PL/pgSQL code base. I think it should start as a separate project on PgFoundry. Once it is working and fully tested and rock solid and proven... I think it should then be considered to become part of the core & installed by default alongside plpgsql.

Please note that this is all appropriate for 8.2, because changes to the server side code are necessary to support ANSI stored proc signatures and flexible out/inout parameter passing. EnterpriseDB will publish those suggested server changes for review so that work can begin on plsqlpsm sooner rather than later.

What do y'all think?? I believe the first step is for us to create "plsqlpsm" as a BSD project in PgFoundry.

--Luss

#5Alvaro Herrera
alvherre@surnet.cl
In reply to: Andrew Dunstan (#4)
Re: Implementing SQL/PSM for PG 8.2

On Sun, Jun 26, 2005 at 04:44:13PM -0400, Andrew Dunstan wrote:

Is the intention here to make PSM a first class language (i.e. handled
by the main dbengine scanner/parser) of just another PL? If the latter
it seems far less worth doing. Doing this as a first class language,
however, would be great, just great.

I've seen some example code on the EnterpriseDB website using their SPL
language, and it doesn't seem to be handled like "just another PL". The
function body does not look at all like quoted strings, as in our
regular PLs. I don't know how they did it, but I don't think they added
support for the whole language to the main parser.

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"I can't go to a restaurant and order food because I keep looking at the
fonts on the menu. Five minutes later I realize that it's also talking
about food" (Donald Knuth)

#6Andrew Dunstan
andrew@dunslane.net
In reply to: Alvaro Herrera (#5)
Re: Implementing SQL/PSM for PG 8.2

Alvaro Herrera wrote:

On Sun, Jun 26, 2005 at 04:44:13PM -0400, Andrew Dunstan wrote:

Is the intention here to make PSM a first class language (i.e. handled
by the main dbengine scanner/parser) of just another PL? If the latter
it seems far less worth doing. Doing this as a first class language,
however, would be great, just great.

I've seen some example code on the EnterpriseDB website using their SPL
language, and it doesn't seem to be handled like "just another PL". The
function body does not look at all like quoted strings, as in our
regular PLs. I don't know how they did it, but I don't think they added
support for the whole language to the main parser.

It could be done by putting the SPL parser in front of the SQL parser.
Maybe Luss will tell us how it was done ;-)

cheers

andrew

#7Denis Lussier
denis@enterprisedb.com
In reply to: Andrew Dunstan (#6)
Re: Implementing SQL/PSM for PG 8.2

Hi Affan,

Please read this SQL/PSM thread over and then address how EDB did it (and of course how you would recommend generalizing it for PG 8.2).

Perhaps our SQL/PSM could be designed from the ground up with "debugability" :-) in mind.

--Luss

________________________________

From: Alvaro Herrera [mailto:alvherre@surnet.cl]
Sent: Sun 6/26/2005 6:06 PM
To: Andrew Dunstan
Cc: Denis Lussier; pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Implementing SQL/PSM for PG 8.2

On Sun, Jun 26, 2005 at 06:06 -05, Alvaro Herrera wrote:

Show quoted text

I've seen some example code on the EnterpriseDB website using their SPL
language, and it doesn't seem to be handled like "just another PL". The
function body does not look at all like quoted strings, as in our
regular PLs. I don't know how they did it, but I don't think they added
support for the whole language to the main parser.

#8Jan Wieck
JanWieck@Yahoo.com
In reply to: Pavel Stehule (#3)
Re: Implementing SQL/PSM for PG 8.2

On 6/26/2005 4:10 PM, Pavel Stehule wrote:

On Sun, 26 Jun 2005, Tom Lane wrote:

"Denis Lussier" <denis@enterprisedb.com> writes:

For various technical and backward compatibility reasons, I don't think
SQL/PSM should be a replacement for PL/pgSQL. Although I do think it
should heavily leverage the solid foundation afforded by the PL/pgSQL
code base.

"Solid"? I've wanted for quite some time to throw away plpgsql and
start over --- there are too many things that need rewritten in it,
starting with the parser. This project would be a great place to do
that.

What is wrong on plpgsql code? I see some problems with processing SQL
statements, with efectivity evaluation of expr, but parser is clean (in my
opinion).

The whole parser is a hack that attempts to parse the procedural parts
of the function but preserving the SQL parts as query strings while
substituting variables with numbered parameters. That is anything but
clean. It was the only way I saw at the time of implementation to build
a parser that automatically supports future changes of the main Postgres
query language. But that doesn't mean that I like the implementation.

Jan

--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #

#9Jonah H. Harris
jharris@tvi.edu
In reply to: Jan Wieck (#8)
Re: Implementing SQL/PSM for PG 8.2

I agree with Jan,

As part of my own projects I had to deal with the PL/pgSQL parser.
While it was a workable design at the beginning, it now makes some
things harder with the quoting etc.

Don't get me wrong, I've never really had any beef with PL/pgSQL, it has
worked great for a long time but I think it could definitely use a rewrite.

I don't recommend discussion for this in this thread, but it could also
tie in with the packages support we've discussed and (although some may
argue this), compiling the PL to bytecode and using that.

-Jonah

Jan Wieck wrote:

Show quoted text

On 6/26/2005 4:10 PM, Pavel Stehule wrote:

On Sun, 26 Jun 2005, Tom Lane wrote:

"Denis Lussier" <denis@enterprisedb.com> writes:

For various technical and backward compatibility reasons, I don't

think

SQL/PSM should be a replacement for PL/pgSQL. Although I do think it
should heavily leverage the solid foundation afforded by the PL/pgSQL
code base.

"Solid"? I've wanted for quite some time to throw away plpgsql and
start over --- there are too many things that need rewritten in it,
starting with the parser. This project would be a great place to do
that.

What is wrong on plpgsql code? I see some problems with processing
SQL statements, with efectivity evaluation of expr, but parser is
clean (in my opinion).

The whole parser is a hack that attempts to parse the procedural parts
of the function but preserving the SQL parts as query strings while
substituting variables with numbered parameters. That is anything but
clean. It was the only way I saw at the time of implementation to
build a parser that automatically supports future changes of the main
Postgres query language. But that doesn't mean that I like the
implementation.

Jan

#10Neil Conway
neilc@samurai.com
In reply to: Jonah H. Harris (#9)
Re: Implementing SQL/PSM for PG 8.2

Jonah H. Harris wrote:

I don't recommend discussion for this in this thread, but it could also
tie in with the packages support we've discussed and (although some may
argue this), compiling the PL to bytecode and using that.

How would compilation to bytecode help?

-Neil

#11Neil Conway
neilc@samurai.com
In reply to: Jan Wieck (#8)
Re: Implementing SQL/PSM for PG 8.2

Jan Wieck wrote:

The whole parser is a hack that attempts to parse the procedural parts
of the function but preserving the SQL parts as query strings while
substituting variables with numbered parameters. That is anything but
clean. It was the only way I saw at the time of implementation to build
a parser that automatically supports future changes of the main Postgres
query language.

I agree the current parser is a hack, but it's difficult to see how else
it could be implemented. One possibility I've mentioned in the past is
to rewrite the main SQL parser by hand (e.g. as a recursive descent
parser), so that we could directly call into the main SQL parser from
the PL/PgSQL parser. I believe that would let us embed SQL in PL/PgSQL
without needing to teach the PL/PgSQL anything about the main SQL
grammar. But of course this has the downside of needing to write and
maintain a recursive descent parser.

Any better ideas?

-Neil

#12Rod Taylor
pg@rbt.ca
In reply to: Neil Conway (#11)
Re: Implementing SQL/PSM for PG 8.2

On Tue, 2005-06-28 at 10:40 +1000, Neil Conway wrote:

Jan Wieck wrote:

The whole parser is a hack that attempts to parse the procedural parts
of the function but preserving the SQL parts as query strings while
substituting variables with numbered parameters. That is anything but
clean. It was the only way I saw at the time of implementation to build
a parser that automatically supports future changes of the main Postgres
query language.

I agree the current parser is a hack, but it's difficult to see how else
it could be implemented. One possibility I've mentioned in the past is

Could the reverse be done? Combine the PL/PgSQL and SQL grammar for the
main parser (thus allowing procedural logic in standard SQL locations)
and perhaps for the other PLs they can hook into a specific statement
grammar which is a subset of the PL/PgSQL grammar by prefixing a keyword
-- say EXECUTE to their strings.

I would like to have some logic in psql, much as you can build simple
loops and logic with shell on the command line on the fly.
--

#13Christopher Browne
cbbrowne@acm.org
In reply to: Pavel Stehule (#3)
Re: Implementing SQL/PSM for PG 8.2

A long time ago, in a galaxy far, far away, jharris@tvi.edu ("Jonah H. Harris") wrote:

I don't recommend discussion for this in this thread, but it could
also tie in with the packages support we've discussed and (although
some may argue this), compiling the PL to bytecode and using that.

This makes me think of the old jwz quote...

"Some people, when confronted with a problem, think 'I know, I'll
use regular expressions.' Now they have two problems."
-- Jamie Zawinski, on comp.lang.emacs

There are essentially four choices:

1. Embed a JVM in PostgreSQL, and use that; the fact that there are
already multiple "pljava" implementations suggests that it may be
difficult to pick a strategy...

2. Embed some clone of CLR in PostgreSQL, let's say, MONO.

I don't think there's a suitable BSDL'ed option...

3. Embed Parrot (the Perl/Python thing) in PostgreSQL. (Not that
Parrot can be considered "done".)

4. Make up a PostgreSQL-specific bytecode interpreter.

I'm quite sure that this leads to adding to the problems...
--
wm(X,Y):-write(X),write('@'),write(Y). wm('cbbrowne','gmail.com').
http://linuxdatabases.info/info/nonrdbms.html
Love the scientific sampling language, when any sample that is
selected from Usenet readers and additionally self-selected is about
as representative as a wombat is of European wildlife.
-- Madeleine Page

#14Peter Eisentraut
peter_e@gmx.net
In reply to: Neil Conway (#11)
Re: Implementing SQL/PSM for PG 8.2

Neil Conway wrote:

I agree the current parser is a hack, but it's difficult to see how
else it could be implemented.

Since the lexical structure of SQL/PSM seems to be about the same as the
main SQL, maybe you could get away with having the main parser just
accepting any tokens at the point where the function body belongs and
make it count BEGIN's and END's or whatever nesting elements there
might be.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#15Jan Wieck
JanWieck@Yahoo.com
In reply to: Peter Eisentraut (#14)
Re: Implementing SQL/PSM for PG 8.2

On 6/28/2005 5:55 AM, Peter Eisentraut wrote:

Neil Conway wrote:

I agree the current parser is a hack, but it's difficult to see how
else it could be implemented.

Since the lexical structure of SQL/PSM seems to be about the same as the
main SQL, maybe you could get away with having the main parser just
accepting any tokens at the point where the function body belongs and
make it count BEGIN's and END's or whatever nesting elements there
might be.

Which then would require that SPI gets another interface added that
allows to feed in a token sequence instead of a query string.

After thinking more about what I wrote yesterday I noticed that we would
lose the potential for query plan recompilation after system cache
invalidation if we do not keep the queries inside of a PL function in
some sort of source code (lexer tokens still are).

Jan

#16Dave Cramer
pg@fastcrypt.com
In reply to: Neil Conway (#10)
Re: Implementing SQL/PSM for PG 8.2

One thing bytecode would allow us to do is to write a debugger with
break points etc.

Using a java jvm however is considerable overkill.

Dave
On 27-Jun-05, at 8:28 PM, Neil Conway wrote:

Show quoted text

Jonah H. Harris wrote:

I don't recommend discussion for this in this thread, but it could
also tie in with the packages support we've discussed and
(although some may argue this), compiling the PL to bytecode and
using that.

How would compilation to bytecode help?

-Neil

---------------------------(end of
broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

#17Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Dave Cramer (#16)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On Tue, 28 Jun 2005, Dave Cramer wrote:

One thing bytecode would allow us to do is to write a debugger with
break points etc.

We can write debugger with breakpoints without bytecode. Every stmt rec
can have flag if has breakpoints. No problem. I don't see any advance of
bytecode. Maybe, goto stmt is possible.

What is problem? We need synchronous comunication (message) between
backend frontend.

I have idea (in exec_stmt()

CHECK_FOR_INTERRUPTS();
if (stmt->breakpoints)
estate->debug_mode = true;
if (estate->debug_mode)
{
for (;;)
{
rc = request_command();
switch (rc)
{
case 'c': -- continue
estate->debug_mode = false;
break
case 'q':
elog(EXCEPTION, "stop debug");
break;
case 'n':
break;
case 'l':
sendstring(line(estate->src,
stmt->lineno));

Please, can somebody help me with protocol enhancing? It is mayor work on
PL/pgSQL debugger (and plperl and plpython too).

Show quoted text

Using a java jvm however is considerable overkill.

Dave
On 27-Jun-05, at 8:28 PM, Neil Conway wrote:

Jonah H. Harris wrote:

I don't recommend discussion for this in this thread, but it could
also tie in with the packages support we've discussed and
(although some may argue this), compiling the PL to bytecode and
using that.

How would compilation to bytecode help?

-Neil

---------------------------(end of
broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

#18Dave Cramer
pg@fastcrypt.com
In reply to: Pavel Stehule (#17)
Re: Implementing SQL/PSM for PG 8.2 - debugger

Pavel,

What do you think you need for enhanced protocol ?

Dave
On 28-Jun-05, at 8:51 AM, Pavel Stehule wrote:

Show quoted text

On Tue, 28 Jun 2005, Dave Cramer wrote:

One thing bytecode would allow us to do is to write a debugger with
break points etc.

We can write debugger with breakpoints without bytecode. Every stmt
rec
can have flag if has breakpoints. No problem. I don't see any
advance of
bytecode. Maybe, goto stmt is possible.

What is problem? We need synchronous comunication (message) between
backend frontend.

I have idea (in exec_stmt()

CHECK_FOR_INTERRUPTS();
if (stmt->breakpoints)
estate->debug_mode = true;
if (estate->debug_mode)
{
for (;;)
{
rc = request_command();
switch (rc)
{
case 'c': -- continue
estate->debug_mode = false;
break
case 'q':
elog(EXCEPTION, "stop debug");
break;
case 'n':
break;
case 'l':
sendstring(line(estate->src,
stmt->lineno));

Please, can somebody help me with protocol enhancing? It is mayor
work on
PL/pgSQL debugger (and plperl and plpython too).

Using a java jvm however is considerable overkill.

Dave
On 27-Jun-05, at 8:28 PM, Neil Conway wrote:

Jonah H. Harris wrote:

I don't recommend discussion for this in this thread, but it could
also tie in with the packages support we've discussed and
(although some may argue this), compiling the PL to bytecode and
using that.

How would compilation to bytecode help?

-Neil

---------------------------(end of
broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faq

#19Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Dave Cramer (#18)
Re: Implementing SQL/PSM for PG 8.2 - debugger

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

Pavel

#20Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#19)
Re: Implementing SQL/PSM for PG 8.2 - debugger

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

#21Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Tom Lane (#20)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth variants -
remote | protocol. Remote debugging has one advance. I can monitor any
living plpgsql process, but I have to connect to some special port, and it
can be problem. Protocol debugging can be supported libpq, and all clients
libpq can debug. But is problem if PostgreSQL support bouth variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql console.
Without spec application. I don't speak so spec application don't have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave my emacs
postgresql mode.

Show quoted text

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

#22Chris Browne
cbbrowne@acm.org
In reply to: Pavel Stehule (#3)
Re: Implementing SQL/PSM for PG 8.2

Christopher Browne <cbbrowne@acm.org> writes:

There are essentially four choices:

Aside:

I suppose there are as many possible choices as there are bytecode
compiled systems out there. One could consider Icon, CLISP, Python,
PHP, OCAML, CMU/CL, all of which have bytecode compilers.

But none of those VMs are particularly intended to be reused/abused
for other purposes; they were designed for the convenience of the
respective language implementors.

Mind you, the Icon VM is probably pretty stable by now :-).
--
(format nil "~S@~S" "cbbrowne" "acm.org")
http://www.ntlug.org/~cbbrowne/sap.html
Rules of the Evil Overlord #78. "I will not tell my Legions of Terror
"And he must be taken alive!" The command will be: ``And try to take
him alive if it is reasonably practical.''"
<http://www.eviloverlord.com/&gt;

#23Dave Cramer
pg@fastcrypt.com
In reply to: Pavel Stehule (#21)
Re: Implementing SQL/PSM for PG 8.2 - debugger

Pavel,

I am in agreement with Tom here, we should use a separate port, and
protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and be
used for transferring state information, variables, etc back and forth
whereas the existing protocol would still be used to transfer data
back and forth

Dave
On 28-Jun-05, at 10:36 AM, Pavel Stehule wrote:

Show quoted text

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can
return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth variants -
remote | protocol. Remote debugging has one advance. I can monitor any
living plpgsql process, but I have to connect to some special port,
and it
can be problem. Protocol debugging can be supported libpq, and all
clients
libpq can debug. But is problem if PostgreSQL support bouth variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql console.
Without spec application. I don't speak so spec application don't
have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave my
emacs
postgresql mode.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

---------------------------(end of
broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)

#24Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Dave Cramer (#23)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On Tue, 28 Jun 2005, Dave Cramer wrote:

Pavel,

I am in agreement with Tom here, we should use a separate port, and
protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and be
used for transferring state information, variables, etc back and forth
whereas the existing protocol would still be used to transfer data
back and forth

We can it. It can be good start point. I can do it alone. It simpler.
But I don't think so this is optimal solution. You need two protocols.
Maybe I don't understand, but I think so changes in protocol3 files will
be minimal. I wont to do prototype.

Pavel

Show quoted text

Dave
On 28-Jun-05, at 10:36 AM, Pavel Stehule wrote:

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can
return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth variants -
remote | protocol. Remote debugging has one advance. I can monitor any
living plpgsql process, but I have to connect to some special port,
and it
can be problem. Protocol debugging can be supported libpq, and all
clients
libpq can debug. But is problem if PostgreSQL support bouth variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql console.
Without spec application. I don't speak so spec application don't
have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave my
emacs
postgresql mode.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

---------------------------(end of
broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)

#25Jonah H. Harris
jharris@tvi.edu
In reply to: Dave Cramer (#23)
Re: Implementing SQL/PSM for PG 8.2 - debugger

Dave,

I lean with you and Tom. While running it over the same libpq protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate debugging
protocol is in order.

Also, as far as bytecode comments go, let's separate them from this
thread. I have a pretty sweet hand-written stack-based VM that
understands PL/SQL, but it's kinda old and written using PCCTS 1.33 (a
recursive descent parser). It has compilation, decompilation, and full
debugging capabilities. Unfortunately, PCCTS is no longer maintained as
Terrence Parr (the originator) has since moved to ANTLR. ANTLR
currently does not generate C code although I have done some starting
work on it (ANTLR currently generates Python, Java, or C++). I don't
suggest we really reuse one of the current VMs as it would require a lot
more support and coordination. Let's take the bytecode discussion off
this thread and move it to another. There is certainly a good and bad
side to using bytecode and I would be glad to discuss it in another thread.

Dave Cramer wrote:

Show quoted text

Pavel,

I am in agreement with Tom here, we should use a separate port, and
protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and be
used for transferring state information, variables, etc back and forth
whereas the existing protocol would still be used to transfer data
back and forth

Dave
On 28-Jun-05, at 10:36 AM, Pavel Stehule wrote:

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can
return some
user's interaction, if it's possible. I didn't find how I do it with
current set of messages. But my knowleadges of protocol are minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth variants -
remote | protocol. Remote debugging has one advance. I can monitor any
living plpgsql process, but I have to connect to some special port,
and it
can be problem. Protocol debugging can be supported libpq, and all
clients
libpq can debug. But is problem if PostgreSQL support bouth variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql console.
Without spec application. I don't speak so spec application don't
have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave my
emacs
postgresql mode.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

---------------------------(end of
broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

#26Denis Lussier
denis@enterprisedb.com
In reply to: Jonah H. Harris (#25)
Re: Implementing SQL/PSM for PG 8.2 - debugger

I'm psyched for EDB to particpate and/or in some way sponsor this effort. How can we best help to make this a reality sooner rather than later??

There's going to be a painful period later this year when Mysqueel is able to claim that their production db has more ansi compatability than PG (at least for triggers and stored procs).

It'll be very kewl having native PG with a fully ansi-iso compliant stored procedure language with an efficient and clean implementation with great performance charateristics and a debugger to boot...

--Luss

------Original Message------
From: Jonah H. Harris
To: Dave Cramer
Cc: Pavel Stehule
Cc: Tom Lane
Cc: Neil Conway
Cc: Jan Wieck
Cc: Denis Lussier
Cc: pgsql-hackers@postgresql.org
Sent: Jun 28, 2005 5:58 PM
Subject: Re: [HACKERS] Implementing SQL/PSM for PG 8.2 - debugger

Dave,

I lean with you and Tom. While running it over the same libpq protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate debugging
protocol is in order.

Also, as far as bytecode comments go, let's separate them from this
thread. I have a pretty sweet hand-written stack-based VM that
understands PL/SQL, but it's kinda old and written using PCCTS 1.33 (a
recursive descent parser). It has compilation, decompilation, and full
debugging capabilities. Unfortunately, PCCTS is no longer maintained as
Terrence Parr (the originator) has since moved to ANTLR. ANTLR
currently does not generate C code although I have done some starting
work on it (ANTLR currently generates Python, Java, or C++). I don't
suggest we really reuse one of the current VMs as it would require a lot
more support and coordination. Let's take the bytecode discussion off
this thread and move it to another. There is certainly a good and bad
side to using bytecode and I would be glad to discuss it in another thread.

Dave Cramer wrote:

Pavel,

I am in agreement with Tom here, we should use a separate port, and
protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and be
used for transferring state information, variables, etc back and forth
whereas the existing protocol would still be used to transfer data
back

------Original Message Truncated------

--Luss

#27Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Jonah H. Harris (#25)
Re: Implementing SQL/PSM for PG 8.2 - debugger

I lean with you and Tom. While running it over the same libpq protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate debugging
protocol is in order.

One message? I can't belive :).

work on it (ANTLR currently generates Python, Java, or C++). I don't
suggest we really reuse one of the current VMs as it would require a lot
more support and coordination. Let's take the bytecode discussion off
this thread and move it to another. There is certainly a good and bad
side to using bytecode and I would be glad to discuss it in another thread.

I see only one advantage of WM - sharing between languages. But SQL/PSM or
PL/pgSQL are not clasic languages. Big advantage is big disadvantage too
-> relation on SQL engine. I can use all SQL types, but I can't to do
efective concation of strings. Sorry, I don't see any benefit of bytecode
for these languages.

PL/pgSQL works fine (for specific task). What can be better?

o evaluation of expressions. -- needs integration with sql parser
o debugging
o persistent compiled code
o syntax

Please, write me, private, your opinions. And don't scowl at me, so I am
in oportunity :).

Regards
Pavek

#28Pavel Stehule
stehule@kix.fsv.cvut.cz
In reply to: Denis Lussier (#26)
Re: Implementing SQL/PSM for PG 8.2 - debugger

There's going to be a painful period later this year when Mysqueel

is able to claim that their production db has more ansi compatability
than PG (at least for triggers and stored procs).

MySQL5 is really comparable with Pg8, but Firebird2 or SQLlite3 too. But
from my perspective procedural language isn't essentials. Possiblity run
perl or python prucedures is important. Today is first day of discussion
and there is half of year space for developing.

It'll be very kewl having native PG with a fully ansi-iso compliant

stored procedure language with an efficient and clean implementation
with great performance charateristics and a debugger to boot...

Who not?

#29Robert Treat
xzilla@users.sourceforge.net
In reply to: Denis Lussier (#26)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On Tuesday 28 June 2005 18:29, Denis Lussier wrote:

I'm psyched for EDB to particpate and/or in some way sponsor this effort.
How can we best help to make this a reality sooner rather than later??

There's going to be a painful period later this year when Mysqueel is able
to claim that their production db has more ansi compatability than PG (at
least for triggers and stored procs).

Have you seen thier trigger implementation? It's about on par with pg's left
join capabilities around 7.0.

--
Robert Treat
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL

#30Mark Cave-Ayland
m.cave-ayland@webbased.co.uk
In reply to: Robert Treat (#29)
Re: Implementing SQL/PSM for PG 8.2 - debugger

Hi guys,

I lean with you and Tom. While running it over the same libpq protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate debugging
protocol is in order.

Just putting on my network hat for a moment... Would an approach be to come
up with a generic encapsulation protocol, similar in principle to PPP, in
which we could run any protocols we wanted?

If we had something like a PGSQL Encapsulation Protocol (PGEP) used to
transfer all data between a PostgreSQL client/server, then we can use this
to tunnel libpq requests as they are at the moment through to the other
side. However, it would also mean that people could add any other protocols
as they see fit for debugging, statistics and all sorts of things that
people have yet to think of.

Obviously this would require a client/server interface change so it's not to
be taken lightly, but I thought I'd mention it since people have mentioned
the possibility of changes to the FE/BE protocol.

Kind regards,

Mark.

------------------------
WebBased Ltd
17 Research Way
Tamar Science Park
Plymouth
PL6 8BT

T: +44 (0)1752 797131
F: +44 (0)1752 791023
W: http://www.webbased.co.uk

#31Hannu Krosing
hannu@skype.net
In reply to: Mark Cave-Ayland (#30)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On K, 2005-06-29 at 10:33 +0100, Mark Cave-Ayland wrote:

Hi guys,

I lean with you and Tom. While running it over the same libpq protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate debugging
protocol is in order.

Just putting on my network hat for a moment... Would an approach be to come
up with a generic encapsulation protocol, similar in principle to PPP, in
which we could run any protocols we wanted?

That's what I also thought, but was too busy/lazy to write up :)

If we had something like a PGSQL Encapsulation Protocol (PGEP) used to
transfer all data between a PostgreSQL client/server, then we can use this
to tunnel libpq requests as they are at the moment through to the other
side.

also, additional channels un PGEP could be initiated in both directions,
and things like NOTIFY could be put in a different channel.

However, it would also mean that people could add any other protocols
as they see fit for debugging, statistics and all sorts of things that
people have yet to think of.

One example would be connection keepalive protocol , run over its own
channel in PGEP and used in case TCP link has a tendency to fail.

This should be run from server to client during idle periods, just to
see if client is still there.

Obviously this would require a client/server interface change so it's not to
be taken lightly, but I thought I'd mention it since people have mentioned
the possibility of changes to the FE/BE protocol.

As protocol is negotiated at startup anyway, this is a change that could
be done in a backward compatible manner .

--
Hannu Krosing <hannu@skype.net>

#32Dave Cramer
pg@fastcrypt.com
In reply to: Hannu Krosing (#31)
Re: Implementing SQL/PSM for PG 8.2 - debugger

This is an interesting suggestion, particularly the addition of
additional connections for management

However it does require all clients rewrite (yet again ) their
connection code.

My reasoning for suggesting a separate port for debugging are:

1) no changes to existing clients ( this probably could be done by
extending the existing protocol )

2) Ability to run your existing applications, not just psql, but any
application and remotely debug without interfering
with the current connection data.

3) Relatively easy to create (name your favorite language) debuggers

4) Seems easier to connect, and disconnect from the process of interest.

Dave

On 29-Jun-05, at 6:06 AM, Hannu Krosing wrote:

Show quoted text

On K, 2005-06-29 at 10:33 +0100, Mark Cave-Ayland wrote:

Hi guys,

I lean with you and Tom. While running it over the same libpq
protocol
would be helpful in some ways, it would have a lot of drawbacks and
would really change the function of libpq. I think a separate
debugging
protocol is in order.

Just putting on my network hat for a moment... Would an approach
be to come
up with a generic encapsulation protocol, similar in principle to
PPP, in
which we could run any protocols we wanted?

That's what I also thought, but was too busy/lazy to write up :)

If we had something like a PGSQL Encapsulation Protocol (PGEP)
used to
transfer all data between a PostgreSQL client/server, then we can
use this
to tunnel libpq requests as they are at the moment through to the
other
side.

also, additional channels un PGEP could be initiated in both
directions,
and things like NOTIFY could be put in a different channel.

However, it would also mean that people could add any other protocols
as they see fit for debugging, statistics and all sorts of things
that
people have yet to think of.

One example would be connection keepalive protocol , run over its own
channel in PGEP and used in case TCP link has a tendency to fail.

This should be run from server to client during idle periods, just to
see if client is still there.

Obviously this would require a client/server interface change so
it's not to
be taken lightly, but I thought I'd mention it since people have
mentioned
the possibility of changes to the FE/BE protocol.

As protocol is negotiated at startup anyway, this is a change that
could
be done in a backward compatible manner .

--
Hannu Krosing <hannu@skype.net>

#33Dave Cramer
pg@fastcrypt.com
In reply to: Jonah H. Harris (#25)
Bytecode and virtual machine

Jonah,

What do you see as the advantages of using a VM and bytecode?

Regarding Antlr etal, are there any that generate C code. I am more
familiar with the java parsers. If we can't generate C this is
probably a non-starter.

Dave
On 28-Jun-05, at 5:58 PM, Jonah H. Harris wrote:

Show quoted text

Dave,

I lean with you and Tom. While running it over the same libpq
protocol would be helpful in some ways, it would have a lot of
drawbacks and would really change the function of libpq. I think a
separate debugging protocol is in order.

Also, as far as bytecode comments go, let's separate them from this
thread. I have a pretty sweet hand-written stack-based VM that
understands PL/SQL, but it's kinda old and written using PCCTS 1.33
(a recursive descent parser). It has compilation, decompilation,
and full debugging capabilities. Unfortunately, PCCTS is no longer
maintained as Terrence Parr (the originator) has since moved to
ANTLR. ANTLR currently does not generate C code although I have
done some starting work on it (ANTLR currently generates Python,
Java, or C++). I don't suggest we really reuse one of the current
VMs as it would require a lot more support and coordination. Let's
take the bytecode discussion off this thread and move it to
another. There is certainly a good and bad side to using bytecode
and I would be glad to discuss it in another thread.

Dave Cramer wrote:

Pavel,

I am in agreement with Tom here, we should use a separate port,
and protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and
be used for transferring state information, variables, etc back
and forth
whereas the existing protocol would still be used to transfer
data back and forth

Dave
On 28-Jun-05, at 10:36 AM, Pavel Stehule wrote:

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can
return some
user's interaction, if it's possible. I didn't find how I do it
with
current set of messages. But my knowleadges of protocol are
minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth
variants -
remote | protocol. Remote debugging has one advance. I can
monitor any
living plpgsql process, but I have to connect to some special
port, and it
can be problem. Protocol debugging can be supported libpq, and
all clients
libpq can debug. But is problem if PostgreSQL support bouth
variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql
console.
Without spec application. I don't speak so spec application
don't have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave
my emacs
postgresql mode.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

---------------------------(end of
broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)

---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

---------------------------(end of
broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

#34Hannu Krosing
hannu@skype.net
In reply to: Dave Cramer (#32)
Re: Implementing SQL/PSM for PG 8.2 - debugger

On K, 2005-06-29 at 08:00 -0400, Dave Cramer wrote:

This is an interesting suggestion, particularly the addition of
additional connections for management

However it does require all clients rewrite (yet again ) their
connection code.

My reasoning for suggesting a separate port for debugging are:

I'm not objecting to the idea of a separate "port", just suggesting one
way to connect to that port using clients that are aware of the new PGEP
protocol.

the old ones can continue to work as they are.

--
Hannu Krosing <hannu@skype.net>

#35Affan Bin Salman
affans@gmail.com
In reply to: Chris Browne (#22)
Re: Implementing SQL/PSM for PG 8.2

Andrew Dunstan wrote:

It could be done by putting the SPL parser in front of the SQL parser.
Maybe Luss will tell us how it was done ;-)

We added SPL 'CREATE [OR REPLACE] PROCEDURE' and 'CREATE [OR REPLACE]
FUNCTION' Syntax support to the main scanner, parser for the backend.
By entering exclusive state for scanning the body, similar to quoted
string handling for the PostgreSQL language-agnostic function creation
syntax, we achieve the desired result. We return the scanner to
INITIAL state by encountering the last END token; based upon the block
depth level, that we are keeping track of in the exclusive state.

The rest of the handling, behind the parser, conforms to standard
PostgreSQL Language-agnostic Function creation with all the required
attributes set for
PG_PROC via the CreateFunctionStmt node.

Please note that I am using 'PG_PROC' and 'CreateFunctionStmt' just to
maintain the standard PostgreSQL Reference Point, our implementation
actually differs
in terms of catalog(s), structure(s) naming as we went for
semi-bifurcation between procedures and functions to meet our future
needs. During the process, however, we have ensured full backward
compatibility.

This list of required attributes includes the language to be set as
EDB-SPL (configured as the default PL for EnterpriseDB), in addition
to other attributes
such as parameter(s) information etc.

Subsequently, like for any other PL in PostgreSQL, SPL Language
Handler maintains the responsibility of performing the compilation and
execution of the SPL
proc/function body source text.

-Affan
Lead Database Architect,
EnterpriseDB Corporation.

#36Jonah H. Harris
jharris@tvi.edu
In reply to: Dave Cramer (#33)
Re: Bytecode and virtual machine

Hey Dave,

I see a few of the advantages and disadvantages as follows:

ADVANTAGES
- Faster execution (a single parse/compile)
- The ability for companies/people to write PL code and not directly
share the source (though disassembly is always possible)
- Built-in debugging support (could be added to something like PL/pgSQL,
but would work better if built into the system from the ground-up)
- Support for PL profiling (great for some of the newbie PL writers and
would be useful for finding performance problems when packages come around)
- Better/faster exception handling

DISADVANTAGES
- Generated bytecode would have to be platform independent
- Maintenance of the VM itself (how many people would be able to pick up
development/support)
- Platform support for the VM (not really that big of an issue if it's
done right)

I have experience writing both stack and register based VMs but I
believe that a stack-based VM would be a great way to implement PLs.
Sure, a register-based VM sometimes runs faster than a stack-based
machine, but it is also a great deal more complex.

Just a couple thoughts :)

-Jonah

Dave Cramer wrote:

Show quoted text

Jonah,

What do you see as the advantages of using a VM and bytecode?

Regarding Antlr etal, are there any that generate C code. I am more
familiar with the java parsers. If we can't generate C this is
probably a non-starter.

Dave
On 28-Jun-05, at 5:58 PM, Jonah H. Harris wrote:

Dave,

I lean with you and Tom. While running it over the same libpq
protocol would be helpful in some ways, it would have a lot of
drawbacks and would really change the function of libpq. I think a
separate debugging protocol is in order.

Also, as far as bytecode comments go, let's separate them from this
thread. I have a pretty sweet hand-written stack-based VM that
understands PL/SQL, but it's kinda old and written using PCCTS 1.33
(a recursive descent parser). It has compilation, decompilation,
and full debugging capabilities. Unfortunately, PCCTS is no longer
maintained as Terrence Parr (the originator) has since moved to
ANTLR. ANTLR currently does not generate C code although I have
done some starting work on it (ANTLR currently generates Python,
Java, or C++). I don't suggest we really reuse one of the current
VMs as it would require a lot more support and coordination. Let's
take the bytecode discussion off this thread and move it to
another. There is certainly a good and bad side to using bytecode
and I would be glad to discuss it in another thread.

Dave Cramer wrote:

Pavel,

I am in agreement with Tom here, we should use a separate port,
and protocol specifically designed for this.

My understanding is that this protocol would be synchronous, and
be used for transferring state information, variables, etc back
and forth
whereas the existing protocol would still be used to transfer data
back and forth

Dave
On 28-Jun-05, at 10:36 AM, Pavel Stehule wrote:

On Tue, 28 Jun 2005, Tom Lane wrote:

Pavel Stehule <stehule@kix.fsv.cvut.cz> writes:

What do you think you need for enhanced protocol ?

What I need? Some like synchronous elog(NOTICE,''), which can
return some
user's interaction, if it's possible. I didn't find how I do it
with
current set of messages. But my knowleadges of protocol are
minimal.

It'd probably be smarter to manage the debugging across a separate
connection, so that you could carry out debugging without requiring
sophisticated support for it inside the client program. If it's
single-connection then it will be essentially impractical to debug
except from a few specialized clients such as pgadmin; which will
make it hard to investigate behaviors that are only seen under load
from a client app.

I don't think it. Debug process halt query process in bouth
variants -
remote | protocol. Remote debugging has one advance. I can monitor
any
living plpgsql process, but I have to connect to some special
port, and it
can be problem. Protocol debugging can be supported libpq, and
all clients
libpq can debug. But is problem if PostgreSQL support bouth variants?

btw: debuging have to be only for some users,
GRANT DEBUG ON LANGUAGE plpgsql TO ..

For me, is better variant if I can debug plpgsql code in psql
console.
Without spec application. I don't speak so spec application don't
have to
exists (from my view, ofcourse).

Maybe:
set debug_mode to true; -- if 't' then func stmt has src
reset function myfce(integer, integer); -- need recompilation
create breakpoint on myfce(integer, integer) line 1;
select myfce(10,10);
dbg> \l .. list current line
\c .. continue
\n .. next stmt
\L .. show src
\s .. show stack
\b .. switch breakpoint
\q .. quit function
select myvar+10 .. any sql expression
variable .. print variable
\c
myfce
-----
10

that's all. Maybe I have big fantasy :).

Regards
Pavel

+ small argument: if psql support debug mode, I don't need leave
my emacs
postgresql mode.

I don't know exactly how to cause such a connection to get set up,
especially remotely. But we should try to think of a way.

regards, tom lane

---------------------------(end of
broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to
majordomo@postgresql.org)

---------------------------(end of
broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

---------------------------(end of
broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match