On Sat, 14 Mar 2015 19:45:32 -0400
Richard Hipp <drh at sqlite.org> wrote:

> On 3/14/15, Skip Montanaro <skip at pobox.com> wrote:
> > >
> > Then I retrieved that statement with Ctl-P, then clear the id with
> > Ctl-B ESC-Del. I then entered the id of the next record to correct,
> > backed up and adjusted the date, and hit enter.
> >
> > Imagine my surprise when what I actually typed (without checking,
> > obviously!) was something like this:
> >
> > update swimmeet set end="1991-04-21" where 4193;
> >
> 
> The sqlite3 command-line shell program will link against a variety of
> (third-party) command-line editing libraries:
> 
> (1) GNU readline
> (2) Editline
> (3) Linenoise (https://github.com/antirez/linenoise)
...
> For reference, I am using /usr/bin/sqlite3 on a Mac
> 
> Do you know which one your particular build of sqlite3 is using?

Survey says?  Editline.  

$ ldd $(which sqlite3) | sed 's/(..*$//'
/usr/bin/sqlite3:
        /usr/lib/libncurses.5.4.dylib 
        /usr/lib/libsqlite3.dylib 
        /usr/lib/libedit.2.dylib 
        /usr/lib/libSystem.B.dylib 

The manpage for editline doesn't define what characters comprise a
word.  GNU readline defines word characters as "alphanumeric",
presumably [[:alnum:]].  

Source code for editline that I have handy includes this definition
in chared.c: 

/* ce__isword():
 *      Return if p is part of a word according to emacs
 */
protected int
ce__isword(Int p)
{
        return Isalnum(p) || Strchr(STR("*?_-.[]~="), p) != NULL;
}

These appear to be the word-break characters according to edltline (on
NetBSD).  

To the OP: Your intuition that '=' is not a word character seems to be
right.  To investigate further ISTM you need the source code for your
library.  I don't see any configuration option that SQLIte could use,
even if desired.  

--jkl

Reply via email to