I ran into an inconsistency? between CREATE and DROP TABLE today:
# Pipe this example through sed -e 's/^ *//' before running through
# a shell
#
# 1. Set up table a.t1
rm -f a.sqlite b.sqlite c.sqlite
cat <<SQL | sqlite3 a.sqlite
CREATE TABLE t1(id INTEGER);
SQL
# 2. Create an unqualified (main.)t1 in presence of a.t1:
cat <<SQL | sqlite3 b.sqlite
ATTACH DATABASE 'a.sqlite' AS a;
CREATE TABLE t1(id INTEGER);
SQL
# 3. Drop an unqualified (main.)t1 in presence of a.t1:
cat <<SQL | sqlite3 c.sqlite
ATTACH DATABASE 'a.sqlite' AS a;
DROP TABLE IF EXISTS t1; -- Drops a.t1 !!?!
SQL
This caught me rather by surprise. I guess my expectation was that
since CREATE TABLE works in the main context that DROP TABLE would as
well.
This being SQLite the behaviour is documented[1]. However, might I
suggest to the developers that linking to [1] or adding a small note in
each of the DROP / DELETE / UPDATE documentation pages would be useful
for this (potentially dangerious) behaviour?
[1] https://www.sqlite.org/lang_naming.html
I think I would also appreciate a pragma that requires full schema
paths for a) modification statements and/or b) all statements.
--
Mark Lawrence
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users