diff --git a/clients/go/camput/camput.go b/clients/go/camput/camput.go index 80d02eab0..260f9a61c 100644 --- a/clients/go/camput/camput.go +++ b/clients/go/camput/camput.go @@ -303,9 +303,9 @@ func main() { } if *flagTag != "" { tags := strings.Split(*flagTag, ",") - m := schema.NewSetAttributeClaim(permaNode.BlobRef, "camliTag", tags[0]) + m := schema.NewSetAttributeClaim(permaNode.BlobRef, "tag", tags[0]) for _, tag := range tags { - m = schema.NewAddAttributeClaim(permaNode.BlobRef, "camliTag", tag) + m = schema.NewAddAttributeClaim(permaNode.BlobRef, "tag", tag) put, err := up.UploadAndSignMap(m) handleResult("claim-permanode-tag", put, err) } diff --git a/lib/go/camli/mysqlindexer/receive.go b/lib/go/camli/mysqlindexer/receive.go index ca7e28f9c..71db62ddd 100644 --- a/lib/go/camli/mysqlindexer/receive.go +++ b/lib/go/camli/mysqlindexer/receive.go @@ -182,11 +182,9 @@ func (mi *Indexer) populateClaim(blobRef *blobref.BlobRef, camli *schema.Superse return } - // TODO(mpl): revert all "camliTag" to "tag". - // Will do in next CL, when we drop GetTaggedPermanodes if verifiedKeyId != "" { switch camli.Attribute { - case "camliRoot", "camliTag", "title": + case "camliRoot", "tag", "title": // TODO(bradfitz,mpl): these tag names are hard-coded. // we should probably have a config file of attributes // and properties (e.g. which way(s) they're indexed) @@ -196,7 +194,7 @@ func (mi *Indexer) populateClaim(blobRef *blobref.BlobRef, camli *schema.Superse camli.ClaimDate, blobRef.String(), camli.Permanode); err != nil { return } - if camli.Attribute == "camliTag" || camli.Attribute == "title" { + if camli.Attribute == "tag" || camli.Attribute == "title" { // Identical copy for fulltext searches // TODO(mpl): do the DELETEs as well if err = mi.db.Execute("INSERT IGNORE INTO signerattrvalueft (keyid, attr, value, claimdate, blobref, permanode) "+ diff --git a/lib/go/camli/mysqlindexer/search.go b/lib/go/camli/mysqlindexer/search.go index ecec8eb50..ea59683a1 100644 --- a/lib/go/camli/mysqlindexer/search.go +++ b/lib/go/camli/mysqlindexer/search.go @@ -141,35 +141,7 @@ func (mi *Indexer) GetBlobMimeType(blob *blobref.BlobRef) (mime string, size int return } -func (mi *Indexer) GetTaggedPermanodes(dest chan<- *blobref.BlobRef, signer *blobref.BlobRef, tag string, limit int) os.Error { - defer close(dest) - keyId, err := mi.keyIdOfSigner(signer) - if err != nil { - return err - } - - rs, err := mi.db.Query("SELECT permanode FROM signerattrvalue WHERE keyid = ? AND attr = ? AND value = ? AND claimdate <> '' ORDER BY claimdate DESC LIMIT ?", - keyId, "camliTag", tag, limit) - if err != nil { - return err - } - defer rs.Close() - - pn := "" - for rs.Next() { - if err := rs.Scan(&pn); err != nil { - return err - } - br := blobref.Parse(pn) - if br == nil { - continue - } - dest <- br - } - return nil -} - -func (mi *Indexer) SearchPermanodes(dest chan<- *blobref.BlobRef, request *search.PermanodesRequest) os.Error { +func (mi *Indexer) SearchPermanodesWithAttr(dest chan<- *blobref.BlobRef, request *search.PermanodeByAttrRequest) os.Error { defer close(dest) keyId, err := mi.keyIdOfSigner(request.Signer) if err != nil { diff --git a/lib/go/camli/search/handler.go b/lib/go/camli/search/handler.go index af35c9591..62e729c72 100644 --- a/lib/go/camli/search/handler.go +++ b/lib/go/camli/search/handler.go @@ -105,11 +105,8 @@ func (sh *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) { case "camli/search/recent": sh.serveRecentPermanodes(rw, req) return - case "camli/search/tag": - sh.serveTaggedPermanodes(rw, req) - return - case "camli/search/request": - sh.serveRequestedPermanodes(rw, req) + case "camli/search/permanodeattr": + sh.servePermanodesWithAttr(rw, req) return case "camli/search/describe": sh.serveDescribe(rw, req) @@ -169,41 +166,8 @@ func (sh *Handler) serveRecentPermanodes(rw http.ResponseWriter, req *http.Reque dr.PopulateJSON(ret) } -func (sh *Handler) serveTaggedPermanodes(rw http.ResponseWriter, req *http.Request) { - ret := jsonMap() - defer httputil.ReturnJson(rw, ret) - - signer := blobref.MustParse(mustGet(req, "signer")) - value := mustGet(req, "value") - ch := make(chan *blobref.BlobRef, buffered) - errch := make(chan os.Error) - go func() { - errch <- sh.index.GetTaggedPermanodes(ch, signer, value, maxPermanodes) - }() - - dr := sh.NewDescribeRequest() - - tagged := jsonMapList() - for res := range ch { - dr.Describe(res, 2) - jm := jsonMap() - jm["permanode"] = res.String() - tagged = append(tagged, jm) - } - - err := <-errch - if err != nil { - // TODO(mpl): return error status code, in addition to the english error code - ret["error"] = err.String() - return - } - - ret["tagged"] = tagged - dr.PopulateJSON(ret) -} - // TODO(mpl): configure and/or document the name of the possible attributes in the http request -func (sh *Handler) serveRequestedPermanodes(rw http.ResponseWriter, req *http.Request) { +func (sh *Handler) servePermanodesWithAttr(rw http.ResponseWriter, req *http.Request) { ret := jsonMap() defer httputil.ReturnJson(rw, ret) @@ -237,8 +201,8 @@ func (sh *Handler) serveRequestedPermanodes(rw http.ResponseWriter, req *http.Re ch := make(chan *blobref.BlobRef, buffered) errch := make(chan os.Error) go func() { - errch <- sh.index.SearchPermanodes(ch, - &PermanodesRequest{Attribute: attr, + errch <- sh.index.SearchPermanodesWithAttr(ch, + &PermanodeByAttrRequest{Attribute: attr, Query: value, Signer: signer, FuzzyMatch: fuzzyMatch, @@ -247,12 +211,12 @@ func (sh *Handler) serveRequestedPermanodes(rw http.ResponseWriter, req *http.Re dr := sh.NewDescribeRequest() - requested := jsonMapList() + withAttr := jsonMapList() for res := range ch { dr.Describe(res, 2) jm := jsonMap() jm["permanode"] = res.String() - requested = append(requested, jm) + withAttr = append(withAttr, jm) } err := <-errch @@ -262,7 +226,7 @@ func (sh *Handler) serveRequestedPermanodes(rw http.ResponseWriter, req *http.Re return } - ret["requested"] = requested + ret["withAttr"] = withAttr dr.PopulateJSON(ret) } diff --git a/lib/go/camli/search/search.go b/lib/go/camli/search/search.go index b4ba3183d..ade3283d7 100644 --- a/lib/go/camli/search/search.go +++ b/lib/go/camli/search/search.go @@ -72,7 +72,7 @@ type Path struct { Suffix string } -type PermanodesRequest struct { +type PermanodeByAttrRequest struct { Attribute string // currently supported: "tag", "title" Query string Signer *blobref.BlobRef @@ -87,14 +87,6 @@ type Index interface { owner []*blobref.BlobRef, limit int) os.Error - // TODO(mpl): ditch this and merge it into SearchPermanodes. - // GetTaggedPermanodes finds permanodes that have a tag which - // is an exact match with the given tag. - // dest is closed - GetTaggedPermanodes(dest chan<- *blobref.BlobRef, - signer *blobref.BlobRef, - tag string, limit int) os.Error - // SearchPermanodes finds permanodes matching the provided // request and sends unique permanode blobrefs to dest. // In particular, if request.FuzzyMatch is true, a fulltext @@ -105,8 +97,8 @@ type Index interface { // restricted to the named attribute. // // dest is always closed, regardless of the error return value. - SearchPermanodes(dest chan<- *blobref.BlobRef, - request *PermanodesRequest) os.Error + SearchPermanodesWithAttr(dest chan<- *blobref.BlobRef, + request *PermanodeByAttrRequest) os.Error GetOwnerClaims(permaNode, owner *blobref.BlobRef) (ClaimList, os.Error) diff --git a/lib/go/camli/test/fakeindex.go b/lib/go/camli/test/fakeindex.go index d927669ba..07eb77331 100644 --- a/lib/go/camli/test/fakeindex.go +++ b/lib/go/camli/test/fakeindex.go @@ -113,11 +113,7 @@ func (fi *FakeIndex) GetRecentPermanodes(dest chan *search.Result, owner []*blob } // TODO(mpl): write real tests -func (fi *FakeIndex) GetTaggedPermanodes(dest chan<- *blobref.BlobRef, signer *blobref.BlobRef, tag string, limit int) os.Error { - panic("NOIMPL") -} - -func (fi *FakeIndex) SearchPermanodes(dest chan<- *blobref.BlobRef, request *search.PermanodesRequest) os.Error { +func (fi *FakeIndex) SearchPermanodesWithAttr(dest chan<- *blobref.BlobRef, request *search.PermanodeByAttrRequest) os.Error { panic("NOIMPL") } diff --git a/server/go/camlistored/ui/camli.js b/server/go/camlistored/ui/camli.js index aec8a42b0..fcbee199b 100644 --- a/server/go/camlistored/ui/camli.js +++ b/server/go/camlistored/ui/camli.js @@ -306,17 +306,9 @@ function camliGetRecentlyUpdatedPermanodes(opts) { xhr.send(); } -function camliGetTaggedPermanodes(signer, value, opts) { - var xhr = camliJsonXhr("camliGetTaggedPermanodes", opts); - var path = makeURL(Camli.config.searchRoot + "camli/search/tag", - { signer: signer, value: value }); - xhr.open("GET", path, true); - xhr.send(); -} - -function camliGetRequestedPermanodes(signer, attr, value, fuzzy, opts) { - var xhr = camliJsonXhr("camliGetRequestedPermanodes", opts); - var path = makeURL(Camli.config.searchRoot + "camli/search/request", +function camliGetPermanodesWithAttr(signer, attr, value, fuzzy, opts) { + var xhr = camliJsonXhr("camliGetPermanodesWithAttr", opts); + var path = makeURL(Camli.config.searchRoot + "camli/search/permanodeattr", { signer: signer, attr: attr, value: value, fuzzy: fuzzy }); xhr.open("GET", path, true); xhr.send(); diff --git a/server/go/camlistored/ui/permanode.js b/server/go/camlistored/ui/permanode.js index f6a9b9483..21f939471 100644 --- a/server/go/camlistored/ui/permanode.js +++ b/server/go/camlistored/ui/permanode.js @@ -88,7 +88,7 @@ function handleFormTagsSubmit(e) { var tag = tags[idx]; camliNewAddAttributeClaim( getPermanodeParam(), - "camliTag", + "tag", tag, { success: oneDone, @@ -143,7 +143,7 @@ function deleteTagFunc(tag, strikeEle, removeEle) { strikeEle.innerHTML = "" + strikeEle.innerHTML + ""; camliNewDelAttributeClaim( getPermanodeParam(), - "camliTag", + "tag", tag, { success: function() { @@ -410,7 +410,7 @@ function onBlobDescribed(jres) { c.appendChild(a); } - var tags = permanodeObject.attr.camliTag; + var tags = permanodeObject.attr.tag; for (idx in tags) { var tag = tags[idx]; diff --git a/server/go/camlistored/ui/search.js b/server/go/camlistored/ui/search.js index 7d22ecb64..7eb23f928 100644 --- a/server/go/camlistored/ui/search.js +++ b/server/go/camlistored/ui/search.js @@ -93,13 +93,13 @@ function doSearch() { // TODO(mpl): add other kinds of searches (by filename for ex). switch(CamliSearch.type) { case "tag": - camliGetTaggedPermanodes(sigconf.publicKeyBlobRef, CamliSearch.query, tagcb); + camliGetPermanodesWithAttr(sigconf.publicKeyBlobRef, "tag", CamliSearch.query, CamliSearch.fuzzy, tagcb); break; case "title": - camliGetRequestedPermanodes(sigconf.publicKeyBlobRef, "title", CamliSearch.query, CamliSearch.fuzzy, tagcb); + camliGetPermanodesWithAttr(sigconf.publicKeyBlobRef, "title", CamliSearch.query, "true", tagcb); break; case "": - camliGetRequestedPermanodes(sigconf.publicKeyBlobRef, "", CamliSearch.query, "true", tagcb); + camliGetPermanodesWithAttr(sigconf.publicKeyBlobRef, "", CamliSearch.query, "true", tagcb); break; } }; @@ -120,14 +120,7 @@ function showPermanodes(searchRes, type) { while (div.hasChildNodes()) { div.removeChild(div.lastChild); } - switch(type) { - case "tag": - var results = searchRes.tagged; - break; - default: - var results = searchRes.requested; - break; - } + var results = searchRes.withAttr; if (results.length > 0) { var checkall = document.createElement("input"); checkall.id = "checkall";