On Tue, Jun 29, 2010 at 10:46 AM, Tim Romano <tim.romano...@gmail.com> wrote: > Puneet, > I am not trying to give Adobe any sort of primacy; but I wouldn't call them > unimportant either. > > The core concern, at least as I see it, is the undesirable effects of > sharing data between implementations that do not handle INT and INTEGER > primary keys compatibly. >
There is no incompatibility. CREATE TABLE t AS SELECT ... is not meant to clone a table. Period. Done. Don't depend on it, don't expect it, don't promote it. > I don't use and won't use the "create table as select ... " syntax, but > others might, hence the advisory. > > Here's a little story: years ago, back in the days of dumb terminals, > oncology patients were dying in abnormally high numbers not long after > receiving their radiation treatment. Turned out that the software that > controlled the radiation dosage was written to be used with a dumb-terminal > that did not have cursor-positioning keys. It might have been a VT100. I > don't recall. You had to hit RETURN to move from field to field. But the > hospital had installed a "compatible" terminal that did have these > cursor-arrow keys. The hospital technician, ignorant of the consequences, > were in the habit of using the arrow keys to move the cursor around the > radiation dosage and timing screen, and then would key in their values and > execute the program. The numbers they keyed in were actually hitting the > wrong input fields. The users' eyes told them they were on the dosage field > but they were actually keying in the value for the time, or vice-versa, and > the patients were being given lethal doses of radiation. > > I saw this on 60 minutes or 20/20 or some show like that -- I didn't write > that program or install the compatible terminal. But since then, whenever I > see the opportunity for things going FUBAR, I will say something. > > Regards > Tim Romano > Swarthmore PA > > > > > > > > > On Tue, Jun 29, 2010 at 11:10 AM, P Kishor <punk.k...@gmail.com> wrote: > >> On Tue, Jun 29, 2010 at 9:58 AM, Tim Romano <tim.romano...@gmail.com> >> wrote: >> > But there may be an argument for making the cloning more precise. >> >> >> The issue is that CREATE TABLE t AS SELECT... is not meant to clone a >> table. Not too long ago I encountered the same issue (search the mail >> archives). Igor, as usual, explained it succinctly and effectively -- >> >> sqlite> CREATE TABLE t (a INTEGER PRIMARY KEY, b TEXT); >> sqlite> INSERT INTO t (b) VALUES ('foo'); >> sqlite> INSERT INTO t (b) VALUES ('bar'); >> sqlite> INSERT INTO t (b) VALUES ('baz'); >> sqlite> SELECT * FROM t; >> a b >> ---------- ---------- >> 1 foo >> 2 bar >> 3 baz >> sqlite> CREATE TABLE u AS SELECT a + 0.5 AS a, b FROM t; >> sqlite> SELECT * FROM u; >> a b >> ---------- ---------- >> 1.5 foo >> 2.5 bar >> 3.5 baz >> sqlite> .s >> CREATE TABLE t (a INTEGER PRIMARY KEY, b TEXT); >> CREATE TABLE u(a,b TEXT); >> sqlite> SELECT Typeof(a) FROM u; >> Typeof(a) >> ---------- >> real >> real >> real >> sqlite> CREATE TABLE v (a INTEGER PRIMARY KEY, b TEXT); >> sqlite> INSERT INTO v SELECT * FROM t; >> sqlite> SELECT * FROM v; >> a b >> ---------- ---------- >> 1 foo >> 2 bar >> 3 baz >> sqlite> DELETE FROM v; >> sqlite> INSERT INTO v SELECT a + 0.5, b FROM t; >> Error: datatype mismatch >> sqlite> >> >> >> In other words, don't use CREATE TABLE .. AS SELECT .. to clone. >> Instead, create the new table the way you want to, and then use INSERT >> to populate it with data from the old table. >> >> >> > It's a >> > bit of a mess, or at least it seems so to me because my first ten years >> of >> > database work was done with PICK, a database that was developed by PICK >> > Systems but licensed to many companies and marketed under different >> brands >> > with subtle functionality differences, yet applications that adhered to >> the >> > core PICK spec were completely portable across all implementations. I >> think >> > SQLite implementations should probably adhere to a core spec but I >> recognize >> > this as my bias, not dogma. >> > >> > Adobe (and possibly Google and some others who are involved in >> coordinating >> > their SQLite implementations --I'm not fully "up" on the details of who >> all >> > are involved in that cooperative effort, or the extent to which they have >> > reconciled their implementations) treats INT primary keys as aliases for >> > the RowId, whereas SQLite does so only with INTEGER primary keys. >> > >> > Should one ever share a SQLite database that happens to contain tables >> > defined via the "CREATE TABLE X as SELECT..." cloning approach with >> someone >> > who is using an Adobe-based tool, the query results returned by the >> > Adobe-based tool will not jibe with the results returned by the SQlite >> > command-line utility. On the table with INT primary key, Adobe will be >> > fetching the row by row-id. >> > >> > If a table has foreign-key value of 10, and is joined to a table with an >> > INT primary key, Adobe will bring over the 10th row in the table even >> though >> > the value in the primary key column of that table may or may not contain >> the >> > number 10. >> > >> > In Adobe: >> > >> > CREATE TABLE FOO (id INT PRIMARY KEY, name TEXT) >> > insert into FOO(1,'Groucho') >> > insert into FOO(2,'Chico') >> > Insert into FOO(999, 'Harpo') >> > >> > the row id of Harpo's row is 3 (it's PK value is 999) and Harpo will be >> > returned by a join when the foreign key = 3 not when the foreign key = >> 999. >> > >> >> >> Right. But, the issue here may be that the sqlite world is much, much >> bigger than either the Adobe or the Google worlds. While those two >> companies may be a part of the sqlite consortium, sqlite itself runs >> on way more platforms and in configurations than Adobe+Google support. >> >> In any case, I am not even sure if the sql standard calls for CREATE >> TABLE t AS SELECT... to produce a clone of a table. >> >> >> >> >> > >> > Regards >> > Tim Romano >> > -- >> > Most people assume one is wearing underwear. Not so for intelligence. >> > >> > >> > On Tue, Jun 29, 2010 at 9:46 AM, Jay A. Kreibich <j...@kreibi.ch> wrote: >> > >> >> On Tue, Jun 29, 2010 at 06:59:18AM -0400, Tim Romano scratched on the >> wall: >> >> > CREATE TABLE "main"."proto" ("id" INTEGER PRIMARY KEY AUTOINCREMENT >> >> NOT >> >> > NULL , "name" TEXT) >> >> > CREATE TABLE "main"."clone" as select * from PROTO >> >> > >> >> > The primary key of table CLONE is defined as "INT" not "INTEGER". >> >> >> >> The only information preserved by CREATE TABLE ... AS SELECT is the >> >> column affinity (not "type"). These are equivalent, and both >> >> translate to an INTEGER affinity. >> >> >> >> >> >> >> >> ...which actually surprises me, since I was under the impression >> >> CREATE TABLE ... AS SELECT always produced NONE affinities. Is this >> >> a semi-recent (last year) change? >> >> >> >> -j >> >> >> >> >> >> -- >> >> Jay A. Kreibich < J A Y @ K R E I B I.C H > >> >> >> >> "Intelligence is like underwear: it is important that you have it, >> >> but showing it to the wrong people has the tendency to make them >> >> feel uncomfortable." -- Angela Johnson >> >> _______________________________________________ >> >> sqlite-users mailing list >> >> sqlite-users@sqlite.org >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> >> >> > _______________________________________________ >> > sqlite-users mailing list >> > sqlite-users@sqlite.org >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > >> >> >> >> -- >> Puneet Kishor http://www.punkish.org >> Carbon Model http://carbonmodel.org >> Charter Member, Open Source Geospatial Foundation http://www.osgeo.org >> Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor >> Nelson Institute, UW-Madison http://www.nelson.wisc.edu >> ----------------------------------------------------------------------- >> Assertions are politics; backing up assertions with evidence is science >> ======================================================================= >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users