The change in behavior occurs with http://www.sqlite.org/src/info/38852f158a
If you need a work-around, change INNER to CROSS in the queries and the old query plan will be restored. On Thu, Apr 18, 2013 at 3:27 AM, Mario M. Westphal <m...@mwlabs.de> wrote: > This is a SQL Script > > > /* > Application linking to SQLite using the Amalgation. > Build Tool: C++, Visual Studio 2012, Windows 7 64-Bit > > The table schema and the query enclosed below are in use > for over one year and various SQLite versions. > > After downloading and compiling in the SQLite 3.7.16.2, we have a problem. > > The INSERT statement which takes only a few seconds with previous builds > now does not return, at least not within several minutes. > It's hard to debug the amalgation in Visual Studio but it looks like > SQLite would be caught in an internal loop inside the step() function call. > > Replacing the latest version of SQLite with 3.7.15.1 (which was the one we > used before) > and re-compiling our application solves the problem. The INSERT works again > in a few seconds. > > We can provide a sample database etc. on request. > */ > > > /* Create */ > > CREATE VIRTUAL TABLE md_fts_core USING > fts4(group_oid,tag_oid,file_oid,lang,data); > > CREATE TABLE md_fts_core_tag (oid INTEGER PRIMARY KEY, type INTEGER); > CREATE INDEX idx_md_fts_core_tag_type ON md_fts_core_tag(type); > > CREATE TABLE md_tag (oid INTEGER PRIMARY KEY, class INTEGER, group_oid > INTEGER, id TEXT, tag TEXT, idx INTEGER, dtype INTEGER, ntype TEXT, cnt > INTEGER, repeat INTEGER, flags INTEGER, FOREIGN KEY(group_oid) REFERENCES > md_tag_group(oid) ON DELETE CASCADE); > CREATE INDEX idx_md_tag_tag ON md_tag(tag); > > CREATE TABLE md_tag_group (oid INTEGER PRIMARY KEY, src INTEGER, id TEXT); > > CREATE TABLE md_tag_data (oid INTEGER, tag_oid INTEGER, tdata TEXT, rdata > TEXT, lang TEXT, flags INTEGER, FOREIGN KEY(tag_oid) REFERENCES md_tag(oid) > ON DELETE CASCADE); > CREATE INDEX idx_md_tag_data_flags ON md_tag_data(flags); > CREATE INDEX idx_md_tag_data_oid ON md_tag_data(oid); > CREATE INDEX idx_md_tag_data_oid_tag_oid ON md_tag_data(oid,tag_oid); > CREATE INDEX idx_md_tag_data_tag_oid ON md_tag_data(tag_oid); > > > /* This insert does not return (at least not within several minutes in > 3.7.16.2, but takes about 5-10 seconds with build 3.7.15.1 */ > > INSERT INTO md_fts_core (group_oid,tag_oid,file_oid,lang,data) > > SELECT > g.oid, d.tag_oid, d.oid, d.lang, d.tdata from md_tag_data d > INNER JOIN > md_tag t ON d.tag_oid = t.oid > INNER JOIN > md_tag_group g ON t.group_oid = g.oid > INNER JOIN > md_fts_core_tag ct ON ct.type = 0 AND ct.oid = d.tag_oid /* which > tags to include */ > WHERE > d.oid IN > > (1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,3 > > 4,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59 > > ,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84, > > 85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107 > ,108) > AND d.tag_oid IN (2157,7309,16265,16579) > > UNION > > SELECT > /* We use group_concat to fold multiple values for one tag into one > value for FTS */ > g.oid, d.tag_oid, d.oid, d.lang, group_concat(d.tdata,' ') > FROM > md_tag_data d > INNER JOIN > md_tag t ON d.tag_oid = t.oid > INNER JOIN > md_tag_group g ON t.group_oid = g.oid > INNER JOIN > md_fts_core_tag ct ON ct.type = 1 AND ct.oid = d.tag_oid /* which > tags to include */ > WHERE > d.oid IN > > (1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,3 > > 4,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59 > > ,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84, > > 85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107 > ,108) > AND d.tag_oid IN (2157,7309,16265,16579) > GROUP BY > d.tag_oid,d.oid > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > -- D. Richard Hipp d...@sqlite.org _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users