I have identifiers that unfortunately have a hyphen within them.

I want to output the data from the tables with those identifiers using .mode insert and .out foo.sql for re-loading.

I can't use .dump easily as i want to modify the tables before re-loading the data, so .mode insert seemed my best option.

Now obviously, I could avoid the problem by avoiding hyphens, but my database was written originally in XML and I'll have to change a fair amount of code to undo my naming convention.

I have worked around this in PHP to modify the output, but figured it would be useful to report the issue in the hope that it could be fixed (or I could be shown a way to have this work correctly)

Regards

  Jon


.mode insert does not appear to quote identifiers when needed.

qlite3 --version

3.11.0 2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f

Example:

sqlite> create table "d-asher" ( "d-asher" TEXT );
Run Time: real 0.001 user 0.000000 sys 0.000000

sqlite> insert into "d-asher" ("d-asher") values ('a b c');
Run Time: real 0.000 user 0.000000 sys 0.000000

sqlite> .mode insert "d-asher"
sqlite> select * from "d-asher";
INSERT INTO 'd-asher'(*d-asher*) VALUES('a b c');
Run Time: real 0.000 user 0.000000 sys 0.000000

Re-entering that line throws a syntax error.

sqlite> INSERT INTO 'd-asher'(d-asher) VALUES('a b c');
Run Time: real 0.000 user 0.000000 sys 0.000000
Error: near "-": syntax error

.dump gets it right.

sqlite> .dump "d-asher"
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE *"d-asher" *(*"d-asher"*TEXT );
INSERT INTO "d-asher" VALUES('a b c');
COMMIT;


_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to