Bug 1199077 - Add a key-value metadata table to Places. r?mak draft
authorKit Cambridge <kit@yakshaving.ninja>
Sat, 03 Mar 2018 11:19:22 -0800
changeset 763319 59a4e14eb321b029a16dcf76b9a3da92414fb1b7
parent 763318 e18f30897988d15cf7018fe5c4e3b034efcd80bd
child 763320 dbf5f65dfb9b1a1648485b87f39586d52e92118f
push id101400
push userbmo:kit@mozilla.com
push dateMon, 05 Mar 2018 19:04:07 +0000
reviewersmak
bugs1199077
milestone60.0a1
Bug 1199077 - Add a key-value metadata table to Places. r?mak MozReview-Commit-ID: 3Q8FQmorZrM
toolkit/components/places/Database.cpp
toolkit/components/places/Database.h
toolkit/components/places/nsPlacesTables.h
toolkit/components/places/tests/head_common.js
toolkit/components/places/tests/migration/places_v43.sqlite
toolkit/components/places/tests/migration/test_current_from_v43.js
toolkit/components/places/tests/migration/xpcshell.ini
--- a/toolkit/components/places/Database.cpp
+++ b/toolkit/components/places/Database.cpp
@@ -1214,17 +1214,22 @@ Database::InitSchema(bool* aDatabaseMigr
         NS_ENSURE_SUCCESS(rv, rv);
       }
 
       if (currentSchemaVersion < 43) {
         rv = MigrateV43Up();
         NS_ENSURE_SUCCESS(rv, rv);
       }
 
-      // Firefox 60 uses schema version 43.
+      if (currentSchemaVersion < 44) {
+        rv = MigrateV44Up();
+        NS_ENSURE_SUCCESS(rv, rv);
+      }
+
+      // Firefox 61 uses schema version 44.
 
       // Schema Upgrades must add migration code here.
       // >>> IMPORTANT! <<<
       // NEVER MIX UP SYNC AND ASYNC EXECUTION IN MIGRATORS, YOU MAY LOCK THE
       // CONNECTION AND CAUSE FURTHER STEPS TO FAIL.
       // In case, set a bool and do the async work in the ScopeExit guard just
       // before the migration steps.
     }
@@ -1299,16 +1304,20 @@ Database::InitSchema(bool* aDatabaseMigr
     NS_ENSURE_SUCCESS(rv, rv);
 
     // moz_items_annos.
     rv = mMainConn->ExecuteSimpleSQL(CREATE_MOZ_ITEMS_ANNOS);
     NS_ENSURE_SUCCESS(rv, rv);
     rv = mMainConn->ExecuteSimpleSQL(CREATE_IDX_MOZ_ITEMSANNOS_PLACEATTRIBUTE);
     NS_ENSURE_SUCCESS(rv, rv);
 
+    // moz_meta.
+    rv = mMainConn->ExecuteSimpleSQL(CREATE_MOZ_META);
+    NS_ENSURE_SUCCESS(rv, rv);
+
     // Initialize the bookmark roots in the new DB.
     rv = CreateBookmarkRoots();
     NS_ENSURE_SUCCESS(rv, rv);
   }
 
   // Set the schema version to the current one.
   rv = mMainConn->SetSchemaVersion(DATABASE_SCHEMA_VERSION);
   NS_ENSURE_SUCCESS(rv, rv);
@@ -1931,16 +1940,30 @@ Database::MigrateV43Up() {
     "WHERE post_data ISNULL "
   ));
   NS_ENSURE_SUCCESS(rv, rv);
 
   return NS_OK;
 }
 
 nsresult
+Database::MigrateV44Up() {
+  nsCOMPtr<mozIStorageStatement> metaTableStmt;
+  nsresult rv = mMainConn->CreateStatement(NS_LITERAL_CSTRING(
+    "SELECT 1 FROM moz_meta"
+  ), getter_AddRefs(metaTableStmt));
+  if (NS_FAILED(rv)) {
+    rv = mMainConn->ExecuteSimpleSQL(CREATE_MOZ_META);
+    NS_ENSURE_SUCCESS(rv, rv);
+  }
+
+  return NS_OK;
+}
+
+nsresult
 Database::GetItemsWithAnno(const nsACString& aAnnoName, int32_t aItemType,
                            nsTArray<int64_t>& aItemIds)
 {
   nsCOMPtr<mozIStorageStatement> stmt;
   nsresult rv = mMainConn->CreateStatement(NS_LITERAL_CSTRING(
     "SELECT b.id FROM moz_items_annos a "
     "JOIN moz_anno_attributes n ON n.id = a.anno_attribute_id "
     "JOIN moz_bookmarks b ON b.id = a.item_id "
--- a/toolkit/components/places/Database.h
+++ b/toolkit/components/places/Database.h
@@ -14,17 +14,17 @@
 #include "mozilla/storage/StatementCache.h"
 #include "mozilla/Attributes.h"
 #include "nsIEventTarget.h"
 #include "Shutdown.h"
 #include "nsCategoryCache.h"
 
 // This is the schema version. Update it at any schema change and add a
 // corresponding migrateVxx method below.
-#define DATABASE_SCHEMA_VERSION 43
+#define DATABASE_SCHEMA_VERSION 44
 
 // Fired after Places inited.
 #define TOPIC_PLACES_INIT_COMPLETE "places-init-complete"
 // This topic is received when the profile is about to be lost.  Places does
 // initial shutdown work and notifies TOPIC_PLACES_SHUTDOWN to all listeners.
 // Any shutdown work that requires the Places APIs should happen here.
 #define TOPIC_PROFILE_CHANGE_TEARDOWN "profile-change-teardown"
 // Fired when Places is shutting down.  Any code should stop accessing Places
@@ -299,16 +299,17 @@ protected:
   nsresult MigrateV36Up();
   nsresult MigrateV37Up();
   nsresult MigrateV38Up();
   nsresult MigrateV39Up();
   nsresult MigrateV40Up();
   nsresult MigrateV41Up();
   nsresult MigrateV42Up();
   nsresult MigrateV43Up();
+  nsresult MigrateV44Up();
 
   nsresult UpdateBookmarkRootTitles();
 
   friend class ConnectionShutdownBlocker;
 
   int64_t CreateMobileRoot();
   nsresult GetItemsWithAnno(const nsACString& aAnnoName, int32_t aItemType,
                             nsTArray<int64_t>& aItemIds);
--- a/toolkit/components/places/nsPlacesTables.h
+++ b/toolkit/components/places/nsPlacesTables.h
@@ -216,9 +216,20 @@
     "page_id INTEGER NOT NULL, " \
     "icon_id INTEGER NOT NULL, " \
     "PRIMARY KEY (page_id, icon_id), " \
     "FOREIGN KEY (page_id) REFERENCES moz_pages_w_icons ON DELETE CASCADE, " \
     "FOREIGN KEY (icon_id) REFERENCES moz_icons ON DELETE CASCADE " \
   ") WITHOUT ROWID " \
 )
 
+// This table holds key-value metadata for Places and its consumers. Sync stores
+// the sync IDs for the bookmarks and history collections in this table, and the
+// last sync time for history.
+#define CREATE_MOZ_META NS_LITERAL_CSTRING( \
+  "CREATE TABLE moz_meta (" \
+    "  key TEXT PRIMARY KEY" \
+    ", value NOT NULL" \
+  ") WITHOUT ROWID" \
+)
+
+
 #endif // __nsPlacesTables_h__
--- a/toolkit/components/places/tests/head_common.js
+++ b/toolkit/components/places/tests/head_common.js
@@ -1,17 +1,17 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // It is expected that the test files importing this file define Cu etc.
 /* global Cu, Ci, Cc, Cr */
 
-const CURRENT_SCHEMA_VERSION = 43;
+const CURRENT_SCHEMA_VERSION = 44;
 const FIRST_UPGRADABLE_SCHEMA_VERSION = 30;
 
 const NS_APP_USER_PROFILE_50_DIR = "ProfD";
 
 // Shortcuts to transitions type.
 const TRANSITION_LINK = Ci.nsINavHistoryService.TRANSITION_LINK;
 const TRANSITION_TYPED = Ci.nsINavHistoryService.TRANSITION_TYPED;
 const TRANSITION_BOOKMARK = Ci.nsINavHistoryService.TRANSITION_BOOKMARK;
new file mode 100644
index 0000000000000000000000000000000000000000..a33643ab3668552e91434eb427c62e73e0a012ec
GIT binary patch
literal 1146880
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
z000000000000000000000000000000000000D#w7SL5*P>%0g6000000000000000
z00000000000000000000004NM^+tc0@TX(p*TPrBe;WR5_*8f<3IPBB0000000000
z0000000000000000000000000;Qz|4nRM*#L}zTOa-~=*<p(O&@z`^3NvC6jQF6MJ
zF9-F3C3PD*(y>jA4#m;YVtrt&G8KF7&Qv<KFUl2yOF^kJ9aNWgxg(j5?TM;KXU1FE
zCAGOkI`&|rwp1A(C>O^k>ZQ4*E#4AuEhk?nRLZrbbzRXpWWqu${AT#s@Lz<#68?Pn
zbQA&r000000000000000000000000000000000000KoruKb{<nPnYuLpgu5Fxl$~Z
z@&lFXc)Blncf2jmtV?c+PZdW;i}iuA%2dbg$$jxca49HNrh{sG$JEB;p7`j@cq`FX
zk-Q`MV0^Sx86PMY$0zEgx%SG$ZOOrGzEG%?YwhXYXnh-={&Xz-qwp8Q$HTW@`^L3T
zT${Z1j;r6e`ux>*U%m60|NP9aK9hgu?N9$j)Cd3o0000000000000000000000000
z0000000000-q5ygSQm@O;@RkBI=wlYO(tR;h3C6p*?)SW+*6->*W7shSZQBjaQ`jq
zV%d1S^X^vbcu(R?Fcy^SxwHB4TC>APZ~IiMWAEej=|?9gj~v}MJ9G4S;{Nrmo}1@;
zb|+6(YW3XtVy##Y3e7GrzyC;Uh_2Y713UJgsFp^HS9YFF?C)!K&9=IBMr%AA)N@D6
zmnx-8^Id=K)lV&y2aa7Hf9%|J<?O>J&%bkBvuAwEe9ufKeY*K8>baAx-!E@=`oL@7
zUMNov*LEF!baw8k(ed)Z-d5-P=R2n}9fyjwv6)&ecdGT{=($Qccl6A`<%1kQbnf6x
z<@n68i;oXK*wY$h+x#FMnbd(&DK}S{spiJ2`PxKKTi$)>;P9c+rK#cB$uqMDx?A1%
z%y&;^k_&U64QlnEnmb#mlvWI}r&c`vWTkv&s=oWs;jY#Y54DDfCo_rplg}Mm_-**y
zsh~bvsZK5*r;tB+Y4VBLgTeUGBZ;5Rw%&$a^8+O^3*$UIGoCwJ&5un6)#W2Rc4hX7
z`-gTv@$j|-I};CeMk8e7oeO7^d8AkkE><ot?q}nd=U0sIaQ*1;?z!FN9Y=ROl4*We
z7tSS{NF<gIaVDrmdpovrTW98`P98d3KK#UZeri{`F-|sq`}~J7k(#QE7E3|1?S)_e
zOsmgiu9Y2WO8mW!R;T+GIwgne6Vcv1T&YY><*Spe885v2m4)6j<%?18LaX<VRIB%G
z^VeA-v3SWWbcxD(lpC4%V6xdGyM1B4#fh44`e?qoq<3`n)LZFh@6-c{X7|o5E4!Zz
z$}>y)MpyY%lv|j&<Gy&KZ)a!k!eW=Vu2w4bh1R`|+sL!8+YJl=000000000000000
z00000000000000000000007<)x*CUPU*|;t000000000000000000000000000000
z00000006-2tT*~ghaZfEe--{&_y^&q!;eG(000000000000000000000000000000
z000000002I0o<DIh}{|QpA6<^E7ii@<aDK0-+OCEdvZ@Rxo2Ifk&MkJcPBO^qd2?J
zXjh}nuHHl=x6o#1Z@fJm?26_~ho6Xr-wnSWelh%P_&ZSm00000000000000000000
z0000000000000000001Qd_BoK<CDSMY^7S*n{EsCbhHJ#Q*FVnWLvN^(Ve_AJ0A@8
zMgzvfZ^fej000000000000000000000000000000000000002s?}+vB<mUKP<;uup
zFgIJN7Ha9<D4PiXAQpZ-IsgCw00000000000000000000000000000000000z?(vU
zA{pCrx|AOaYTF;1%2(?TS1OZHIoThNDyAx<#Zs_+bUs%*Q>oOuqF#ycbFuL2(E$Je
z000000000000000000000000000000000000Nxz>lY6pLmC<4;*gjgROityileIII
zN_}H;PyBQ#KNi%sKNcnH56@R7dK<l-eVtbg000000000000000000000000000000
z0000000025v)<@08GbMp{(1Q6r~m)}00000000000000000000000000000000000
zfH#bLlU=cRd{bvUo=)GAI1`Ko<@(wDcrBHTbrhcOex>*Eg>p-x(emzQ%k_zqm0JCL
zu~w`Hh54o*?TRgwx5cBT*}l$rHkC>brn)cu#>X3fz0rK@pZQ`e{7>PB!g_c-y!+bs
zuDyEg{nsA7cE{B}zxuJOPhUNLbzRf|00000000000000000000000000000000000
z008(AwsU=I^YL4!Dpy7(gSpvCwNR@)RVvnlk^D@(QY;sO%OmZTBZE70gYWE1ZNAXo
zo?g;qx|AOarYp62Az#mr%#@2y%>>PnqOQ5Yfpw{S-g$eY!)T>4IhC(Y)|Lb#(d1Lj
z=7allJ99gC^rr54=w|Jw^VOhSU+A$rH~2tL>Ym4b&<v$~tv*#L6fYKoLfdSE-Kl$q
zZo5g}=$wLlp>U(qu3cTJdyd|$%lJ&O(7p{(r@;rZsqH75TR2gy)hpGxOO0QoudPV5
zHnTD5jUC+8nc9Bv*8hXP7ps-2g>Jht|A(F0=Xysvwduj;sWq2TyYXsdrdk@A$k!%X
zXB4%4dq-;1p4Hn<M4yF)c02D$r8ezby<Kw!W0je5J!-i39mzE(zgP{%g7Vnh!l1jh
zCsLaZuim!tMmGmuJh7<5?rrhZrh}_@Sn+m6C)X8SDLvtAEd1;6o8f;8KOg>H`04Ny
z;YY%M68=K?zNi8K00000000000000000000000000000000000004e?dXnjQEcV^q
z=Z^jH)}Do6@0ULEi`}i@`IkPHd-dZTUCEC4eH%Xitta1;$R<0o_icFP``5qFO1}8P
ziC2=Xm(T4uGL&k)y!eM7dOAD*@{{*p=xV(@b@jHlWm+#Ex^Txk(yf>2z7NcGb~P3g
z-Wd!3Cj4&rt?={VzYbpre=e+tBjK@dTT}r6000000000000000000000000000000
z00000004c-yW>-pv4MJVbhJ1%kiH}NP<Fgp8OWDP#VeJmfw@wBV!T)$7_XE@2YxKM
zE#6)^J3BkjwOTT}TC%f0xob(X9+dN?>4D7he63t56!HV9w<PahlCK8Sl~QmiC=4WT
zPwrb%)hx$nMh6ld$-ekNPxIK_Ja%+Nr`Z$!yIA=B@O$BR!oLi^5q>rNa`>m==fls1
z|30b!00000000000000000000000000000000000004j=6{%!4-qkpCrjniUp2nfO
zamY3fnZ_aAICL})sm3AMI3$wE&TLoIy(j!cEd1N>e}&%;zZrfl{IB5`!q0`D3I9#_
zn^6S-00000000000000000000000000000000000006u(rIU$x?73{K$h3-dtLSJI
zsaBC}6^V{yA{*5u<MBdQ<9K^#D%lzDX&kz{q5*rtPsYOUhu;go6aHoRjqt1Cm%~2|
zKOcTBd^M^700000000000000000000000000000000000004kDs-9#z9_uJP-~G}H
z8@m>R7dL*mGnI_Rdm4xC#v$7{WEzKb<IvGKq#B20<B&)uW7)38aN(X<_*(eo@U!7>
zhyOhM)$kvMbKykzuJDnl0ssI200000000000000000000000000000000000*0Mgi
zIez8D(9qcNZTG)x`1HYKBT+eD8z0`e|IDu1p^F`jM7gl-M1KFo_}Sev`?Jl&p3;d+
zhxhH>Ti#nvHxi>e3rEKuJ)NIEHn_jDk+`sD|HFl`>3yZi%M+PKV))GTg^|NgO^yu>
z@9AzNj@3^c-Wv>`Jb(Ghu|!{TbN1N%<HhqAF9kFE&yF-294a0@diKPT1N(z*L02QO
zXZ-Zw@h7Uo(`WKKdK!rxwH^79u_uodPfX9Hx}wubgkOz?--!+Y000000000000000
z00000000000000000000008jjwJsG;$Gc)3h3C6pdSPRtHwv?z&G5yIAMT18B*O2-
z!tX~1000000000000000000000000000000000000002^yCs#(#uLe8XSOQ}65-cl
z;di40000000000000000000000000000000000000002Ix%DK|@mNRU`R<oq*qG=}
zrnAl9#f=~CiYhmR?~8?h6aLTeFT(#3emVS;@IQvX7yjGux57_`uY@m$9}0gt{6P5g
zQ6m5V000000000000000000000000000000000000QezFr{dXo&n?ZOdwsLW_BD&l
zx@M8?Z5ACp%_7y^ERtQ#B9ZM#WwY_lbSf5)CpR>UM5a}wTSZ5!NVSS&t4MT2MK;kD
z&A%ahHWvPE_}AfU;Wxtn9)2<Wqwqh3zZ?E`_%FlX2tOQtDEy`HABX=iY6JiP00000
z00000000000000000000000000000006!#|R6HKfq}R2|j^0+8>S>k9?pB%TN~hx4
zcqSVao$*X(GfMU~qvZN#n?xeh%qBK8vx!^Mscbx+N;ivSN3%$zI#SuFV|0vKq*9%o
z*{)~}8?Jpn7JeuETKI+VGvRNB9}Axke<A#tupS2C`S5VKKim?&CG3tG0RR9100000
z00000000000000000000000000002+rnD{<Pse*=9fjw+U+I1PmS))93_scxTi*<`
z&G6S={ZwBw%rwIfy!P#N%`m+X_BO+gg|Md?rWV5PW|&+EyP9EQA<Xusvg!Cj)Y+Sg
z%}1~7KfPf|l<0|~>_T*->gD$zN#2N}K{9R8WG=lV>bMbIc=;=-u4o@Ng#EGbyW!Wv
zFNU8De<%Dz_|L*$4xbCduo?#8<Kgk}r^3PTZBZit0000000000000000000000000
z000000000000923=}D&Jv5vy?-LLFFy<su<=xv|6Wifd9{YTa>2EX>|r}`Fy54`s6
zb?rfKd(hJ!bhigx?LoFZ=xh%%i@}9o|4jNu@bXtW+JjVkkZcbU-N|%zA?S)ucEh#L
z#lqLZFNdEEe=Gd;@K?g03onP`;rVbV+#S9xyfsW*`>ShTi5dX_000000000000000
z000000000000000000000Pv$?eR6YrW^U@_p~L0FPmJfMGR;K!VzCqyMjARAiTd=T
zlaoh|?wg%Cdi<7VqEac1=Bv#X$z~!yUK^R0>Pv3URx6eILZZ=Nsxlgl*^1N6L{Oet
zXpm?m3i*?lCZCu+7>pl1($z>jc4hX7`-gTv@$j|-JG0Hi!}X)XyXSV7cO2c(*+`rm
zuI)Pd=<M86qvPdujl}Uo=MK(Pj?Wys`1o*dBQbPv_)zK6)bQ-&nc1F3;?RK|`%hF$
zqs1#b&#rGI4jj8Y{@A(c%Grlcp6_cU_SEOzH8);AR@zq>+|W$aipQU<l+R4ncOUBR
ziZ(4B{(da{+wiZ$Z-!qD|0D_k00000000000000000000000000000000000007`e
zS9dDjA5TtKYW2P88?X0tq*L)&Jdx^3W&7ie%&ufdD%;3J$81-l=d-W#$^ifX00000
z000000000000000000000000000000;C0p&{UyV1#=^e|zY`Sz000000000000000
r00000000000000000000008hNmr2Fr@mmtfX1P9*=t#x0+4TPg4B&mh
new file mode 100644
--- /dev/null
+++ b/toolkit/components/places/tests/migration/test_current_from_v43.js
@@ -0,0 +1,21 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function setup() {
+  await setupPlacesDatabase("places_v43.sqlite");
+});
+
+add_task(async function database_is_valid() {
+  // Accessing the database for the first time triggers migration.
+  Assert.equal(PlacesUtils.history.databaseStatus,
+               PlacesUtils.history.DATABASE_STATUS_UPGRADED);
+
+  let db = await PlacesUtils.promiseDBConnection();
+  Assert.equal((await db.getSchemaVersion()), CURRENT_SCHEMA_VERSION);
+});
+
+add_task(async function check_meta() {
+  let db = await PlacesUtils.promiseDBConnection();
+  await db.execute(`SELECT 1 FROM moz_meta`);
+});
+
--- a/toolkit/components/places/tests/migration/xpcshell.ini
+++ b/toolkit/components/places/tests/migration/xpcshell.ini
@@ -5,19 +5,21 @@ support-files =
   favicons_v41.sqlite
   places_outdated.sqlite
   places_v31.sqlite
   places_v34.sqlite
   places_v35.sqlite
   places_v36.sqlite
   places_v38.sqlite
   places_v42.sqlite
+  places_v43.sqlite
 
 [test_current_from_downgraded.js]
 [test_current_from_outdated.js]
 [test_current_from_v31.js]
 [test_current_from_v34.js]
 [test_current_from_v34_no_roots.js]
 [test_current_from_v35.js]
 [test_current_from_v36.js]
 [test_current_from_v38.js]
 [test_current_from_v41.js]
 [test_current_from_v42.js]
+[test_current_from_v43.js]