Thread: Convert stmt back into queryString

Convert stmt back into queryString

From
Dan Colish
Date:
I am currently trying to convert an insertstmt back into a constchar *queryString, but I can't find an existing
functionto do thisfor the life of me.  I will write one if none exits, but I figured Iask here first.  Unfortunately,
nodeToStringis not quite right forwhat I'm doing. Thanks in advance.
 

--
--Dan


Re: Convert stmt back into queryString

From
Tom Lane
Date:
Dan Colish <dan@unencrypted.org> writes:
>     I am currently trying to convert an insertstmt back into a const
>     char *queryString, but I can't find an existing function to do this
>     for the life of me.  I will write one if none exits, but I figured I
>     ask here first.  Unfortunately, nodeToString is not quite right for
>     what I'm doing. Thanks in advance.

Hmm, you mean a Query, or a raw unanalyzed InsertStmt?  If the former,
ruleutils.c will help.  If the latter, be prepared to write a lot of
code; there's nothing closer than nodeToString, and even that is pretty
incomplete for raw grammar output nodes IIRC.
        regards, tom lane


Re: Convert stmt back into queryString

From
Dan Colish
Date:
On Tue, Aug 04, 2009 at 10:00:24PM -0400, Tom Lane wrote:
> Dan Colish <dan@unencrypted.org> writes:
> >     I am currently trying to convert an insertstmt back into a const
> >     char *queryString, but I can't find an existing function to do this
> >     for the life of me.  I will write one if none exits, but I figured I
> >     ask here first.  Unfortunately, nodeToString is not quite right for
> >     what I'm doing. Thanks in advance.
> 
> Hmm, you mean a Query, or a raw unanalyzed InsertStmt?  If the former,
> ruleutils.c will help.  If the latter, be prepared to write a lot of
> code; there's nothing closer than nodeToString, and even that is pretty
> incomplete for raw grammar output nodes IIRC.
> 
>             regards, tom lane

In this case, its a raw InsertStmt. I would like to pass this back to
parse_analyze, but I need to have a queryString to go with that call, so
crafting a function to rate that seems to be the only way, atm.

--
--Dan


Re: Convert stmt back into queryString

From
Tom Lane
Date:
Dan Colish <dan@unencrypted.org> writes:
> On Tue, Aug 04, 2009 at 10:00:24PM -0400, Tom Lane wrote:
>> Hmm, you mean a Query, or a raw unanalyzed InsertStmt?

> In this case, its a raw InsertStmt. I would like to pass this back to
> parse_analyze, but I need to have a queryString to go with that call, so
> crafting a function to rate that seems to be the only way, atm.

Hm, so you have an InsertStmt but not the text it was generated from?
Where?  By and large the design plan is that the source text should
still be available anyplace that's dealing with raw parsetrees.

I believe you can just pass NULL as the querystring --- the only thing
you lose from that is syntax location pointers in error messages.  But
in ordinary situations you shouldn't have to.  (Also, the fact that
that's what the string is used for means that ginning up a string from
the nodetree is a bit pointless.  It won't contain the detail that it's
meant to provide.)
        regards, tom lane


Re: Convert stmt back into queryString

From
Dan Colish
Date:
On Tue, Aug 04, 2009 at 10:55:07PM -0400, Tom Lane wrote:
> Dan Colish <dan@unencrypted.org> writes:
> > On Tue, Aug 04, 2009 at 10:00:24PM -0400, Tom Lane wrote:
> >> Hmm, you mean a Query, or a raw unanalyzed InsertStmt?
> 
> > In this case, its a raw InsertStmt. I would like to pass this back to
> > parse_analyze, but I need to have a queryString to go with that call, so
> > crafting a function to rate that seems to be the only way, atm.
> 
> Hm, so you have an InsertStmt but not the text it was generated from?
> Where?  By and large the design plan is that the source text should
> still be available anyplace that's dealing with raw parsetrees.
> 
> I believe you can just pass NULL as the querystring --- the only thing
> you lose from that is syntax location pointers in error messages.  But
> in ordinary situations you shouldn't have to.  (Also, the fact that
> that's what the string is used for means that ginning up a string from
> the nodetree is a bit pointless.  It won't contain the detail that it's
> meant to provide.)
> 
>             regards, tom lane


Well the problem with declaring it null is that the first parse_analyze
Assert will fail.     
Assert(sourceText != NULL); /* required as of 8.4 */

What I am doing here is taking one Create stmt of a new type and
breaking it up into the various operations I need it to perform. One is
a this InsertStmt. Another is a CreateStmt. I'll also need to add
CreateTrigStmt's. 

Recently, I've been thinking this would be best to do
in gram.y and then pass those parts as distinct nodes. I still might hit
this queryString issue although. I haven't thought about that enough.

--
--Dan