On 1/20/20 4:17 AM, Keith Medcalf wrote:
The "main" database is always seq == 0, the "temp" database is always seq == 1, 
and other databases are seq == 2 and greater in the order they were attached.  seq 2 -> whatever is 
always contiguous.  The table search order for unqualified names (when a search is required) is always 
in the seq returned by pragma database_list, so

select name
   from pragma_database_list as d
  where exists (select *
                  from pragma_table_info
                 where schema == d.name
                   and arg == 'x')
  limit 1;

will always return the correct schema name, no order by required.  (and you can 
use table_info rather than table_xinfo because a table must always have one 
named column that is not hidden.  If this were not the case, then you would 
have to use table_xinfo to ensure that something is returned for that pragma 
lookup.

One point, due to the nature of the fundamentals of SQL, the whole concept of 'first' means you MUST have an ORDER BY to get the item you want.  Yes, when you test it may seem that the records always come in the order you want without it, but that is really happenstance, and might change by any number of things.

If the order that the SQL engine happens to choose to fetch the data does happen to be in the order specified by the ORDER BY, then a good engine will optimize it out, so it is free.

--
Richard Damon

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

Reply via email to