Hello,

        I have been using DBI::Shell (via dbish) which provides a shell prompt for 
interacting with a database and I think I have come across a bug that I might be able 
to fix but am having trouble doing so. I looked on CPAN and Google and was not able to 
find anything beyond basic information about the module. I could not find a bug list, 
news group, mailing list, or website to track such problems. I would like to fix the 
bug, and provide it as a fix to the author if it actually works.

        In essence the bug is, if you use the character that normally precedes a dbish 
command (default is /) in your statement other than for a command, DBI::Shell 
interpretes everything that follows as a command. So if I type in:

  INSERT INTO Table SET Foo='http://baz.com'/     (commands are terminated by a /)

        DBI::Shell parses the first / instead of the last, which causes problems. 
Also, DBI::Shell has things that follow the /, like "/describe Table" so you can't 
just look for a terminating /.

        Here is the code from DBI/Shell.pm that parses the command (line 354 on 
V.11.2):

        if ( $current_line =~ /
                ^(.*?)
                $prefix
                (?:(\w*)([^\|>]*))?
                ((?:\||>>?).+)?
                $
        /x) {
            my ($stmt, $cmd, $args_string, $output) = ($1, $2, $3, $4||'');
            -- cut --


        I think the easiest thing would be to escape the prefix so I tried adding a 
negative lookbehind assertion where you could escape the prefix with a backslash, but 
it did not work, it still stopped at the first prefix:

            -- cut --
                ^(.*?)
                (?<!=\\)$prefix    
                (?:(\w*)([^\|>]*))?
            -- cut --

        I have not studied extended regexps too much, so I thought this would be a 
good learning experience, and hopefully fix a module in the process.

        If I am misunderstanding how to use DBI:Shell, let me know as well.

Thanks,

=-= Robert Thompson

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to