From 368bdf8d0515419ac856f02104f17bfa62190a21 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 18 Mar 2011 11:11:44 +0900 Subject: [PATCH] set the new types on upgrade --- anki/find.py | 2 +- anki/storage.py | 20 +++++++++++++++----- tests/support/anki12.anki | Bin 192512 -> 196608 bytes tests/test_deck.py | 2 ++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/anki/find.py b/anki/find.py index 3923df13c..486fb3a98 100644 --- a/anki/find.py +++ b/anki/find.py @@ -441,7 +441,7 @@ select id from facts where tags like :_tag_%d""" % c "from deckvars where key = 'leechFails')") else: # due qquery += ("select id from cards where " - "queue between 0 and 1 and due < %d") % deck.dayCutoff + "queue = 2 and due <= %d") % deck.sched.today elif type == SEARCH_FID: if fidquery: if isNeg: diff --git a/anki/storage.py b/anki/storage.py index 275a279fb..b51b30daf 100644 --- a/anki/storage.py +++ b/anki/storage.py @@ -243,10 +243,20 @@ def _upgradeSchema(db): _moveTable(db, "cards", True) # use the new order to rewrite card ids cardmap = dict(db.all("select id, rowid from cards2")) - # move back, preserving new ids + # move back, preserving new ids, and rewriting types db.execute(""" insert into cards select rowid, factId, 1, ordinal, cast(created as int), -cast(modified as int), relativeDelay, type, due, cast(interval as int), +cast(modified as int), +(case relativeDelay +when 0 then 1 +when 1 then 2 +when 2 then 0 end), +(case type +when 0 then 1 +when 1 then 2 +when 2 then 0 +else type end), +due, cast(interval as int), cast(factor*1000 as int), reps, successive, noCount, 0, 0, 0, "" from cards2 order by created""") db.execute("drop table cards2") @@ -505,15 +515,15 @@ def _postSchemaUpgrade(deck): deck.db.execute("drop table if exists %sDeleted" % t) # rewrite due times for new cards deck.db.execute(""" -update cards set due = fid where type=2""") +update cards set due = fid where type=0""") # and failed cards - deck.db.execute("update cards set edue = ? where type = 0", + deck.db.execute("update cards set edue = ? where type = 1", deck.sched.today+1) # and due cards deck.db.execute(""" update cards set due = cast( (case when due < :stamp then 0 else 1 end) + -((due-:stamp)/86400) as int)+:today where type = 1 +((due-:stamp)/86400) as int)+:today where type = 2 """, stamp=deck.sched.dayCutoff, today=deck.sched.today) # update insertion id deck.conf['nextFid'] = deck.db.scalar("select max(id) from facts")+1 diff --git a/tests/support/anki12.anki b/tests/support/anki12.anki index 226abcab8c7d5563ad3d3f4f0de1508c6e45c8af..24d02755682ca35d4fc28676d1b84cab12b9ca07 100644 GIT binary patch delta 3062 zcmZ`*3vg6d8NTPNZQO8s}pFTS}bKkN~zdkP?X^@MA~XP+S;oBxycDl zGTxcp^ZFm(|DFGw|8)J?(beUAHqS)`LGa;^e-*u@6@T#GL#Lu zGQ1F|pt*v*fXK3I3smuArl1n+5lJx>nIf#Ig3aBnA z9};cx#*$YMGJvaBp*IZ~i-k1BnFZ7wWufC-~X^4@A-%MLrJ*43H zL5k|KjO^f#C}Z>@s@HtN)Sn*@j;wy~;gYBRdHqT#@PmenBi|OJ(9*Lv|9Ygj~pHFqERlX;($ z6qp``{KlH-+h86_CwiwCk|T9ZNJz*%)r#U2g?$?whlRktHz%?A7@OngPkd4|?J^Q! zJIOv`CA{6rbjRWDx*MbOMG+i>HzmZep$4Y5Y_77Cg;wNe=oG>y?WC&Iq9^h}J>NCn zPS1aXuXl&Ov)Alb$^DjzTf5A^sU(5@Bj-PU-n^7f&Wg?+^92XFj(I6QF#L>@I0@?- zOzA9zmBLxp`=a?PjTDMI^UUu%NuGI1COPH_rv-Dc06O-8zbR( zG||Y;qSf=6dI!lawkGtpR^6J^iyz-=B$6>UZfkB1Ck?%|EfP)`%ZI=EIQh9&<8_`A z;3j7Dui-iPCVUA>LDlYPuWN_3UM;RQYM;}x)JgR<^=0*^>V7q+iX+(YAMbuN4xhZBeM-zy3s?)eB97(Q=R_hf@@~EeJ z{xTC^&+IUvz@mlJQ!-CzTex|vQLX#aJ=85g)QD6)mhiiB=`sPB`56QbH}!B-fvOx@ zwB8*zw#AGm?vEvsZSjuOo!{y;EA;?c%4U{YjA$(EgDhGg0OQWWk*IWL(mVmL#jWv( zk?@r)px(9F==8Dra6FOv@9Dfwf0gcE?4s^6cOn^1vS6*YG1<{>)P_4MnTKT=)LY?U zRv!v)W+J@Xm<(@Ti_`vqUZML7fqMPfeC^X>Y;GNs3b-^DsRh>Jx|5NuQujTXR`iT( z#zG@*M+{kyR_gu?CtZT%%#fQ{xy(V`pUq=NIhcfncWqnCqp?;aTE##ko^Y`8qf zI9p!FAg)M5c%4gTE5}-sMjUgb)<{GGmJMb{_b;WmMRR1MTa7g{QW&r9_ej)TG{+x1 zVHk)@WW-y}c#`K3nr%)zLtL&PW)U7{8`Meg7uW@-hqY&k2lC;xkZ-f$4cRc^tj_Nn zv<u@>y~BL6t|&l>_M^B1hwtc z+WmL~n&bV%!*A^O`iWbW;0Bz7Nvu~d!5^`{^x_$x6jYIea7x4`9$frLdC#qTw^)M% z@jf<)3JyuJnd8Sv(6JwO!vqY%C3qE0B*7dUBkAUzlVs`Ft^2Hnqs^3LE0X@6Te~>K zyK`qK_sZv3sp0jIQAlA>fLGDe1YAN-hb&L!)^%OqG<UJOjuz-o|lF^Ejb92j)@Ny3dM-UQs5ZoVluxqCbE71w0G39-_>HF{l8FW+h;u0 zT#H~T>v_x{8xQ|$OjPtNDNOu~xnO97YlkbKlYCUf7>5%T^!E*}*ITZo_s(TXc;no^{D!59C!jH!P00(5b AbN~PV delta 1657 zcmZWpe{54#6n^LR?fq)|&g=ZKRovQcEbC;#8-zp**#;pCe@NUPn=ClpkFJjC=3uSN znV~QQHH(4K;3bS?jb@2ck&Y%*R5m7yW}=pX)BUj!HLzh=WRoR84C=joyv@WmFQ+~C zp7VX@`|f>v_Bi(ZVn4LZW#c$*6@9GF>YlmG`A06LuHmv86U_DO7edQGxsrRf+ zTLYP#9BK6AWJldzT2(5Tk^a;bpCU=JEGzVhOnLk^T|NeGg^G2rpOSwIP8kMYF|a@ zjCA$oJg6ujZ@64NEB`&vz2Wk6dF#GjITZP>*yxayNDSI8N5>-3l6V0El zjdFOM9*Z$d;Kz6r-@)BjjvKKE^U#HYHm_aNCbd!O>{0EF^mHMg!DU~_0wusIkG zHW+r7;O6j!reJeJ$WV15gTsbk;H6Lzty30LYt|Or)f8;s+!PA8 zwsjb)gVnbL8=C42vECDVnO`+x12_)lv;HGY}i$Lc3AVcAC1{ZJ`PbKt=@Dq~hlaOnV;cFo_8i6ucLhlgSLHp=3wvg7vs2&xqy@Q@JFt)xCMb>KduGnOsN?(J zViZT%)B?shiZY6^6jC&WWFEJ(V&ZBNa&;$tv)~OpjGZ`yAJP}jb|jrQp-_BCpu+Hp zPjA9Ax@yC54(IV#9H)fOV`3b6BZ_#1>S_n|A{+EUiSVATHy_h diff --git a/tests/test_deck.py b/tests/test_deck.py index 23d91861c..8f4e9c2a1 100644 --- a/tests/test_deck.py +++ b/tests/test_deck.py @@ -121,6 +121,8 @@ def test_upgrade(): print "upgrade to", dst shutil.copy(src, dst) deck = Deck(dst) + # 3 new, 2 failed, 1 due + assert deck.sched.counts() == (3,2,1) # now's a good time to test the integrity check too deck.fixIntegrity()