On Tuesday, 6 August, 2019 04:27, Olivier Mascia <[email protected]> inquired:
>On one database instance, a .dump command gives me (among many other
>lines) things like:
>
> INSERT INTO STATISTICS VALUES(11237795927160,11868);
>
>while the output of .recover command gives me things this way:
>
> INSERT INTO 'STATISTICS'('_rowid_', STATDATE, DISKUSED) VALUES(
>1, 11237795927160, 11868 );
>
>I'm wondering why these differences in the way to construct the
>instructions to rebuild a sound database instance. What are the
>(probably rightful) motivations?
>1) Why 'STATISTICS' (and not STATISTICS as in .dump command)? If
>escaping wanted, why not double quotes instead of single quotes?
This is a good question and the single quotes are bad syntax (or should be).
Identifier quoting should be using double-quotes. As to why identifier quotes
are included when not required, this is a matter of taste. Some people love
quotes. Some people use them only when necessary. Others deliberately choose
identifiers so quotes are never required. I happen to fall into the latter
camp.
>2) Why do the insert statement prefer to name and repeat, ad nausea,
>the column names on each insert when, apparently, the shortcut syntax
>capitalizing on the known column order in the schema might seem much
>less verbose?
In this particular case it is to preserve the _rowid_. The .recover command is
designed to "recover" the database, not merely ".dump" the data. Therefore, if
one wants to preserve the internal _rowid_ (because there is no explicitly
named INTEGER PRIMARY KEY for a rowid table, for example), the only way to do
so is to provide the list of attributes for which values are being provided.
--
The fact that there's a Highway to Hell but only a Stairway to Heaven says a
lot about anticipated traffic volume.
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users