Thread: syntax for drop if exists

syntax for drop if exists

From
Andrew Dunstan
Date:
I was just looking briefly at doing "drop if exists" as we discussed 
recently.

The MySQL syntax is actually "drop table if exists foo ...". 
Implementing this unfortunately generates a shift/reduce conflict, 
unless I put IF in the func_name_keyword list, which strikes me as a bad 
idea.

Alternatively,  we could use the syntax "drop if exists table foo ..." 
which seems more natural to me, and generates no conflict.

Or we could live with the conflict, which I think would be harmless 
unless you wanted to delete a table called "if", in which case you might 
need to say "drop table if exists if" ;-)

I'm inclined to live with it, annoying as it is. I looked around to see 
what other DBs do - but AFAICS most don't support this.

Thoughts?

cheers

andrew




Re: syntax for drop if exists

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> The MySQL syntax is actually "drop table if exists foo ...". 
> Implementing this unfortunately generates a shift/reduce conflict, 

What did you try exactly?  I don't see any fundamental reason for
a conflict here.  You may just need to rearrange the grammar to postpone
the reduction a bit.

> Or we could live with the conflict,

Utterly unacceptable; see previous discussions.
        regards, tom lane


Re: syntax for drop if exists

From
Andrew Dunstan
Date:

Tom Lane wrote:

>Andrew Dunstan <andrew@dunslane.net> writes:
>  
>
>>The MySQL syntax is actually "drop table if exists foo ...". 
>>Implementing this unfortunately generates a shift/reduce conflict, 
>>    
>>
>
>What did you try exactly?  I don't see any fundamental reason for
>a conflict here.  You may just need to rearrange the grammar to postpone
>the reduction a bit.
>
>  
>

You're right, as usual. I had factored out the IF EXISTS bit into a 
seperate rule. When I undid that and instead used 2 rules for DropStmt, 
the problem disappeared. (This is because it gives bison more info about 
the context of each IF - this has often caught me with bison - I should 
have known better).

cheers

andrew