SQLite Forum

.read command breaks on reading from named pipes
Login
In check-in [6d258c3c7ecafa11](https://sqlite.org/src/info/6d258c3c7ecafa11) the
".read" command added a check to not error on directories, by checking if the
file is a regular file.

However, there are other types of files one might want to read, for example a
named pipe.

Use case for this is generating SQL on the fly and piping it to the sqlite
executable. It is a bit more flexible compared to the `.read '|script.sh'`
approach.

Minimal reproduction:

```
sqlite3 :memory: ".read "<(echo "SELECT 1;")
```

Run with for example bash or any other shell that supports process substitution.

On older versions, this would correctly print `1`. Now we instead get
`Error: cannot open "/dev/fd/63"`.

Suggested fix would be to replace the `notNormalFile()` function with one that
also accepts named pipes.

(Perhaps other people have use cases for even more unsual types such as
character devices? Transmitting SQL commands straight over a serial port into
sqlite seems funky, but I guess in good Unix tradition we should give people
the freedom to shoot themselves in the foot. :) )